diff --git a/docs/zh/toolcall-contract-and-sequence-design.md b/docs/zh/toolcall-contract-and-sequence-design.md index 95b1b88..12cdb95 100644 --- a/docs/zh/toolcall-contract-and-sequence-design.md +++ b/docs/zh/toolcall-contract-and-sequence-design.md @@ -677,10 +677,10 @@ if ret, err := parent.ExecuteTool(name, args); err == nil { | 阶段 | 内容 | 依赖 | 价值 | | --- | --- | --- | --- | | **0** | 修 map 迭代顺序(§6.3) | — | ✅ 已完成 | -| **0.5** | 补多 tool_call 批内路径的判据(§6.6 注) | — | 并行化的前置:批内逻辑目前无判据 | -| **1** | 结果契约 + 参数预校验(§4) | — | 独立价值:消灭 C 类浪费,模型直接看到真因 | -| **2** | **并行执行层(§6)** | 1 | **内核侧唯一交付物**;插件并行的地基 | -| **2.5** | **提示词改为「默认并行」**(§6.5) | 2 | ⚠️ 必须在并行落地**之后**,否则提示词说谎 | +| **0.5** | 补多 tool_call 批内路径的判据(§6.6 注) | — | ✅ 已完成 | +| **1** | 结果契约 + 参数预校验(§4) | — | ✅ 已完成(1a/1b/1c/1d) | +| **2** | **并行执行层(§6)** | 1 | ✅ 已完成(2a 落法 / 2b per-call / 2c per-tool ctx / 2d 调度保序) | +| **2.5** | **提示词改为「默认并行」**(§6.5) | 2 | ✅ 已完成 | **内核主线到此结束。** §7/§8 的序列能力**不属于内核**,由 `seq` 插件实现。 diff --git a/docs/zh/toolcall-parallel-execution-plan.md b/docs/zh/toolcall-parallel-execution-plan.md index 3f581f8..bbf189c 100644 --- a/docs/zh/toolcall-parallel-execution-plan.md +++ b/docs/zh/toolcall-parallel-execution-plan.md @@ -17,8 +17,8 @@ | **0.2** | **工具错误类型化(已完成)** | — | ✅ **已完成** | | **0.5** | 补多 tool_call 批内路径判据 | — | ✅ **已完成** | | **1** | 结果契约 + 参数预校验 | — | ⬜ 待办 | -| **2** | 并行执行层 | 1 | ⬜ 待办 | -| **2.5** | 提示词改为「默认并行」 | 2 | ⬜ 待办 | +| **2** | 并行执行层 | 1 | ✅ **已完成**(2a/2b/2c/2d) | +| **2.5** | 提示词改为「默认并行」 | 2 | ✅ **已完成** | | **3** | 序列内核 | 2 | ⬜ 待办(设计已定,实现另议) | | **4** | `seq_*` 插件 | 3 | ⬜ 待办(设计已定,实现另议) | @@ -240,21 +240,27 @@ type ToolError struct { --- -## 阶段 2.5 ⬜ 提示词改为「默认并行」 +## 阶段 2.5 ✅ 提示词改为「默认并行」(已完成) -⚠️ **必须在阶段 2 落地之后**(见「顺序不可调换的两处」)。 +⚠️ 有**硬性顺序约束**:必须在阶段 2 落地**之后**。反序(先说"并发"、内核仍 +串行)会让提示词**对模型说谎** —— 模型据此推断安全性,写出真正依赖顺序的 +调用。宁可晚改,不可错改。 -对应设计文档 §6.5。`buildSystemPrompt`(`tooldefs.go`)新增一段,表达四件事: -默认并行 / 不可依赖顺序 / 例外:同通道输出保序 / 例外:写类工具不并发。 +新增【工具执行顺序】段,讲清四件事: -**同时必改**:`spawn_child` 描述里那句「应并行 spawn 多个子 Agent,不要自己串行逐个执行」 -(`tooldefs.go:466`)——它在改造前是**落空**的(模型照做,内核仍串行); -改造后应改为机制性表述。 +1. 同一条回复里的多个工具调用**默认并行**(同时跑),不是依次执行 +2. **不要依赖执行顺序** —— 参数依赖前一个结果就分两轮 +3. **例外一:同通道 `output_send__` 保序**(用户可见消息顺序敏感) +4. **例外二:不并发安全的工具整批退回串行**(写类工具 / 未声明者) -**判据**:提示词内容断言(`prompt_contract_test.go`)——四要点各自在文本中命中; -且**负判据**:串行阶段的提示词**不含**「默认并行」字样,防止再次跑反顺序。 +措辞刻意与 `batchRunnable` 的**真实**判据一致,而不是理想化表述 —— +**提示词与实现不符,比不说更坏**。 ---- +顺带改掉 `spawn_child` 的落空表述(原文「应并行 spawn,不要自己串行逐个执行」 +在并行化之前是落空的)。 + +判据 `prompt_parallel_test.go`(5 条),其中**负向**那条最关键: +只讲并行、不讲例外 ⇒ FAIL("提示词说谎"的失败模式已被覆盖)。 ## 阶段 3 / 4 ⬜ 序列(设计已定,实现另议)