@@ -22,6 +22,38 @@ weight: 5
2222
2323本文详细探讨了 Agent 和 Graph 两种 AI 应用形态的区别和联系,提出“两者的最佳结合点,在于将 Graph 封装为 Agent 的 Tool(工具)”,并为 [ Eino] ( https://github.com/cloudwego/eino ) 开发者给出建议的使用姿势。
2424
25+ ### 完整的用户动线
26+ ``` mermaid
27+ sequenceDiagram
28+ participant Client
29+ participant Server
30+ participant SessionStore
31+ participant CheckpointStore
32+
33+ note over Client, Server: 场景1: 首次运行(Run)
34+ Client->>Server: 发送Run请求(初始Input,现有的 SessionID)
35+ Server->>SessionStore: Runner.Run(), 用 SessionID 做 CheckpointID,Load Session
36+ SessionStore->>Server: 返回会话历史(User/Assistant/Tool消息列表)
37+ Server->>Server: BeforeAgent阶段:将会话历史注入 runSession
38+ Server->>Server: 执行Agent处理,生成AgentEvent序列
39+ Server->>SessionStore: ProcessEvents阶段(有中断):Append会话历史(新消息),SaveCheckpoint
40+ Server->>Client: 返回结果
41+
42+ note over Client, Server: 场景2: 中断后恢复(Resume)
43+ Client->>Server: 发送Resume请求(InterruptID->ResumeData + SessionID)
44+ Server->>CheckpointStore: Runner.Resume(),用 SessionID 做 CheckpointID,Load Checkpoint
45+ CheckpointStore->>Server: 返回检查点(本轮Input/上下文/中断时状态)
46+ Server->>Server: BeforeAgent阶段:恢复检查点状态(跳过加载Session)
47+ Server->>Server: 继续执行Agent处理,生成后续AgentEvent
48+ alt 存在中断(需再次暂停)
49+ Server->>CheckpointStore: Save Checkpoint(更新当前轮次快照)
50+ Server->>SessionStore: Save Session(追加本轮新生成的消息)
51+ else 无中断(本轮完成)
52+ Server->>SessionStore: Save Session(追加本轮新生成的消息)
53+ end
54+ Server->>Client: 返回结果
55+ ```
56+
2557## 核心概念辨析
2658
2759### 基础定义
@@ -112,7 +144,7 @@ Eino 框架的目标是同时支持 Graph 和 Agent 两种场景。我们的演
112144
113145因此,向 Graph 中加入 Agent 节点,意味着将一个需要多轮交互、长时记忆和异步输出的 Agent 强行嵌入到一个确定性的、同步执行的 Graph 节点中,这通常是不优雅的。Agent 的启动可以被 Graph 编排,但其内部的复杂交互不应阻塞主流程。
114146
115- 实际上,在 Graph 中我们需要的并非一个完整的 Agent 节点,而是一个功能更纯粹的** “LLM 节点”** 。该节点负责在确定性流程中,接收特定输入,完成意图识别或内容生成,并产出结构化的输出,从而为流程注入智能。
147+ 实际上,在 Graph 中我们需要的并非一个完整的 Agent 节点,而是一个功能更纯粹的“LLM 节点”。该节点负责在确定性流程中,接收特定输入,完成意图识别或内容生成,并产出结构化的输出,从而为流程注入智能。
116148
117149同时,如果简单的“LLM”节点确实不满足需求,确实需要“Agent”,更合适的做法也许不是把 Agent 塞到静态预定义的 Graph 中,而是给“Agent”增加前置处理、后置处理等各种“插件”,把具体的业务逻辑嵌入到 Agent 内部。
118150
@@ -126,7 +158,7 @@ Eino 框架的目标是同时支持 Graph 和 Agent 两种场景。我们的演
126158<tr ><td >特征维度</td ><td >Graph</td ><td >Tool</td ></tr >
127159<tr ><td >输入</td ><td ><strong >结构化的数据</strong ></td ><td ><strong >结构化的数据</strong ></td ></tr >
128160<tr ><td >交付物</td ><td ><strong >聚焦最终结果</strong ></td ><td ><strong >聚焦最终结果</strong ></td ></tr >
129- <tr ><td >状态管理</td ><td ><strong >单次执行、stateless</strong ></td ><td ><strong >单次执行、stateless。 </strong ></td ></tr >
161+ <tr ><td >状态管理</td ><td ><strong >单次执行、stateless</strong ></td ><td ><strong >单次执行、stateless</strong ></td ></tr >
130162<tr ><td >运行模式</td ><td ><strong >整体是同步</strong ></td ><td > <strong >LLM 的视角 Tool 是同步的</strong ></td ></tr >
131163</table >
132164
@@ -145,7 +177,7 @@ Agent 与 Graph 并非路线之争,而是能力互补的两种 AI 应用范式
145177
146178两者的最佳结合点,在于将 Graph 封装为 Agent 的 Tool。
147179
148- 通过这种方式,我们可以充分利用 Graph 在流程编排和生态集成上的强大能力,来扩展 Agent 的 Tool 列表一个复杂的 Graph 应用(如一套完整的 RAG 流程、一个数据分析管道)可以被简化成 Agent 的一个原子能力,被其在合适的时机动态调用。
180+ 通过这种方式,我们可以充分利用 Graph 在流程编排和生态集成上的强大能力,来扩展 Agent 的 Tool 列表。一个复杂的 Graph 应用(如一套完整的 RAG 流程、一个数据分析管道)可以被简化成 Agent 的一个原子能力,被其在合适的时机动态调用。
149181
150182对于 Eino 的开发者而言,这意味着:
151183
0 commit comments