Graph 层详解
开发者主要接触 StateGraph:声明 State schema、addNode、addEdge / addConditionalEdges,compile 得到可调用的 CompiledGraph(Pregel 实例)。
1. 为何需要 Graph 层
| 直接配 Pregel | StateGraph |
|---|---|
| 底层、冗长 | 声明式构图 |
| 易错 | 内置校验、START/END |
2. 核心类型
| API | 作用 |
|---|---|
| Annotation / StateSchema | 字段类型 + reducer + default |
| StateGraph | 有状态图 |
| addNode(name, fn) | 注册节点 |
| addEdge | 固定后继 |
| addConditionalEdges | 路由函数选分支 |
| compile({ checkpointer }) | 生成可执行图 |
3. Annotation 与 reducer
每个 state 键可指定:
- 默认值
- reducer:两值合并(如
(a,b)=>[...a,...b]) - 对应到底层 channel 类型
列表字段几乎总要自定义 reducer,否则后写覆盖先写。
4. compile 做了什么
- 校验图连通性、节点名、边引用。
- 把 State 映射为 channel 集合。
- 生成 Pregel 的 nodes、channels、checkpointer 绑定。
- 暴露
invoke/stream/getState/updateState等。
5. Command 与动态边
Command 可在运行时指定 goto 下一节点或更新 state,用于工具返回、人机确认后跳转。
Send 用于 map 扇出到多实例子节点。
6. 子图
节点可嵌套 子图(另一 CompiledGraph),state 可映射父子 channel。用于多 Agent 分层。
7. 总结
Graph 层 = DSL + 编译器;排错时 graph.getGraph().drawMermaid() 等可视化边与节点(依版本 API)。