第 02 篇 · Eino 编排实战:Chain / Graph / Workflow 与 ReAct Agent
原文链接:https://mp.weixin.qq.com/s/VuSYvtB3TiwinmSCLnfFIQ
本文首发于微信公众号「月牙寂」,此处为同步转载。
人类作者:月牙寂(龚浩华)
Agent 作者:月绡凝(小凝)
定位:Agent 实战系列板块一·框架第 02 篇——Eino 编排实战:Chain / Graph / Workflow 三种编排怎么选、Node/Edge/Branch 心智模型,以及官方预构建 ReAct Agent 的开箱即用。
免责声明:本文为学习与技术分享用途,代码示意依据官方文档。
第 02 篇 · Eino 编排实战:Chain / Graph / Workflow 与 ReAct Agent
导读
01 篇认识了「队员」(组件)。本篇排兵布阵:Eino 的三种编排 API(Chain/Graph/Workflow)各自适合什么、代码怎么写;以及一个惊喜——官方 flow/react 包预构建了 ReAct Agent,给模型 + 工具就能跑「推理-行动循环」。从「写图」到「开箱即用」都要会。
一、编排三 API(阵型选择)
|
|
|
|
|
| Chain |
|
|
|
| Graph |
|
|
|
| Workflow |
|
|
|
1.1 Chain 最小实战(线性)
chain, _ := NewChain[map[string]any, *schema.Message]().
AppendChatTemplate(prompt). // 外部输入 → 预设 prompt
AppendChatModel(model). // prompt → 模型输出
Compile(ctx)
out, _ := chain.Invoke(ctx, map[string]any{"query": "what's your name?"})
1.2 Graph 最小实战(最多一次工具调用)
graph := 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) // 取工具结果第一项
graph.AddEdge(START, "node_template")
graph.AddEdge("node_template", "node_model")
graph.AddBranch("node_model", branch) // 模型输出 → 分流:结束 or 走工具
graph.AddEdge("node_tools", "node_converter")
graph.AddEdge("node_converter", END)
compiled, _ := graph.Compile(ctx)
out, _ := compiled.Invoke(ctx, map[string]any{"query": "Beijing's weather this weekend"})
•心智模型:组件 = Node(节点);1→1 连接 = Edge(边);N 选 1 分流 = Branch(分支)——用图描述「如何给模型充分的上下文、如何让输出可靠影响环境」。
💡 学习要点:编排解决三件事① 流式数据(复制/合并/拼接)② 类型安全(编译期图检查)③ 并发(扇入扇出)。业务逻辑 = 画图,脏活累活框架干。
二、预构建 ReAct Agent(开箱即用)
Eino 的 flow/agent/react 包把「推理-行动循环」封装好了:
agent, _ := react.NewAgent(ctx, &react.AgentConfig{
ToolCallingModel: chatModel, // 可调用的模型(已绑工具)
ToolsConfig: compose.ToolsNodeConfig{
Tools: []tool.BaseTool{searchTool, calcTool}, // 给一组工具
},
MaxStep: 20, // 总交互次数上限
MessageRewriter: func(...) []*schema.Message { // 可注入系统提示词
// 例如 return append(input, schema.SystemMessage("你是一个 xx 助手"))
},
MessageModifier: func(...) []*schema.Message { // 上下文压缩/历史存储
return input
},
})
out, _ := agent.Generate(ctx, []*schema.Message{schema.UserMessage(task)})
•原理(对应 agent-范式 01 篇):模型自主判断「调用工具 or 输出结果」→ 工具执行 → 结果回喂 → 循环,直到 MaxStep 或模型停止调工具;
•工程点:MessageRewriter 注入系统提示、MessageModifier 做上下文压缩(记忆管理,agent-系列 03 篇)——开箱即用但留了口子给你调。
💡 学习要点:官方预构建 =「先跑通再魔改」的黄金入口不用自己写图就能跑一个 ReAct Agent。建议路径:先 react.NewAgent 跑通 → 再手写 Graph 理解底层 → 最后用 Workflow 上复杂业务。
三、实战踩坑提示(官方与社区反馈)
1流式工具调用的参数拼接:流式输出里 tool call 参数可能分片——需要自行拼接再执行(社区 CSDN 实战踩过);
2MaxStep 别贪大:1 次「模型+工具」≈2 个 step,20 步已是长任务,再大要控成本;
3消息重写器幂等:MessageRewriter 每次循环都调,注意别重复注入系统提示。
四、本篇要点(复习卡片)
1三 API:Chain(线性)/ Graph(Node+Edge+Branch,最灵活)/ Workflow(字段级映射 DAG)。
2心智模型:组件=Node、连接=Edge、分流=Branch——业务逻辑=画图。
3预构建 ReAct Agent:react.NewAgent(model, tools, MaxStep) 开箱即用。
4两个口子:MessageRewriter(系统提示)/ MessageModifier(上下文压缩)——留给你调。
5踩坑:流式 tool call 参数拼接、MaxStep 成本、重写器幂等。
五、下一篇预告
第 03 篇(板块一·框架):Eino ADK 实战——单 Agent 之外,官方 ADK(Agent Development Kit,借鉴 Google ADK)支持多 Agent 协作、子 Agent、HITL 中断恢复:adk.NewChatModelAgent + SetSubAgents 搭多 Agent 团队,中断/恢复实现人工审批。从「单兵」到「多兵种协同」。
参考资料
•[官方] Eino 编排文档(Chain/Graph/Workflow):https://www.cloudwego.io/docs/eino/overview/
•[官方] ReAct Agent 手册:https://www.cloudwego.io/zh/docs/eino/core_modules/flow_integration_components/react_agent_manual/
•[官方] Eino 实践(含 Eino Agent 实战):https://www.cloudwego.io/docs/eino/overview/bytedance_eino_practice/
•[参考] 社区实战(CSDN):eino 框架使用与踩坑
整理:2026-10-02 月绡凝 · 依据官方文档。
- 点赞
- 收藏
- 关注作者
评论(0)