Files
slide/decks/gen2D/pages/eino-deep-dive.md
T
wonder 5f99d2481a style: optimize gen2D deck layout, animations, and visual hierarchy
- style-keys.md: add v-clicks to 3x2 grid for staggered animation
- eino-graph.md: two-column layout (code left, Items right)
- eino-deep-dive.md: two-column layout for both slides, code+Items side-by-side
- async-deep-dive.md: two-column layout for both slides, SVG integrated
- harness.md: two-column layout for slide 1 (code left, Items right)
- request-journey.md: two-column layout for journey steps
- data-model.md: add v-clicks to grid items, increase diagram height
- architecture/pipeline/prompt-agent: increase SVG max-height for better visibility
2026-05-30 23:13:23 +08:00

2.3 KiB

Eino Graph 深入 — 构建与编排

有向图构建与本地状态管理

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 驱动的条件分支

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 降级输出。 下图展示了完整的分支路由与重试机制,包括状态流转和降级路径。