· 多智能体使用指南

多智能体使用指南

4572 字
23 分钟
多智能体使用指南
StarryLin/Geek · 摘要

多智能体协作设计CLI工具的实战指南,主张按职责切角色并行运行,靠契约规则与裁决记录收敛冲突,并给出看板状态机、降级触发与串行边界。

需求只有一句:做一个追踪代码里 TODO / FIXME 注释的 CLI 工具。 做法:三个 Agent(用户体验 / 技术架构 / 挑刺者)+ 一个 Team Lead,在同一个对话里跑三轮,收敛出三份可评审的设计文档。 本文是《CLI 场景下多 Agent 协作》的配套实战篇,所有提示词与模板可直接复制。文中引用的结论均来自本仓库 docs/ 下的三份产出。


0. 结论先行#

先说这次协作的真实收益,避免把「多 Agent」讲成玄学:

检查点单 Agent 常见结果本次多 Agent 结果
产品定位直接开始写扫描器第一轮就被质疑「你凭什么不是 rg 别名」(Q1),被迫重定位
技术风险设计稿一路顺滑,实现期爆雷设计期被挑出 16 条代码级反例 + 14 条架构缺陷(A-01 ~ A-14)
跨角色冲突无人指出,埋进代码done 后是否隐藏、非 TTY 是否切机器格式,两处正面冲突在文档里被裁决
交付形态一份「我想好了」的方案三份互相引用、带裁决记录、可追溯分歧来源的文档

一句话概括:多 Agent 的价值不是「多几个窗口」,而是让「产品判断 / 工程实现 / 风险质疑」三件事同时发生,而不是串行返工。


1. 为什么这次拆了三个角色#

一个助手同时处理多类问题时,需要留意下面三种情况:

问题表现代价
上下文过载同时处理交互设计、存储方案、误报治理输出漂移、反复返工
任务抢占一个子问题打断另一个子问题节奏混乱、不可追踪
验收缺失只「做完」没「验完」交付不稳定

而「TODO 追踪 CLI」恰好是一个横跨三类职责的需求:

  • 产品判断:完成的任务还要不要默认显示?Markdown 笔记里的 TODO 要不要一起收录?
  • 工程实现:怎么区分不同语言的注释?代码移动后,怎样认出原来的 TODO?扫描 5 万个文件能否达到 5 秒的性能目标?
  • 风险质疑:直接用 rg 搜索不够用在哪里?索引会不会保存敏感代码?这个看板以后会不会没人维护?

这三类问题的正确答案来自互相矛盾的直觉——工程师想「全量诚实」,UX 想「首屏别劝退」,风险官想「先证明需求存在」。让一个 Agent 同时扮演三种角色,结果通常是「谁也没说服谁,然后悄悄选了一个」。


2. 角色设计:把通用四角色映射到这个需求#

通用模型是 FE / BE / TEST / RV 四类:

Agent职责边界输入输出
Frontend Agent页面、组件、交互、状态展示UI Speckit、接口契约前端实现与截图证据
Backend AgentAPI、数据模型、业务规则Feature Speckit、数据模型接口实现与调用样例
Test Agent回归用例、边界场景、失败复现需求验收项、日志测试结果与失败清单
Review Agent规则一致性、风险审查、合并建议以上所有产出审查意见与合并决策

这次没有前后端,我按**「职责而非技术栈」**重新映射,这是最关键的一步:

本次角色对应通用角色职责边界
UX AgentFrontend Agent命令体系、输出格式、零配置上手、空态与错误态
Architecture AgentBackend Agent技术选型、分层、数据模型、扫描流水线、性能预算
Devil’s AdvocateTest + Review Agent质疑需求前提、列代码级反例、审架构缺陷、给止损线
Team Lead(我)Team Lead锁契约、分任务、收 Round 汇总、裁决无法自洽的问题

禁止越界原则(四条,写进建队提示词里):

  • UX Agent 不得规定实现方案(只提约束与验收,比如「首屏 ≤10 条」而不是「用 SQLite 分页」)
  • Architecture Agent 不得跳过验收直接宣称完成(性能预算写进验收标准,不是优化项)
  • Devil’s Advocate 不得「顺手改设计」,只产出质疑与缓解方案
  • Team Lead 不直接大改方案,只裁决与纠偏

Sub-agent 还是 Agent Teams? 简单、独立、一次性任务用 Sub-agent(主 Agent 分派 → 子 Agent 返回)。 跨角色、需要持续协调、需要互相质疑的任务用 Agent Teams。 本次三者之间存在真实冲突(见 §5、§6),必须靠成员互通解决,所以选 Teams。


3. 开工前:开关、检查清单、建队#

3.1 打开 Agent Teams#

Terminal window
codebuddy # 打开 CLI

