# Eino Graph 深入 — 构建与编排 有向图构建与本地状态管理
```go {1-5|7-11|all} g := compose.NewGraph[PipelineInput, PipelineOutput]( compose.WithGenLocalState(func(ctx context.Context) *PipelineState { return &PipelineState{} // 每次调用获得全新状态 }), ) g.AddLambdaNode(nodePromptOptimizer, &compose.Lambda{ StatePreHandler: preparePromptInput, // 从 state 读取输入 StatePostHandler: storePromptOutput, // 结果写回 state }) ```
每次 `graph.Invoke()` 调用生成独立的 `PipelineState`,避免并发调用间的状态污染。State 在节点间通过 Pre/Post Handler 流转。 PreHandler 从全局 State 提取当前节点所需字段;PostHandler 将节点输出写回 State。节点本身无状态,所有数据经 State 中转。
--- # Eino Graph 深入 — 分支路由与重试 QualitySupervisor 驱动的条件分支 ```go {1-10|all} g.AddBranch(nodeQualitySupervisor, compose.NewGraphBranch( func(ctx context.Context, _ PipelineInput) (string, error) { var next string _ = compose.ProcessState[*PipelineState](ctx, func(_ context.Context, state *PipelineState) error { next = state.NextNode // 质检结果决定路由 return nil }) return next, nil }, map[string]bool{ nodePromptOptimizer: true, nodeFormatAdapter: true, }, )) ``` --- # 分支路由 — 逻辑与全貌 质检通过 → FormatAdapter 直接输出;不通过且 retry < 3 → PromptOptimizer 重新优化;不通过且 retry >= 3 → FormatAdapter 降级输出。 下图展示了完整的分支路由与重试机制,包括状态流转和降级路径。