Files
DevFlow/docs/02-架构设计/单对话并行多轮-Phase0落地路线图-2026-06-20.md
绝尘 4b5da38e28 新增: 并行多轮Phase0落地路线图+4agent论证整合
Phase0十维方案(锁分片/三层Semaphore/sub_react_loop/审批sub_flow/压缩协调/UX事件schema/规划校验/planner+plan_hint/全局协调/测试矩阵)+路线图(DAG/关键路径115人时/0a-0b-0c三子阶段独立可回退);4agent共识P0机制缺失须先Phase0
2026-06-20 16:34:59 +08:00

18 KiB

单对话并行多轮 — Phase 0 落地路线图

2026-06-20 · aichat B 路线 · Phase 0(机制补齐)十维度评估落地

上游设计:单对话并行多轮-设计-2026-06-20.md(三 Phase 框架)。 本文档承接设计的「Phase 1/2/3 实施前必须先补齐的机制」,即 Phase 0 = 物理可行性地基


一、定位:Phase 0 是什么

设计的 Phase 1/2/3 落地前,有十项机制性前置未补齐:锁分片、Semaphore 协议、子流 ReAct 内核、审批路由、压缩协调、UX 事件 schema、规划校验、planner 骨架、全局协调、测试矩阵。不补齐这些,Phase 1(plan_hint)可独立跑,但 Phase 2/3 一动就串行化/死锁/污染

Phase 0 = 把这十项从「评估」推到「可独立验证落地」,为 Phase 2/3 铺路。Phase 1 不阻塞 Phase 0(plan_hint 是纯函数,可并行先做)。


二、十维度工作量与定位总览

维度 简称 工作量 性质 关键产出
0.1 锁分片模型 大(16h+,~85 调用点) 结构性重构(地基) per_conv/sub_flow 局部锁 + pending_approvals 独立锁
0.2 三层 Semaphore 协议 中(8-14h) 新增资源池层 global(8)/per_conv(6)/per_sub(3) + acquire_per_sub_flow + 耗尽降级
0.3 sub_react_loop 抽离 大(16h+,900 行重构) 核心内核解耦 纯 ReAct 内核 + 主 loop Plan 调度入口
0.4 审批 sub_flow 路由 中(8-12h) 既有链路改造 PendingApproval.sub_flow_id + trust 隔离 + DB 迁移
0.5 上下文压缩协调 中(4-16h) 复用既有机制 子流独立 budget + join 后归档 + Semaphore 协调
0.6 UX 事件 schema 中-大(16-24h) 跨前后端协议+UI sub_flow_id 透传 + currentText Map + 子流卡片 + 两级中断
0.7 规划校验 中(4-16h) 纯函数新增 Plan::validate + Kahn 分层 + go/no-go 80%
0.8 planner + plan_hint 中(4-8h) 新文件零回归 Plan/SubTask 结构 + plan_hint 纯函数 + 文档推翻
0.9 全局协调补 中(8-16h) 跨模块收口 标题/提炼/审计 sub_flow_id 维度 + 完成判定
0.10 测试矩阵 中(8-16h) 验证型新增 并发竞态 checklist(30-50 case)

工作量总计:约 92-142 人时(中位估 ~115 人时 ≈ 14-18 工作日单人,或 4-5 周含 review/联调)。


三、依赖图(DAG)

箭头 A → B 表示「A 阻塞 B」(B 需要 A 先完成)。粗体=硬阻塞,普通=软依赖。

                         ┌──────────────────────────────────────────────┐
                         │                                              ▼
┌──────┐  强    ┌──────┐│     ┌──────┐ 强   ┌──────┐ 强   ┌──────┐ 强  ┌──────┐
│ 0.1  │──────▶│ 0.3  │┴────▶│ 0.4  │─────▶│ 0.6  │─────▶│ 0.9  │───▶│ 0.10 │
│锁分片│       │内核  │      │审批  │      │UX    │      │协调补│    │测试  │
└──┬───┘       └──┬───┘      └──────┘      └──────┘      └──────┘    └──────┘
   │ 强          │ 强           ▲
   │   ┌─────────┘   ┌──────────┘
   ▼   ▼             ▼
