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` 才退役。