在 CLI 中输入 /config → 找到 [Experimental] Agent Teams → Enter 切为 true → Esc 退出。

脚本化环境也可以直接:

Terminal window
export CODEBUDDY_CODE_EXPERIMENTAL_AGENT_TEAMS=1

核验点:[Experimental] Agent Teams = true,并顺手确认响应语言(简体中文)。

3.2 Step 0:启动前检查(必做)#

  • 锁定工作目录 —— 所有 Agent 只操作当前仓库
  • 锁定 Speckit / SpeckitList 版本 —— 避免中途变更需求
  • 明确权限边界 —— 本例只允许写 docs/,禁止删除文件、禁止执行高风险命令
  • 设定最大轮次 —— 本例设 6 轮,实际 3 轮收敛
  • 建立证据目录 —— 产出落在 docs/architecture.md、docs/ux-design.md、docs/risks.md

3.3 一句话建队#

在同一个对话里直接发自然语言,不需要另开会话:

我正在设计一个帮助开发者追踪代码中 TODO 注释的 CLI 工具。
请创建一个团队从不同角度探索这个问题:
- 一个负责用户体验设计;
- 一个负责技术架构;
- 一个扮演"挑刺者",专门提出质疑与风险。
请先完成团队创建并给出每位成员的职责分工与首轮任务。

预期行为:自动创建团队 → 生成成员并分配初始任务 → 成员以不同颜色区分。

3.4 看板与状态机#

pending -> in_progress -> completed
\-> blocked -> in_progress
任务IDOwner状态依赖验收标准
UX-1UX Agentpending—命令体系 + 三个画像 + 首屏样本 + 空态/错误态
ARCH-1Architecture Agentpending—选型 + 分层 + 数据模型 + 性能预算
DA-1Devil’s AdvocatependingUX-1, ARCH-1质疑清单 + 代码级反例 + 止损线
LEAD-1Team Leadpending全部冲突裁决 + 里程碑

规则:

  • 同一时刻主线任务只有一条 in_progress,但允许 UX-1 / ARCH-1 并行推进
  • blocked 必须写明阻塞原因 + 解锁条件 + 预计恢复时间
  • completed 必须附证据(命令输出 / 文档链接 / 数据)
  • 按文档切分任务,避免多个 Agent 同时改同一文件

4. Round 1:并行产出,各自为战#

4.1 任务指令(四段式:目标 / 边界 / 验收标准 / 禁止项)#

[任务ID] ARCH-1
目标:给出技术选型、分层架构、数据模型与扫描流水线设计
边界:只写 docs/architecture.md,不改 UX 文档,不写实现代码
输入:需求一句话 + 设计约束(5 万文件 P95 < 5s、单二进制、零外网请求)
输出:架构文档(伪代码接口 + 表结构 + 性能预算 + 里程碑)
验收标准:三条核心取舍有明确取舍理由;性能预算写进验收标准而非优化项;
每个失败模式都有降级路径
禁止项:替 UX 决定默认视图;把"待优化"当"已达标"
[任务ID] UX-1
目标:给出命令体系、输出格式、零配置上手路径与空态/错误态文案
边界:只写 docs/ux-design.md,不规定实现方案
输入:需求一句话 + 三类用户画像(独立开发者 / Tech Lead / CI Bot)
输出:设计文档(命令表 + 终端输出样例 + 五条设计原则)
验收标准:每条示例命令可直接复制;首屏 ≤10 行结论;空态与错误态有文案
禁止项:指定存储方案或解析算法;引入需要 init 的前置步骤
[任务ID] DA-1
目标:质疑需求前提、挑出致命风险、给出可验证的止损线
边界:只写 docs/risks.md,不顺手改设计
输入:需求一句话 + UX-1 / ARCH-1 的产出
输出:10 个尖锐问题 + 16 条代码级反例 + 风险总表 + 9 条止损信号
验收标准:每条质疑必须配缓解方案;每条止损信号必须有阈值与判定方式
禁止项:只提问题不给出路;用"可能有问题"这类不可验证的表述

4.2 Round 1 汇总#

## Round 1 汇总
- 完成:ARCH-1 选型 Go + SQLite + 语言感知状态机;UX-1 给出命令体系与三个画像;
DA-1 给出 Q1~Q10 与 R-01~R-16
- 阻塞:无(三者输入不互相依赖,是本次能并行的唯一原因)
- 新增风险:DA-1 指出 Q10 —— 真正的瓶颈可能是"不想做"而不是"找不到",
若成立,整个产品定位要转向
- 需人工决策:默认视图全量 vs 活跃子集
- 下一轮:三者交叉评审,把质疑逐条落到设计修改

