96SEO 2026-09-21 14:24 11
在建立 AI Agent 时常见的困惑有:
Eino 的 Graph 正是为了解决这些痛点而设计——它把节点、边、分支三个最基本的概念拆开来组合。既能画出 ReAct 循环,也能表达任意复杂的有向图流程。

ReAct 的最小图只有 LLM 节点 + 工具节点 + 分支路由。话说回来,而 Graph 支持三种基本模式:
┌─────────────────────────────────────────────┐
│ Eino Graph 能画什么 │
├──────────────┬──────────────────────────────┤
│ 线性管道 │ A → B → C → END │
│ │ 翻译 → 摘要 → 评分 │
├──────────────┼───────┬───┬───┬───┬───┬───┤
│ 条件分支 │ A → B → C ──► path1 → D │
│ │ └─ path2 → E │
│ │ 意图识别 → 路由 → 不同处理 │
├───────┬───┼───┼───┼───┼───┼───┼───┤
│并行+汇聚│ A→B│ ┌─D─┐ ┌─E─┐ │→F→END │
│ │ └─D─┘ └─E─┘ 检索→并行打分+重排→合并│
├───────┴───┴───∨───∨───∨───∨───∨──┤
│ 循环│ A→B──►B──►END │
│ ReAct 推理→行动→再推理 │
└──────────────∨----------------------∨------+
只要你愿意怎么连节点和边。就能得到对应的流程,按理说,换个角度**Graph = 节点 + 边 + 分支**。四种模式只差在连线方式,
每个节点负责“一件事”。Eino 提供多种内置节点类型,也允许你通过 Lambda 自定义任意函数。
g := compose.NewGraph g.AddChatModelNode // LLM 调用 g.AddToolsNode // 工具执行 g.AddRetrieverNode // 检索 g.AddLambdaNode("my_logic"。compose.InvokableLambda( func { return "处理后: " + input,nil },)) // 嵌套子图也可以当作节点使用 g.AddGraphNode2. 边:数据怎么流
边定义了固定的数据方向——上游输出直接成为下游输入。
g.AddEdge // 输入 → 填模板 g.AddEdge // 模板 → LLM g.AddEdge // LLM → 输出
与固定边不同。分支在执行时根据输入动态选择目标节点。
branch := compose.NewGraphBranch( func { if strings.Contains { return "wear_agent",nil } return "general_agent",nil },mapbool{ "wear_agent": true,"general_agent": true,},) g.AddBranch // 在 router 节点后面加分支四、实战:意图识别 → 分支处理的图
func BuildIntentGraph(ctx context.Context,model model.BaseChatModel) ( compose.Runnable*schema.Message,*schema.Message],error,) { g := compose.NewGraph*schema.Message,*schema.Message] // ① 意图识别节点 g.AddLambdaNode("intent",compose.InvokableLambda( func { last := msgs.Content switch { case strings.Contains: return "wear"。nil case strings.Contains: return "translate",nil default: return "chat",nil } },)) //② 天气处理器 g.AddLambdaNode("wear_handler",compose.InvokableLambda( func{ return &schema.Message{Role: schema.Assistant,Content:"今天北京晴天°C"},nil},)) //③ 翻译处理器 g.AddLambdaNode("translate_handler",compose.InvokableLambda( func{ return &schema.Message{Role: schema.Assistant,Content:"Translation result here..."},nil},)) //④ 通用对话 g.AddLambdaNode("chat_handler",compose.InvokableLambda( func{ return &schema.Message{Role: schema.Assistant,Content:"我是通用助手,请问有什么可以帮您?"},nil},)) //⑤ 建立固定边:所有终端指向 END g.AddEdge g.AddEdge g.AddEdge g.AddEdge //⑥ 动态分支:根据 intent 决定接下来走向 g.AddBranch("intent"。compose.NewGraphBranch( func{ switch intent{ case"wear":return"wear_handler",nil;怎么说呢,case"translate":return"translate_handler",nil;default:return"chat_handler\",nil;}},mapbool{ \"wear_handler\":true,\"translate_handler\":true,\"chat_handler\":true,},)) //⑦ 编译返回 Runnable return g.ComposeCompile }
handler / translatehandler / chat_handler ▶ END.
五、实战:RAG 管道
func BuildRAGGraph ( compose.Runnable。error){ g:=compose.NewGraph // 节点定义 ---------------------------------------------------- g.AddLambdaNode(\"InputToQuery\",func(_ctx context.Context,in *UserMessage){return in.Query,nil}) g.AddRetrieverNode g.AddChatTemplateNode g.AddLambdaNode(\"ReactAgent\",func(_ctx context.Context,prompt string){ // 调用 LLM 得到回答…}) // 边 ---------------------------------------------------------- g.AddEdge // 查询文本取出 \ \-> 检索链路 / g.AddEdge // 历史取出 / \ g.AddEdge \ \-> 检索完成 ----/ g.AddEdge g.addedge // 汇聚等两者完成后才继续 g.addedge g.addedge // DAG 模式:所有上游完成才触发下游 -------------------------------- return g.ComposeCompile(ctx,compose.WithNodeTriggerMode) }
并行检索历史 & 查询 —— 用两条从 START 出发的边实现真正的并行。2️⃣ 等待全部完成再进入提示词构造 ——
WithNodeTriggerMode告诉 Graph 必须等所有前驱结束后才激活ChatTemplate。若不加此选项则默认 Pregel 模式会在任一边完成就触发下游,导致提示词可能缺少历史信息。六、两种运行模式:Pregel vs DAG
Pregel 模式| | DAG 模式/tr>
| 适用 | 有环图 | 无环图
| 触发 | 任一上游完成即触发下游 | 所有上游完成才触发下游
| 环检测 | 不检测 | 编译时拓扑排序, | | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 步数限制 | 需要 MaxRunSteps 防止死循环 | 无需限制 | ||||||||||
| 典型场景 | ReAct 推理‑行动循环 | RAG 链路、并行任务、工作流 /tr> /table> 源码判断极其简洁: |
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback