多 Agent 协作

复杂的编程任务(大规模重构、跨模块迁移、多文件 bug 修复)可以拆分给多个 Agent 并行执行。wescode 在 wesgine 引擎的 delegate_task 基础上,增加了编程场景特有的安全保障。

基本模型

多 Agent 委派模型

主 Agent(Orchestrator)
  ├── 子 Agent A:修改 service 层
  ├── 子 Agent B:修改 repository 层
  └── 子 Agent C:更新测试

主 Agent 通过 delegate_task 工具派出子 Agent。每个子 Agent 拥有独立的上下文和终端会话,但共享同一个工作区文件系统。

子 Agent 可以是:

编程场景增强

相比通用的 delegate_task,wescode 为编程场景增加了三层保障:

1. CKG 只读约束

子 Agent 可以查询 CKG(调用图、符号引用),但不能修改索引。这防止并行执行的子 Agent 互相干扰索引状态。

主 Agent: "查找所有调用 getUserById 的位置并更新参数"
  → 子 Agent A: 读 CKG 获取调用者列表 ✅
  → 子 Agent A: 修改代码文件 ✅
  → 子 Agent A: 触发 CKG 重建索引 ❌(只读)

索引更新由主 Agent 在所有子任务完成后统一执行。

2. CSE 全局后验证

子 Agent 各自修改代码后,主 Agent 触发一次 CSE 全局验证:

  1. 子 Agent A 修改了 service 层的错误处理模式
  2. 子 Agent B 修改了 repository 层的返回值
  3. 各自都通过了本地的 L0 / L1 验证
  4. 主 Agent 合并后,CSE 检查全局约束——发现 service 层现在期望 repository 返回 error,但 B 改成了 panic

这个全局检查捕获了单个子 Agent 无法发现的跨模块不一致。

3. 三步合并

子 Agent 的修改不是"谁先写谁赢"。合并按以下步骤进行:

  1. 收集:等待所有子 Agent 完成(或后台任务异步返回)
  2. 冲突检测:检查是否有多个子 Agent 修改了同一文件的重叠区域
  3. 应用 + 验证:按序应用修改,每步运行 QualityGate 验证

如果步骤 3 中出现编译失败,主 Agent 可以决定是回滚还是修复。

委派角色

角色能力适用场景
leaf(叶子)执行具体任务,不能再委派"修改这个函数的参数"
orchestrator(编排者)可以继续委派子任务"重构整个模块"

编排者的嵌套深度由 delegation.max_spawn_depth(默认 2)限制,防止无限递归。

并发限制由 delegation.max_concurrent_children(默认 3)控制——同时运行太多子 Agent 会争夺文件系统和终端资源。

典型场景

API 版本迁移

用户: "把所有 v1 API 迁移到 v2"

主 Agent:
  1. 用 CKG 找到所有 v1 endpoint
  2. 按模块拆分子任务
  3. 委派子 Agent A: 迁移 /users 相关
  4. 委派子 Agent B: 迁移 /orders 相关
  5. 委派子 Agent C: 更新集成测试
  6. 合并后 CSE 验证全局一致性
  7. QualityGate 运行完整测试

大规模重命名

用户: "把 OwnerID 改成 Actor"

主 Agent:
  1. 用 CKG 找到所有引用 OwnerID 的位置
  2. 按包/模块拆分
  3. 并行委派 N 个子 Agent
  4. 每个子 Agent 在自己的范围内完成改名 + 编译验证
  5. 合并后全局验证

下一步