关键观察:这一轮能并行的前提是输入不互相依赖——三个角色读的是同一个需求,产出的是三份不同文档。如果让 UX 依赖架构的存储方案才能写命令设计,那就必须串行。


5. Round 2:冲突是价值,不是故障#

这一轮是整场协作收益最高的部分。冲突按「契约 → 规则 → 实现优先级」的顺序处理。

5.1 契约层冲突(最严重,会连锁破坏)#

质疑原设计修正
A-01:context_hash 进了指纹base_fp = sha256(repo_id + kind + text + context_hash)紧随 TODO 的 3 行代码是全文件最容易变的地方,改一次代码身份就变 → 用户态全丢
A-02:repo_id 进了指纹由 git remote URL 归一HTTPS↔SSH 切换、fork、CI 用 token 克隆,都会让全库指纹改变
A-03:浅克隆不是「作者为空」而是「时间为错值」blame 失败则软降级fetch-depth: 1 是 CI 默认态,blame 返回边界提交日期 ≈ 今天 → 三年前的 TODO 显示 age: 0d。空值是诚实的,错值是腐蚀性的
A-06:前 8KB 含 NUL 判二进制先判 NULUTF-16 文件充满 NUL(.cs / .ps1)→ 必须先看 BOM 再判 NUL,否则静默漏报

点名纠偏指令:

@Architecture Agent
你当前跑偏点:identity 设计把易变字段(context_hash、repo_id)放进了 fingerprint。
请仅做以下修改:
1) base_fp 收敛为 sha256(kind + normalized_text),context_hash 降级为非身份属性;
2) repo_id 从 fingerprint 中移除(索引本就按仓库分库);
3) 浅克隆(git rev-parse --is-shallow-repository = true)时硬失败富化,
created_at 置 null,UI 显示 age: unknown,绝不显示错误 age;
4) 编码探测顺序改为:BOM 优先 → 严格 UTF-8 → latin1 兜底。
禁止修改:UX 文档、UX 的指纹需求(UX 会另行提"路径也不能进指纹")。
输出:变更章节 + 每条修正的理由。

记录要求:每次点名干预都要留「触发原因 → 干预内容 → 结果变化」。这条记录后来成了 docs/architecture.md §6 的裁决记录,是复盘时唯一能还原现场的东西。

5.2 隐私泄漏面(UX 反向补充了架构的盲区)#

架构原本只防「blame 邮箱」。UX Agent 指出了一个架构没覆盖的出口:

用 actions/cache 缓存 index.db 到 CI,等于把全仓库 blame 邮箱上传到缓存服务。

这条质疑的价值在于它同时解决了另一件事——架构自己的性能结论是「blame 是首屏唯一大头」。于是最终决策:

scan:
blame: auto # 检测 CI=1 时自动降级为 never
blame_budget: 800ms

一个改动同时关掉隐私泄漏面和性能瓶颈。这种「跨角色互补」是单 Agent 最难自发产生的。

5.3 规则层冲突:非 TTY 到底输出什么#

  • 架构原方案:非 TTY 自动切机器格式
  • UX 反驳:todo ls | head、| less、> report.txt 全是非 TTY,但用户期望的仍是表格

裁决:采纳 UX。非 TTY 只做两件事——关颜色、宽度固定 100 列;机器格式必须显式 --format。这条写进了 OutputMode 的接口注释里。


6. Round 3:唯一需要人类拍板的问题#

三轮讨论后仍需要人工决定的是:todo done <id> 之后,默认视图还显示它吗?

方案挫败感风险
显示(架构原方案)高且不可逆:每天刷到已 done 的条目 → 用户判工具没用并弃用无
隐藏(UX 方案)无「误以为债消失了」——可用计数与提示消解

裁决判据是风险的不对称性:挫败感无法用提示消解,认知偏差可以。所以选隐藏,并补三条兜底:

  1. 汇总行永远显示全貌:3 open · 2 closed(注释仍在源码)· 1 vanished
  2. 首次 done 的回执必须写明「源码注释还在,去 todo ls --unsynced 看」
  3. 给这个状态一个出口:--unsynced 视图,作为「v1 不写回源码」下唯一的收敛路径

裁决记录在架构文档 §6.1,并且连带改了里程碑——--unsynced 从「可选视图」升级为 M2 必过项。

这条要特别注意:这类问题不该由任何一个 Agent 单方面默认。架构负责人最初的选择是「默认显示」,如果没人挑战它,它会一路带进代码里,等到用户反馈「工具无视我的操作」时为时已晚。

同一轮里还定了一条产品价值观:不做任何形式的债务评分 / 健康度 / 团队排行榜。理由是可验证的:一旦出现单一标量,它必然被考核,被考核必然被操纵(删 TODO 而不是修 TODO)。统计改为只报双向流量,作者分组按平均 age 排序而不是条数。