┌──────┐ 强   ┌──────┐ 强
│ 0.2  │◀────│ 0.5  │  (0.5 强依赖 0.2/0.3/0.1/0.6)
│Semaph│     │压缩  │
└──┬───┘     └──────┘
   │ 强
   ▼
 (0.2 强阻塞 0.3, 0.5, 0.9)

┌──────┐ 先   ┌──────┐
│ 0.8  │─────▶│ 0.7  │  (0.8 定 Plan 结构 → 0.7 挂 validate/Kahn)
│plnr │      │校验  │
└──┬───┘     └──┬───┘
   │            │ 0.7 阻塞 Phase 2/3,且 Kahn 输出喂 0.3 execution 调度
   │            ▼
   │       (0.3 execution 按 Kahn 层 spawn)
   │
   └─ Phase 1(plan_hint 接入主 loop)的硬前置

依赖关系明细(按维度)

维度 硬前置(deps) 软依赖 阻塞(blocks)
0.1 锁分片 0.2, 0.3, 0.4, 0.5, 0.6, 0.9
0.2 Semaphore 0.1, 0.3 0.3(子流 permit), 0.5, 0.9, Phase 1/2/3
0.3 sub_react_loop 0.1(强) 0.6(事件路由部分前置) 0.2, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9
0.4 审批路由 0.1, 0.3 0.2 0.6, 0.9, Phase 3
0.5 压缩协调 0.1, 0.2, 0.3 0.6 Phase 3, 0.9, 0.10
0.6 UX schema 0.1, 0.3, 0.4 Phase 3, 0.9
0.7 规划校验 0.8 0.6(plan_hint) Phase 2, Phase 3, 0.3(execution 调度), 0.10
0.8 planner+plan_hint 0.1, 0.2(软) 0.7, Phase 1, Phase 2, 0.9
0.9 全局协调补 0.1, 0.2, 0.3, 0.6, 0.8 0.5(部分), 0.10, Phase 3 收尾
0.10 测试矩阵 0.1, 0.2, 0.4, 0.6, 0.7 0.9 — (验证型,被测对象须先在)

循环依赖警示(需破环)

0.2 ⇄ 0.3 存在循环:0.2 deps 列 0.3(sub_react_loop),0.3 deps 列 0.2(子流需 per_sub permit)。

破环策略(评估 seq 已隐含):0.2 的 acquire_per_sub_flow 接口与三层结构可不依赖 0.3 内核实现先落地(纯资源池层 + hook),0.3 子流 spawn 时消费该 hook。即:

  • 0.2 先做到「接口就位、hook 待接」(Semaphore 三层 + 公式 + 降级返回值),不必等 0.3 内核;
  • 0.3 内核完成后接入 hook。
  • 这样 0.2 与 0.3 在批2 内可并行,破除循环。

同理 0.1 ⇄ 0.3(0.1 的 sub_flows HashMap 需 0.3 的 SubFlowState 定义):0.1 分两小步 — 小步A(per_conv→Arc + pending 独立锁,纯结构,85 调用点机械迁移)先独立落地;小步B(sub_flows HashMap,等 0.3 SubFlowState)。


四、拓扑排序后的实施批次

批1:基础地基(机制层)

目标:建立锁与资源的物理地基,无任何子流语义依赖。

顺序 维度 内容 独立验证
1.1 0.8 planner+plan_hint 新文件,Plan/SubTask 结构 + plan_hint 纯函数 + 4-6 处文档推翻 cargo check + 单测(对齐 intent.rs 52 测密度)
1.2 0.7 规划校验(纯函数部分) Plan::validate + Kahn to_layers + 五类非法 + 回退开关占位 纯函数单测,go/no-go 验收留 Phase 2
1.3 0.1 小步A per_conv→Arc + pending 独立锁 85 调用点机械迁移 + pending_approvals 独立 Arc cargo check 全量 + F-09 单测重写绿 + 修复 chat.rs:380 自死锁
1.4 0.2(接口部分) 三层 Semaphore 结构 + 公式 + 降级返回值 + per_conv 2→6 / global 3→8 上调 资源池层就位,hook 待接 三层独立单测 + 热改软收敛 + CAS 竞态

批1 出口判据:①0.8/0.7 纯函数全测绿;②0.1 小步A 编译过 + 旧单测全绿 + 自死锁修复;③0.2 三层 Semaphore 可独立 acquire/drop,per_conv 上调后现有 5 调用点不回归。

批2:协调层(子流语义建立)

目标:子流 ReAct 内核 + 审批路由 + 压缩协调,子流真正可跑(串行)。

顺序 维度 内容 独立验证
2.1 0.1 小步B sub_flows HashMap(配合 0.3 SubFlowState) PerConvState.sub_flows + 局部锁取锁接口 两 sub_flow 并发不互斥单测
2.2 0.3a 抽纯 ReAct 内核 run_agentic_loop 900 行解耦,主链先复用内核,行为零变更 重构前后同输入消息序列/tool_result/DB 落库 byte 对比
2.3 0.3b 主 loop Plan 调度入口 + sub_flow spawn(串行) planning→spawn sub_react_loop→join→汇总,Phase 2 串行 execution 先跑通 Plan DAG 顺序跑子流 + 汇总 LLM 消费正确
2.4 0.2(接入部分) acquire_per_sub_flow hook 接入 0.3 spawn 处 子流 spawn 持 per_sub permit global 耗尽降级返回 None,子流退串行不 panic
2.5 0.4 审批 sub_flow 路由 PendingApproval.sub_flow_id + trust 隔离 + 高危缓存隔离 + DB 迁移 两子流同目录审批隔离 + try_continue 按 (conv,sub) 双键
2.6 0.5 上下文压缩协调 子流独立 ContextManager + join 后归档 + Semaphore 协调 子流 token 独立 budget + 归档释放 + 不死锁

批2 出口判据:①单 conv 多子流串行跑通(Plan→sub_flow→join→汇总);②子流审批按 sub_flow_id 路由,无信任/缓存污染;③子流 token 独立压缩,归档后主链 budget 正确。

批3:UX + 收口 + 验证

目标:前端可观测子流 + 全局协调收口 + 并发竞态测试。

顺序 维度 内容 独立验证
3.1 0.6 UX 事件 schema(协议层可提前到批2 末) sub_flow_id 透传 + currentText Map + 子流卡片 + 两级中断 单链 sub_flow_id=None 100% 回归 + 双子流交错不串
3.2 0.9 全局协调补 标题/提炼/审计 sub_flow_id 维度 + 完成 join barrier + permit 协调 提炼 barrier 到 join 后 + 审计按 sub_flow 回溯 + 标题去重 gate
3.3 0.7 go/no-go 验收(配套) N 任务抽检 ≥80% 合法率判据文档化 验收报告模板
3.4 0.10 测试矩阵 并发竞态 checklist(30-50 case) + 核心 0 测文件拉到苛刻 write_file 无 path 锁等缺陷暴露回流 0.1/0.3

批3 出口判据:①前端双子流并发可见不混乱;②标题/提炼/审计跨子流正确;③并发竞态测试全绿(暴露的缺陷已回流修复)。

波1 可提前:0.10 评估 seq 建议把「audit/mod.rs + agentic.rs 现有路径单测」提前到批2 收尾并行启动(被测对象是既有逻辑,不等子流)。


五、关键路径(决定 Phase 0 总工期)

最长依赖链(取硬阻塞):

0.8(planner骨架,4-8h)
  → 0.7(validate+Kahn,4-16h)        [Kahn 输出喂 0.3 execution 调度]
    → 0.1 小步A(锁分片结构,8-12h)   [0.1 是 0.3 硬前置]
      → 0.3(内核抽离+调度,16h+)      [Phase 0 最大单点]
        → 0.4(审批路由,8-12h)
          → 0.6(UX schema,16-24h)
            → 0.9(全局协调,8-16h)
              → 0.10(测试矩阵,8-16h)

关键路径长度(串行累加):4-8 + 4-16 + 8-12 + 16+ + 8-12 + 16-24 + 8-16 + 8-16 ≈ 72-120 人时(约 9-15 工作日单人)。

实际工期可压缩:批2 内 0.3/0.4/0.5/0.6 部分可并行(0.4 等 0.3,但 0.6 协议层可与 0.4 并行;0.5 等 0.2/0.3 但可与 0.6 后半并行)。假设 2 人并行,Phase 0 实际工期约 6-9 周(含 review/联调/缺陷修复回流)。

最大单点风险:0.3(run_agentic_loop 900 行重构) — 它在关键路径中段,且阻塞下游 5 个维度。0.3 拆 a/b 两小步(先抽内核零变更验证,再改调度)是降低此风险的核心策略。


