字节跳动开源的 Go Agent 框架,10K+ Stars 填补 "Go 无 LangChain" 的空白
当 Python 生态的 LangChain、LangGraph 把 AI 应用开发推向工业化的同时,Go 开发者只能眼馋。现在字节跳动的 CloudWeGo 团队交出了自己的答卷——Eino。它不只是简单移植 LangChain,而是用 Go 的方式重新思考了 AI 应用架构:组合优于继承、接口驱动、流式优先。
为什么 Go 需要 LLM 框架?
AI 应用开发已经从"调 API"进化到了"编排工作流"。现代 AI 应用不再是简单的请求-响应,而是涉及多步推理、工具调用、多 Agent 协作、人机交互等复杂流程。
Python 生态里,LangChain 是事实标准。但 Go 开发者面对的是一个尴尬的现实:
| 框架 | 语言 | 定位 | 成熟度 |
|---|---|---|---|
| LangChain | Python | AI 应用框架 | 最成熟 |
| LangGraph | Python | 状态图工作流 | 成熟 |
| Google ADK | Python/Go/JS | Agent 开发 | 较新 |
| LangChain Go | Go | LangChain 移植 | 功能有限 |
| LinGoose | Go | AI 编排 | 小众 |
LangChain Go(tmc/langchaingo)是最接近的选择,但它本质上是 LangChain 的 Go 移植,API 设计带有明显的 Python 味道,而且功能覆盖远不如 Python 版。
字节跳动的 CloudWeGo 团队决定不走了——他们要造一个 Go-first 的 LLM 应用开发框架。这就是 Eino(发音 "aino"),GitHub Stars 已突破 10K。
Eino 是什么
Eino 是一个用 Go 构建的 LLM 应用开发框架。它从 LangChain、Google ADK 等框架中汲取灵感,但严格遵循 Go 的设计惯例。
核心定位可以用一句话概括:组件化 + 编排 + Agent,三件套搞定 AI 应用。
┌─────────────────────────────────────────────┐
│ Eino (核心框架) │
│ 类型定义 · 流式机制 · 组件抽象 │
│ 编排引擎 · Agent 实现 · 切面机制 │
├─────────────────────────────────────────────┤
│ EinoExt (扩展) │
│ OpenAI · Claude · Gemini · Ark · Ollama │
│ Elasticsearch · 回调处理器 · 评估器 │
│ Prompt 优化器 · 可视化调试 │
├─────────────────────────────────────────────┤
│ EinoExamples (示例) │
│ RAG · ReAct Agent · Manus Agent · Deer-Go │
│ 多 Agent 协作 · 人机交互 │
└─────────────────────────────────────────────┘
设计哲学:Go 的方式做 AI
组合优于继承
每个组件(ChatModel、Tool、Retriever)都是一个接口,可以自由替换实现:
chatModel, _ := openai.NewChatModel(ctx, &openai.ChatModelConfig{
Model: "gpt-4o",
APIKey: os.Getenv("OPENAI_API_KEY"),
})
// 换成 Claude 只需要换一行
// chatModel, _ := claude.NewChatModel(ctx, &claude.ChatModelConfig{...})
// 换成本地 Ollama
// chatModel, _ := ollama.NewChatModel(ctx, &ollama.ChatModelConfig{...})
流式优先
AI 应用的流式响应不是可选功能——用户不想盯着空白屏幕等 10 秒。Eino 在框架层面就内置了流式支持,自动处理流式拼接、装箱、合并和复制。
切面机制
类似 AOP 的回调机制,可以在固定注入点插入日志、追踪和指标:
- OnStart:组件开始执行
- OnEnd:组件执行完成
- OnError:组件执行出错
- OnStartWithStreamInput:流式输入开始
- OnEndWithStreamOutput:流式输出完成
与 OpenTelemetry 无缝集成,享受 Go 原生可观测性生态的完整支持。
核心模块一:ADK(Agent 开发套件)
ADK 是 Eino 最有特色的模块,提供了完整的 Agent 开发能力。
ChatModelAgent:最简单的 Agent
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, "你好,你是谁?")
for {
event, ok := iter.Next()
if !ok {
break
}
fmt.Println(event.Message.Content)
}
加上工具,Agent 就获得了调用外部能力的能力。Agent 内部自动处理 ReAct 循环——它自己决定什么时候调用工具、什么时候直接回答。
DeepAgent:复杂任务分解
面对需要多步推理的复杂任务,DeepAgent 把问题拆解成步骤,委派给子 Agent,并追踪进度。它可以协调多个专业化 Agent、执行 Shell 命令、运行 Python 代码、搜索网页。
五种多 Agent 协作模式
| 模式 | 说明 | 典型场景 |
|---|---|---|
| Sequential | 按顺序执行多个 Agent | 写作→审核→发布 |
| Parallel | 并行执行多个 Agent | 同时搜索多个数据源 |
| Loop | 循环执行直到满足条件 | 代码生成→测试→修复循环 |
| Supervisor | 主管分配任务给子 Agent | 一个调度 Agent 管理多个专业 Agent |
| Plan-Execute | 先规划再执行,可重规划 | 复杂项目执行 |
人机交互(HITL)
这是 Eino 的亮点功能。任何 Agent 或工具都可以暂停执行,等待人类输入,然后从检查点恢复。框架提供 5 种人机交互模式:
- 审批模式:Agent 在执行关键操作前请求人类批准
- 审核-编辑模式:Agent 生成内容后交给人类审核和修改
- 反馈循环模式:Agent 执行后根据人类反馈迭代改进
- 跟进模式:Agent 在不确定时向人类请求额外信息
- Supervisor 模式:人类作为 Supervisor 监督多 Agent 协作
核心模块二:Compose(编排引擎)
当你需要精确控制执行流程时,用 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)
Graph 是有向无环图(DAG),节点之间可以有条件分支、循环依赖等复杂拓扑。
支持的模型
EinoExt 扩展已支持:
| Provider | 模型 |
|---|---|
| OpenAI | GPT-4o, GPT-4 Turbo |
| Anthropic | Claude 3.5 Sonnet |
| Gemini | |
| 字节跳动 | Ark (豆包) |
| Ollama | Llama 3, Qwen 2.5 等本地模型 |
安装
go get github.com/cloudwego/eino@latest
go get github.com/cloudwego/eino-ext@latest # 扩展
总结
Eino 不是 LangChain 的 Go 翻译,而是用 Go 的方式重新思考了 AI 应用开发:
- 组合优于继承:所有组件都是接口
- 流式优先:框架层面内置
- Agent 原生:ReAct、DeepAgent、五种协作模式开箱即用
- 人机交互:5 种 HITL 模式解决生产环境的信任问题
- Go 原生可观测:与 OpenTelemetry 无缝集成
如果你是 Go 开发者,想做 AI 应用但不想写 Python,Eino 是目前最成熟的选择。
开源地址:https://github.com/cloudwego/eino