English | 中文
Eino['aino] は Golang で構築された LLM アプリケーション開発フレームワークです。LangChain、Google ADK、その他のオープンソースフレームワークから着想を得ており、Golang の慣例に従うように設計されています。
Eino は以下を提供します:
- Components:
ChatModel、Tool、Retriever、ChatTemplateなどの再利用可能なビルディングブロック。OpenAI、Ollama など、公式実装を備えています。 - Agent Development Kit (ADK):ツール使用、マルチエージェント調整、コンテキスト管理、人間関与ループの中断/再開、利用可能なエージェントパターンを備えた AI エージェントを構築します。
- Composition:コンポーネントをグラフとワークフローに接続し、スタンドアロンで実行するか、エージェント用のツールとして公開することができます。
- Examples:一般的なパターンと実世界のユースケースの実装コード。
ChatModel を設定し、オプションでツールを追加すれば、動作するエージェントが得られます:
chatModel, _ := openai.NewChatModel(ctx, &openai.ChatModelConfig{
Model: "gpt-4o",
APIKey: os.Getenv("OPENAI_API_KEY"),
})
agent, _ := adk.NewChatModelAgent(ctx, &adk.ChatModelAgentConfig{
Model: chatModel,
})
runner := adk.NewRunner(ctx, adk.RunnerConfig{Agent: agent})
iter := runner.Query(ctx, "Hello, who are you?")
for {
event, ok := iter.Next()
if !ok {
break
}
fmt.Println(event.Message.Content)
}エージェントに機能を付与するためにツールを追加します:
agent, _ := adk.NewChatModelAgent(ctx, &adk.ChatModelAgentConfig{
Model: chatModel,
ToolsConfig: adk.ToolsConfig{
ToolsNodeConfig: compose.ToolsNodeConfig{
Tools: []tool.BaseTool{weatherTool, calculatorTool},
},
},
})エージェントは ReAct ループを内部的に処理します — ツールをいつ呼び出すか、いつ応答するかを判断します。
複雑なタスクには DeepAgent を使用します。問題をステップに分割し、サブエージェントに委譲し、進捗を追跡します:
deepAgent, _ := deep.New(ctx, &deep.Config{
ChatModel: chatModel,
SubAgents: []adk.Agent{researchAgent, codeAgent},
ToolsConfig: adk.ToolsConfig{
ToolsNodeConfig: compose.ToolsNodeConfig{
Tools: []tool.BaseTool{shellTool, pythonTool, webSearchTool},
},
},
})
runner := adk.NewRunner(ctx, adk.RunnerConfig{Agent: deepAgent})
iter := runner.Query(ctx, "Analyze the sales data in report.csv and generate a summary chart")DeepAgent は複数の特化したエージェントを調整し、シェルコマンドを実行し、Python コードを実行し、ウェブを検索するよう設定できます。
→ DeepAgent の例 · ドキュメント
実行フローを細かく制御する必要がある場合は、compose を使用してグラフとワークフローを構築します:
graph := compose.NewGraph[*Input, *Output]()
graph.AddLambdaNode("validate", validateFn)
graph.AddChatModelNode("generate", chatModel)
graph.AddLambdaNode("format", formatFn)
graph.AddEdge(compose.START, "validate")
graph.AddEdge("validate", "generate")
graph.AddEdge("generate", "format")
graph.AddEdge("format", compose.END)
runnable, _ := graph.Compile(ctx)
result, _ := runnable.Invoke(ctx, input)構成をエージェント用のツールとして公開し、決定論的ワークフローと自律的な動作をブリッジできます:
tool, _ := graphtool.NewInvokableGraphTool(graph, "data_pipeline", "Process and validate data")
agent, _ := adk.NewChatModelAgent(ctx, &adk.ChatModelAgentConfig{
Model: chatModel,
ToolsConfig: adk.ToolsConfig{
ToolsNodeConfig: compose.ToolsNodeConfig{
Tools: []tool.BaseTool{tool},
},
},
})これにより、ドメイン固有のパイプラインを正確に制御して構築し、エージェントがいつ使用するかを決定できます。
→ GraphTool の例 · compose ドキュメント
Eino は、OpenAI、Claude、Gemini、Ark、Ollama、Elasticsearch などの公式実装を備えたコンポーネント抽象化(ChatModel、Tool、Retriever、Embedding など)を定義します。
→ eino-ext
Eino はオーケストレーション全体でストリーミングを自動的に処理します:データがノード間を流れるときにストリームの連結、ボックス化、マージ、コピーを行います。コンポーネントは自分たちに意味のあるストリーミング パラダイムのみを実装し、フレームワークが残りを処理します。
→ ドキュメント
固定ポイント(OnStart、OnEnd、OnError、OnStartWithStreamInput、OnEndWithStreamOutput)でログ、トレース、メトリクスをコンポーネント、グラフ、エージェント全体に注入します。
→ ドキュメント
任意のエージェント またはツールは人間の入力のために実行を一時停止し、チェックポイントから再開できます。フレームワークが状態の永続化とルーティングを処理します。
Eino フレームワークは以下から構成されています:
-
Eino(このリポジトリ):型定義、ストリーミング機構、コンポーネント抽象化、オーケストレーション、エージェント実装、アスペクト機構
-
EinoExt:コンポーネント実装、コールバックハンドラー、使用例、エバリュエーター、プロンプト最適化ツール
-
Eino Devops:可視化された開発とデバッグ
-
EinoExamples:サンプルアプリケーションとベストプラクティス
- Go 1.18 以上
このリポジトリは golangci-lint を使用しています。ローカルで確認するには:
golangci-lint run ./...実行されるルール:
- エクスポートされた関数、インターフェース、パッケージなどは GoDoc コメントを持つべきです
- コードは
gofmt -sでフォーマットされるべきです - インポート順序は
goimports(std → third party → local)に従うべきです
このプロジェクトで潜在的なセキュリティ問題を発見した場合、または発見した可能性がある場合は、セキュリティセンターまたは脆弱性報告メールを通じて Bytedance Security に通知してください。
パブリック GitHub Issues を作成しないでください。
- メンバーシップ:COMMUNITY MEMBERSHIP
- Issues:Issues
- Lark:以下の QR コードを Feishu でスキャンして、CloudWeGo/eino ユーザーグループに参加してください。
このプロジェクトは Apache-2.0 ライセンスでライセンスされています。