7. 什么时候该降级#

三条触发条件,命中任意一条立即停止并行:

  • 同类错误连续 2 轮未收敛
  • 跨模块修改范围不可控
  • 验证结果与改动结论冲突

降级指令模板:

进入降级模式:
1) 暂停所有并行任务;
2) 保留主任务 UX-1;
3) 将 ARCH-1、DA-1 转为串行;
4) 先修订 Speckit 中的冲突字段定义;
5) 修订后重新执行并输出差异报告。

本次没有触发降级,但第二轮一度接近:UX 在 v0.4 二次反馈中指出「指纹不含路径」带来两个新问题(同一指纹对应多处出现、改一个字等于换一条身份)。这类「修好一个 bug 引入另一个」的信号,就是降级的预警——幸好它附了缓解方案(用 context_hash 做编辑配对锚点、Crockford Base32 去形近字符),才没有真的停下来。


8. 红线与证据链#

8.1 安全红线#

  • 不在命令与日志中明文暴露密钥
  • 不允许未审查的危险文件操作
  • 不允许跳过验收直接标记完成

8.2 质量红线#

  • 不接受「改动大但无验证」
  • 不接受「通过构建但无边界测试」
  • 不接受「成功结论与证据不一致」

8.3 每个任务至少保留四项证据#

输入指令 / 关键改动 / 验证输出 / 结论(通过或阻塞)。

本次的验证输出大多是可复跑的数据,不是形容词:

Terminal window
# 隐私:证明零外网请求
mitmproxy 抓包,默认配置下外网请求数 = 0
# 性能:写进验收标准,不是优化项
5 万文件冷扫描 P95 < 5s(macOS/Linux)· < 8s(Windows)
二次扫描(无变更)< 0.3s
# 定位:证明不是 rg 别名
增量信息率 = 本工具独有字段数 / 总字段数
(age / owner / status / due / 引入 commit —— rg 一个都给不了)
止损线:增量信息率 < 30% 立即停手重定位

8.4 交付四件套#

  • 功能验收:三份文档覆盖命令体系 / 架构 / 风险
  • 质量验收:每条质疑配缓解方案,每条止损线有阈值
  • 风险验收:无越权操作,仓库内零污染写入
  • 复盘产物:看板 + 三轮 Round 汇总 + 裁决记录 + 未闭环项

交付摘要模板:

## 交付摘要
- 目标功能:
- 完成任务:
- 阻塞与解决:
- 风险处理:
- 验证结果:
- 可复用模板:

8.5 实验特性当前的能力边界(写进看板顶部)#

  • 会话恢复后,成员状态可能无法完整恢复 —— 关键协作必须可重放(这也是要留 Round 汇总的原因)
  • 单会话只维护一支团队,避免多团队并行导致上下文混线
  • 不做「团队套团队」的嵌套编排,复杂场景用「并行 + 降级串行」

9. 团队协作指令速查#

操作用途
@成员名只给指定成员下发任务或纠偏(首选,不要全体重来)
@all全员广播统一约束,例如「冻结契约,禁止新增字段」
Tab补全成员名,降低误 @
Ctrl+T打开/查看共享任务看板

口令固定四段式:目标 / 边界 / 验收标准 / 禁止项。

每轮固定产物五条:本轮目标 · 实际改动 · 验证结果 · 风险与阻塞 · 下一轮建议。

## Round N 汇总
- 完成:
- 阻塞:
- 新增风险:
- 需人工决策:
- 下一轮计划:

10. 小结#

三个可复制的经验:

  1. 角色按职责切,不按技术栈切。 没有前后端的需求,照样能映射出 UX / 架构 / 挑刺者的三角。挑刺者这个角色在单 Agent 模式下几乎必然缺失——因为没人愿意质疑自己刚写得挺顺的方案。

  2. 并行的前提是输入不互相依赖。 能让三个角色读同一份需求、写三份不同文档,才谈得上并行。一旦 UX 要等架构的存储方案,就直接串行,别硬撑。

  3. 留裁决记录,而不是留结论。 三个月后没人记得「为什么默认视图是活跃子集」,但只要有裁决记录(双方判据 + 风险不对称性 + 三条兜底),后来者就能判断这个决定要不要推翻。

这次分工是否值得,最终还是要看它发现了哪些遗漏、减少了多少返工,以及协调本身花了多少时间。角色数量本身说明不了收益。


文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

多智能体使用指南
https://mjzy.tech/posts/ai-engineering/13-多智能体使用指南/
作者
JIA
发布于
2026-09-04
许可协议
CC BY-NC-SA 4.0

评论区

正在加载 GitHub 评论…

Tips · 随手记
仅自己可见 · 每篇文章单独保存

文章目录