多 Agent 协作
复杂的编程任务(大规模重构、跨模块迁移、多文件 bug 修复)可以拆分给多个 Agent 并行执行。wescode 在 wesgine 引擎的 delegate_task 基础上,增加了编程场景特有的安全保障。
基本模型
主 Agent(Orchestrator)
├── 子 Agent A:修改 service 层
├── 子 Agent B:修改 repository 层
└── 子 Agent C:更新测试
主 Agent 通过 delegate_task 工具派出子 Agent。每个子 Agent 拥有独立的上下文和终端会话,但共享同一个工作区文件系统。
子 Agent 可以是:
- 单任务:一次性执行并返回结果
- 批量并行:多个子 Agent 同时执行不同的子任务
- 后台:
background=true时主 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 全局验证:
- 子 Agent A 修改了 service 层的错误处理模式
- 子 Agent B 修改了 repository 层的返回值
- 各自都通过了本地的 L0 / L1 验证
- 主 Agent 合并后,CSE 检查全局约束——发现 service 层现在期望 repository 返回 error,但 B 改成了 panic
这个全局检查捕获了单个子 Agent 无法发现的跨模块不一致。
3. 三步合并
子 Agent 的修改不是"谁先写谁赢"。合并按以下步骤进行:
- 收集:等待所有子 Agent 完成(或后台任务异步返回)
- 冲突检测:检查是否有多个子 Agent 修改了同一文件的重叠区域
- 应用 + 验证:按序应用修改,每步运行 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. 合并后全局验证
下一步
- Chat 与 Agent 模式 — Agent 的基本运行模式
- 渐进验证 — QualityGate 验证流程
- 工具全景 —
delegate_task工具参数