六、风险排序(按严重度)

# 风险 维度 严重度 缓解
R1 0.3 内核抽离回归面极大(900 行耦合 8+ 横切关注点:guard/permit/审批/主题标记/意图收敛/候选 fallback/自动压缩/tool_result 摘要/reasoning_content 透传 BUG-260617-12) 0.3 极高 0.3a 先抽内核主链复用零变更验证(byte 对比)→ 0.3b 再改调度;每剥离一项独立回归
R2 锁顺序无运行时强制(allowed_dirs R → per_conv → pending 跨函数跨模块,任一逆序即死锁,Rust 无 lock-ordering 检查) 0.1 极高 文档化锁顺序约定 + 竞态测试(0.10)兜底 + review checklist
R3 返回类型变更级联(conv()/conv_read() 改 Arc 后 85+ 调用点 .lock().await,部分非 async 上下文无法 .await) 0.1 拆同步读视图 + async 访问器双轨;小步A 先做机械迁移验证编译
R4 chat.rs:380 自死锁(ai_approve path_auth 持外层锁重入 session.lock(),tokio::Mutex 非可重入) 0.1/0.4 pending_approvals 独立锁可绕开,但须验证路径不再触发(0.10 回归测)
R5 全局硬上限公式非 Semaphore 原生能力(三层独立 Semaphore 无法自动保证 sum≤global,需 CAS 计数器,多子流并发 acquire 可能短暂超 max) 0.2 AtomicUsize 计数器 + CAS 容忍上限 + 单测验证不超卖
R6 UX currentText Map 分流竞态(flushCurrentText「末尾 assistant」启发式在多子流并行时回填目标错) 0.6 改按 sub_flow_id 定位消息,非末尾启发式
R7 提炼「完成」漏 join(OnComplete 单点 spawn,并行多轮后主 loop converged 但子流未 join → 提炼读残缺 messages) 0.9 中-高 引入 join barrier,提炼延迟到 join 后
R8 write_file/patch_file 无 per-path 文件锁(并发子流写同路径丢失更新,0.10 会暴露) 0.10→回流 0.1/0.3 中-高 0.10 暴露后回流新增 DashMap<PathBuf,Mutex>(缺陷修复回功能维度,非 0.10 内)
R9 session_trust 信任污染(PerConvState.session_trust 按 conv 共享,子流 A 审批目录 → 子流 B 自动放行) 0.4 trust 下沉 sub_flow state 或子流不走 trust 自动放行
R10 i18n 特殊字符 prod runtime 报错(vue-tsc 捕获不到,新子流卡片文案) 0.6 改动 i18n 手动 grep message 值特殊字符(memory i18n-blindspot)
R11 PerConvState.sub_flows HashMap 无限膨胀(子流未清理致内存泄漏) 0.1 对齐 release_conv 模式,子流完成/失败/中断时 remove
R12 80% go/no-go 判据主观(N 任务抽样规模/「合法」定义需先固化) 0.7 Phase 2 前产出验收 checklist 模板

七、分批建议:Phase 0 拆三子阶段

评估 seq 已隐含三批结构,此处显式化为可独立验收的子阶段。

Phase 0a:锁与资源地基(批1 全部)

  • :0.8, 0.7(纯函数), 0.1 小步A, 0.2(接口部分)
  • 独立价值:①plan_hint/Plan 结构就位(Phase 1 可立即接入);②per_conv 上调 2→6 / global 3→8(单对话内标题+压缩+提炼+主loop 并发放宽,即时收益);③修复 chat.rs:380 自死锁(既有 bug 顺手清)
  • 可独立验证:cargo check + 单测,不改运行时行为(除 permit 上调)
  • 预估:24-48 人时

Phase 0b:子流可跑(批2 全部)

  • :0.1 小步B, 0.3(a+b), 0.2(接入), 0.4, 0.5
  • 独立价值:单 conv 多子流串行跑通(Plan→sub_flow→join→汇总),验证 LLM 规划质量 + 子流隔离/审批/压缩正确
  • 可独立验证:串行 execution 端到端(Phase 2 形态)
  • 预估:48-80 人时
  • 此阶段后可决策 Phase 3:规划质量 ≥80% 合法率 + 子流机制稳定 → 推进 Phase 3 真并行;<80% 则回退优化 prompt/规划

