第 02 篇 · Eino 编排实战:Chain / Graph / Workflow 与 ReAct Agent

举报
yd_287713361 发表于 2026/10/28 23:44:57 2026/10/28
【摘要】 第 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 的开箱即用。

免责声明:本文为学习与技术分享用途,代码示意依据官方文档。

01SECTION

第 02 篇 · Eino 编排实战:Chain / Graph / Workflow 与 ReAct Agent


02SECTION

导读


01 篇认识了「队员」(组件)。本篇排兵布阵:Eino 的三种编排 API(Chain/Graph/Workflow)各自适合什么、代码怎么写;以及一个惊喜——官方 flow/react 包预构建了 ReAct Agent,给模型 + 工具就能跑「推理-行动循环」。从「写图」到「开箱即用」都要会。

03SECTION

一、编排三 API(阵型选择)


编排
结构
特点
适用
Chain
单向链(只能前进)
最简单,AppendChatTemplate→AppendChatModel
线性流水线(提示→模型)
Graph
有向图(可环可无环)
最灵活:Node + Edge + Branch
复杂分支/循环(Agent 类)
Workflow
DAG + 字段级映射
节点输入输出按 struct 字段映射
多输入多输出、数据变换密集

1.1 Chain 最小实战(线性)

go

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 最小实战(最多一次工具调用)

go

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(分支)——用图描述「如何给模型充分的上下文、如何让输出可靠影响环境」。

💡 学习要点:编排解决三件事① 流式数据(复制/合并/拼接)② 类型安全(编译期图检查)③ 并发(扇入扇出)。业务逻辑 = 画图,脏活累活框架干。

04SECTION

二、预构建 ReAct Agent(开箱即用)


Eino 的 flow/agent/react 包把「推理-行动循环」封装好了:

go

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 上复杂业务。

05SECTION

三、实战踩坑提示(官方与社区反馈)


1流式工具调用的参数拼接:流式输出里 tool call 参数可能分片——需要自行拼接再执行(社区 CSDN 实战踩过);

2MaxStep 别贪大:1 次「模型+工具」≈2 个 step,20 步已是长任务,再大要控成本;

3消息重写器幂等:MessageRewriter 每次循环都调,注意别重复注入系统提示。

06SECTION

四、本篇要点(复习卡片)


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 成本、重写器幂等。

07SECTION

五、下一篇预告


第 03 篇(板块一·框架):Eino ADK 实战——单 Agent 之外,官方 ADK(Agent Development Kit,借鉴 Google ADK)支持多 Agent 协作、子 Agent、HITL 中断恢复:adk.NewChatModelAgent + SetSubAgents 搭多 Agent 团队,中断/恢复实现人工审批。从「单兵」到「多兵种协同」。

08SECTION

参考资料


•[官方] 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 月绡凝 · 依据官方文档。



【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。