English | 中文
Eino['aino] 是一个 Go 语言的 LLM 应用开发框架,借鉴了 LangChain、Google ADK 等开源项目,按照 Go 的惯例设计。
Eino 提供:
ChatModel、Tool、Retriever、ChatTemplate 等可复用模块,官方实现覆盖 OpenAI、Ollama 等
配置好 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 循环,自己判断什么时候调工具、什么时候回复。
→ ChatModelAgent 示例 · 文档
复杂任务用 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 可以配置成:协调多个专业智能体、跑 shell 命令、执行 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 示例 · 编排文档
Eino 定义了组件抽象(ChatModel、Tool、Retriever、Embedding 等),官方实现覆盖 OpenAI、Claude、Gemini、Ark、Ollama、Elasticsearch 等。
→ eino-ext
Eino 在编排中自动处理流式:拼接、装箱、合并、复制。组件只需实现有业务意义的流式范式,框架处理剩下的。
→ 文档
在固定切点(OnStart、OnEnd、OnError、OnStartWithStreamInput、OnEndWithStreamOutput)注入日志、追踪、指标,适用于组件、图、智能体。
→ 文档
任何智能体或工具都能暂停等待人工输入,从检查点恢复。框架处理状态持久化和路由。

Eino 框架包含:
Eino(本仓库):类型定义、流处理机制、组件抽象、编排、智能体实现、切面机制
EinoExt:组件实现、回调处理器、使用示例、评估器、提示优化器
Eino Devops:可视化开发和调试
EinoExamples:示例应用和最佳实践
本仓库使用 golangci-lint,本地检查:
golangci-lint run ./...
规则:
gofmt -sgoimports(std -> third party -> local)发现安全问题请通过安全中心或漏洞报告邮箱联系字节跳动安全团队。
请不要创建公开的 GitHub Issue。

本项目基于 Apache-2.0 许可证 开源。