基于 Go 语言的 LLM/AI 应用开发框架,由 CloudWeGo(字节跳动)开源,提供组件化抽象、智能体编排、图/链工作流与流式处理能力。
项目简介#
Eino(发音 ['aino])是 CloudWeGo(字节跳动开源组织)推出的 Go 语言 AI 应用框架。受 LangChain、Google ADK 等启发,但严格遵循 Go 编程惯例,充分利用 Go 的并发模型与类型系统。
- 许可证: Apache-2.0
- 依赖要求: Go 1.18 及以上
- 维护方: CloudWeGo / 字节跳动
核心特性#
组件化抽象#
提供可复用组件接口:ChatModel、Tool、Retriever、ChatTemplate、Embedding、Document Loader、Lambda 等。官方实现覆盖 OpenAI、Claude、Gemini、Ark、Ollama、Elasticsearch 等。
智能体开发套件 (ADK)#
- ChatModelAgent: 内置 ReAct 循环,自动处理工具调用、对话状态与推理流程
- 预设模式: Deep Agent(任务编排)、Supervisor(层级协调)、顺序/并行/循环
- Human-in-the-Loop: 中断/恢复机制,支持检查点持久化
编排引擎#
- Chain: 单向链式流程
- Graph: 有向图(可带环)
- Workflow: 无环图,支持字段级数据映射
- 运行时能力: 编译期类型检查、流处理、并发管理、切面注入、选项分发
流式处理#
框架自动处理流的拼接、装箱、合并与复制;组件只需实现有业务意义的流式范式。
回调切面#
在固定切点注入日志、追踪、指标:OnStart、OnEnd、OnError、OnStartWithStreamInput、OnEndWithStreamOutput。
代码示例#
ChatModelAgent 使用#
agent, _ := adk.NewChatModelAgent(ctx, &adk.ChatModelAgentConfig{
Model: chatModel,
ToolsConfig: adk.ToolsConfig{
ToolsNodeConfig: compose.ToolsNodeConfig{
Tools: []tool.BaseTool{weatherTool, calculatorTool},
},
},
})
runner := adk.NewRunner(ctx, adk.RunnerConfig{Agent: agent})
iter := runner.Query(ctx, "What's the weather in Beijing this weekend?")
Graph 编排#
graph := compose.NewGraph[map[string]any, *schema.Message]()
_ = graph.AddChatTemplateNode("node_template", chatTpl)
_ = graph.AddChatModelNode("node_model", chatModel)
_ = graph.AddToolsNode("node_tools", toolsNode)
_ = graph.AddLambdaNode("node_converter", takeOne)
compiledGraph, _ := graph.Compile(ctx)
out, _ := compiledGraph.Invoke(ctx, map[string]any{"query":"Beijing's weather this weekend"})
模块结构#
| 仓库 | 职责 |
|---|---|
| eino | 核心骨架:类型定义、流处理、组件接口、编排、ADK、切面机制 |
| eino-ext | 生态集成:第三方组件实现、回调处理器、评估器 |
| eino-examples | 示例应用与最佳实践 |
| Eino DevOps | 可视化开发与调试 |
适用场景#
- 对话式助手与工具调用
- 复杂任务分解与多智能体协作
- 企业级数据处理与推理管线(RAG、Workflow)
- 需要人机协同(审批、输入)的业务流程