Phase 0c:UX 可观测 + 收口验证(批3 全部)

  • :0.6, 0.9, 0.7(go/no-go), 0.10
  • 独立价值:前端双子流可见 + 全局协调跨子流正确 + 并发竞态测试全绿
  • 可独立验证:并行 execution 端到端(Phase 3 形态)可观测不混乱
  • 预估:40-72 人时

三子阶段均独立可回退(常量开关:plan_hint_enabled / planning_enabled / parallel_execution_enabled / sub_flow_compress_enabled)。任一阶段验收不过,不影响前一阶段已落地价值。


八、Phase 1(plan_hint)硬前置

Phase 1 = 设计文档定义的「plan_hint 轻规划接入主 loop」。

硬前置维度 原因
0.8 plan_hint.rs Phase 1 接入的对象就是 0.8 产出的 plan_hint 纯函数。无 0.8 则 Phase 1 无代码可接。
0.8 Plan/SubTask 结构 Phase 1 plan_hint 输出需对齐 Plan 结构(可并行组/顺序依赖字段)。

Phase 1 不阻塞项:0.1/0.2/0.3/0.4/0.5/0.6/0.7/0.9/0.10 均非 Phase 1 硬前置(plan_hint 是纯函数,接入主 loop filter_tool_defs 延伸,不涉及子流/锁/并发)。

结论:Phase 1 可在 Phase 0a 完成后立即启动(仅需 0.8),与 Phase 0b/0c 并行推进。这与设计文档「Phase 1 低风险独立有价值,不跳 Phase」一致。


九、Phase 2/3 硬前置清单

Phase 硬前置维度 缺一则
Phase 2(planning LLM 调度,串行 execution) 0.8, 0.7(validate), 0.1, 0.3(内核+调度) 无 validate 无 go/no-go;无 0.3 内核主 loop 无法改 Plan 调度器
Phase 3(并行 execution) 上述全部 + 0.2(三层 Semaphore), 0.4(审批路由), 0.5(压缩协调), 0.6(UX schema), 0.9(全局协调) 缺任一则并行死锁/污染/前端混乱/资源爆炸

Phase 3 是十维度全部落地的最终验收点。Phase 0c(0.10 测试矩阵)是 Phase 3 的并发竞态防线。


十、并行策略(2 人假设)

阶段 人 A 人 B
0a 0.8 planner+plan_hint → 0.7 纯函数 0.1 小步A 锁分片结构 → 0.2 Semaphore 接口
0b 0.3a 内核抽离 → 0.3b 调度 0.4 审批路由 → 0.5 压缩协调(等 A 的 0.3)
0c 0.6 UX schema(协议层提前) → 0.9 全局协调 0.7 go/no-go 文档 → 0.10 测试矩阵

瓶颈:0.3(人 A 串行承担,最大单点);0.4/0.5 依赖 0.3 完成后人 B 才能启动后半(0b 中段人 B 有空窗,可做 0.6 协议层或 0.10 波1 单测填补)。


十一、决策点(需用户确认)

  1. 是否接受 Phase 0 三子阶段拆分(0a 锁资源地基 / 0b 子流可跑 / 0c UX 收口)?每子阶段独立可验收可回退。
  2. 0.3 是否接受 a/b 两小步(先抽内核零变更验证 → 再改调度)?降低 900 行重构风险。
  3. per_conv permits 2→6 / global 3→8 上调是否在 0a 即部署(即时收益:单对话内标题+压缩+提炼+主loop 并发放宽)?需评估 provider 429 风险。
  4. 0.10 暴露的 write_file 无 path 锁等缺陷,确认回流 0.1/0.3 修复(非 0.10 内就地改产品逻辑)?
  5. 80% go/no-go 判据:Phase 2 前产出验收 checklist(N 任务抽样规模/「合法」定义),是否接受人工抽检(无自动化)?

十二、关联


十三、决策记录

  • 2026-06-20 规划师:Phase 0 拆 0a/0b/0c 三子阶段,每子阶段独立可验收可回退;关键路径 72-120 人时(单人)/ 6-9 周(2 人并行);最大单点风险 0.3 内核重构(拆 a/b 两小步缓解)。Phase 1 仅硬前置 0.8,可在 0a 后立即启动与 0b/0c 并行。待用户确认五决策点后启动实施。