From 86e79d76ac32446cb375b8d33f2aab25400b511c Mon Sep 17 00:00:00 2001 From: Blizzard Date: Sat, 18 Jul 2026 13:45:51 +0800 Subject: [PATCH] =?UTF-8?q?docs(eino):=20=E8=AF=9A=E5=AE=9E=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3=20Phase=20C=20=E2=80=94=E2=80=94=20=E6=8A=A5=E5=91=8A?= =?UTF-8?q?=E6=B5=81=E6=B0=B4=E7=BA=BF=E6=9C=AA=20compose=20=E5=8C=96(?= =?UTF-8?q?=E5=88=BB=E6=84=8F=E4=BF=9D=E7=95=99=E7=8B=AC=E7=AB=8B=E8=B7=AF?= =?UTF-8?q?=E5=BE=84)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Phase C 改动清单曾把「report.go 改用 compose」标 ✅,实际 report intent 仍走独立 handleReport(writeSections 并发流水线),不经 compose.Graph。改为诚实记录:报告是 固定形状专用流水线、并行已由 writeSections 拿到,硬迁移只是拿稳定功能冒回归风险、 无用户可见收益,故刻意保留为 compose 之外的第二条编排路径。顺带把 Phase C 头部 灰度开关的陈旧描述更新为「已单引擎、graph.go 退役」的实况(与代码一致)。 Co-Authored-By: Claude Opus 4.8 --- EINO_ADOPTION.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/EINO_ADOPTION.md b/EINO_ADOPTION.md index 749be98..5bb44e3 100644 --- a/EINO_ADOPTION.md +++ b/EINO_ADOPTION.md @@ -9,7 +9,7 @@ - [x] **Phase A · 地基**:`llm.Pool` 换 Eino ChatModel 组件(commit d84b1ec,验收通过) - [x] **Phase B · 质变**:MCP 工具→`InvokableTool` + ReAct agent(模型自主调工具,验收 7/7 命中) -- [x] **Phase C · 编排归一**:✅ 全图 `DSL→compose.Graph` 编译器(全节点 + branch + DAG 并行调度)+ callbacks→ExecEvent 归一,等价回归通过(EINO_COMPOSE 灰度开关,默认关;过渡期后 graph.go 退役) +- [x] **Phase C · 编排归一**:✅ 全图 `DSL→compose.Graph` 编译器(全节点 + branch + DAG 并行调度)+ callbacks→ExecEvent 归一,等价回归通过;灰度期已过、graph.go 退役、compose 为唯一引擎(**例外**:报告 intent 仍走独立 `handleReport` 流水线,刻意未 compose 化,理由见 Phase C 改动清单) - [~] **Phase D · 状态化执行**:✅ 任务生命周期 FSM / ✅ HITL 人工审批中断(审批节点暂停→waiting→批准回 running / 拒绝→rejected,NATS 决定回传 + AckWait 续租,全栈含 Studio 审批节点 + 运行抽屉批准条)/ ⬜ 多智能体(按场景) **组件化补完(A)**:检索 → `ragRetriever`(`components/retriever.Retriever`,`eino_components.go`);提示词 → `buildMessages` 改用 `prompt.FromMessages`+`MessagesPlaceholder`;工具 → `mcpTool`(`InvokableTool`,模型自主调用)。至此终态架构 8 层中 模型/工具/检索/提示词/编排/智能体(单)/可观测 均已 Eino 组件化;剩 人机交互(中断恢复,按场景)。 @@ -150,7 +150,13 @@ github.com/cloudwego/eino-ext/... # ⚠️ 官方组件实现(open - `sundynix-dispatcher/internal/dsl/compile.go`(兑现文件头那句 TODO:"演进为 compose.NewGraph 的完整多节点编译") - 写 `DSL Flow → compose.Graph` 编译器:节点映射为 ChatModel / ToolNode / Retriever / `Lambda`;连线 → 边;branch 真假 → `compose` 分支;map → 并发分支。 - `callbacks`:实现 handler 把 Eino 回调桥接到现有 `ExecEvent`(节点 start/end/error + 耗时),统一可观测,不重复造。 -- `report.go`:报告多步流水线改用 compose(章节并行 + 汇聚天然契合)。 +- ~~`report.go`:报告多步流水线改用 compose(章节并行 + 汇聚天然契合)。~~ + **实际未迁,刻意保留为独立路径(诚实修正)**:`orchestrator.go` 按 `intent==IntentReport` + 分流到 `handleReport`,用自研 `writeSections`(WaitGroup + 信号量并发 + 部分失败可见标记)做 + 规划→分章并行→渲染,**不经 compose.Graph**。原因:① 报告是固定形状的专用流水线(规划-map-渲染), + 并行能力已由 `writeSections` 拿到,compose 化不带来用户可见收益;② 硬迁移会拿一个有单测背书、 + 已 live 验证的稳定功能去冒回归风险。故报告是 compose 之外的第二条编排路径,通用 DSL 图仍全走 compose。 + 真要归一(去掉第二条路径)另立任务评估,非本阶段承诺。 - 检索节点 → `components/retriever`(包 mcp-go RAG);提示词 → `components/prompt.ChatTemplate`。 - **对齐策略**:compose 版与 graph.go 版**并存**,用 `graph_test.go`/`integration_test.go` 做等价回归;全绿且灰度通过后,`graph.go` 才退役。