五个 Agent 在飞书群里接力做一份调研
不是一个 Agent 闷头干完给你结果,而是五个角色在群里你来我往:谁在做什么、谁质疑了谁、哪条结论没有出处,全程看得见,你随时能插一句话。
它长什么样
你在群里 @ 总调度说一句「请调研:AI 编程助手对代码质量的实际影响」,然后就可以去干别的。接下来六分钟里,群里会依次出现:
你 → 总调度 拆成 3 条要点,交给调研员
→ 调研助手 真去检索,4 条发现每条带 URL;查不到的明说「没查到可靠来源」
→ 数据分析师 给出量化推论,标清哪句是引用、哪句是推断
→ 报告撰写 成稿(标题 + 小节 + 结论 + 参考来源)
→ 审核员 抽查数字真伪、挑出被磨掉的限定词,给 12 条修改意见
→ 报告撰写 按意见逐条修订,附「本轮修订」清单
→ 总调度 落成飞书文档,群里回链接 + 摘要
→ 你
最终交付不是一大段聊天消息,而是一个飞书文档链接——三千字的报告塞进聊天窗口根本没法读,手机上会被折叠、链接挤成一团。文档能分享、能评论、能搜索,三个月后还找得到。
为什么要五个人,一个不行吗
一个 Agent 也能写出一份看起来完整的报告。问题是你没法判断它哪句可信——没有出处、没有人质疑过、每句话的语气一样笃定。
分工的价值在于每个角色都在堵一类特定的错:
| 角色 | 堵的是什么 |
|---|---|
| 调研助手 | 凭记忆编事实 —— 强制检索并附 URL,查不到就明说 |
| 数据分析师 | 把定性说法升级成精确数字 —— 标注「据调研 / 推断」 |
| 报告撰写 | 成稿时磨掉限定词,读起来更笃定但那是假的确定性 |
| 审核员 | 没人核验 —— 抽查关键数字,逐条点名没有出处的断言 |
| 总调度 | 交付时冒功 —— 只转交、不谎称自己改过稿 |
真实运行里发生了什么
它承认自己查不到
调研助手在一条结论下面写:
「70–80% 拐点」这一条没查到可靠来源。学术文献结论互相冲突,给出具体数字的均为厂商白皮书,来源不可追溯,下游请勿当作事实引用。
而下游真的听了——分析师没有偷偷补一个数,报告里把它单独隔离进「已排除项(无一手来源,不得量化引用)」。
审核员抓到了真错
它抽查了报告里的数字,一条核实属实、一条**「未能核实」并建议删去**。还指出一个很细的逻辑问题:把「未证实」当成了「已证伪」,建议结论改成「在缺乏本组织数据前,不建议…」。
修订那一棒拒绝了审核员给的数字
报告撰写在修订记录第 1 条写:
按审核意见采用保守表述,未标页码,也未写入审核方提到的 16,935,148 mutant / 10 种语言(同样未经我本人核对)。
审核员是上游权威,但它没有盲从——自己没核实过的数字就不往终稿里写。这个行为没有人要求过,是那几条约束长出来的。
交付时它指出了上游的缺陷
总调度在最后一条消息里说:
终稿末尾的参考链接仍是嵌套重复形态,第 12 条修订记录称已修复,但我收到的文本里并未修复。我按原样保留、没有替用户猜测正确 URL。
它没有替上游圆场,也没有自己瞎猜一个链接。诚实地暴露问题,比无声地糊过去有用得多——后者你得读完全文逐条核对才可能发现。
五条可以直接抄的约束
这些不是设计出来的,是同一个题目跑了四轮、每轮观察失败加一条约束试出来的。写进对应角色的「人设」里即可。
1. 检索角色:禁止凭记忆,查不到要明说
必须真的检索,不许凭记忆作答。
每条结论后面跟上来源,格式 [来源:标题 - URL]。
查不到就明说「这一条没查到可靠来源」,不要用记忆填补——
下游会把你的话当事实往下写。
第三句是关键。只说「要检索」不够:模型查不到时会无声地退回记忆,而那份产出和真检索来的长得一模一样。必须给它一条体面的退路。
2. 分析角色:不许把定性升级成精确数字
上游说「相关性大幅衰减」,你不能写成「解释力只剩个位数百分比」——
这个数字没有出处,但读起来像有,下游会当事实用。
精确化是一种幻觉放大器。「大幅衰减」读者知道是估计,「个位数百分比」读者会以为有研究支撑。
3. 全链:区分「引用」和「推断」
直接来自上游事实的写「(据调研)」,你自己推出来的写「(推断)」。
成本极低(两个前缀),收益极高:审核那一棒因此能只盯推断项,不用靠语感猜哪句可疑。
4. 成稿角色:限定词不许磨掉
上游写「(推断)」的,不能在成稿时写成确定结论——
成稿这一步最容易把限定词磨掉,读起来更笃定,但那是假的确定性。
5. 来源不计入字数限制 ⭐
来源清单不计入字数限制,不许因为「篇幅不够」丢掉它。
丢 URL 比超字数严重得多。
这条最反直觉,也是实测里最贵的一个 bug。 某一轮里 URL 全丢了,第一反应是「模型不听话」。但看数据——它实际输出 580 字,而限制是 350 字,它早就超支了,于是在「保内容」和「保来源」之间选了前者。
所以这不是遵从度问题,是预算冲突。加强措辞没用,得把来源移出预算。改完之后 URL 立刻完整到达末端。
推广开来:凡是「必须原样传下去」的机械信息(来源、编号、原始引文),都要显式排除在字数限制之外——它对当前这一棒的表达毫无贡献,只对下游有用,压缩时必然第一个被牺牲。
还有两条机制约束
跟内容无关,但不写会出事:
- 每一棒只 @ 下一棒,绝不 @ 回上游——回指会造成无限循环,每跳一次都是一次完整的模型调用。AgentPilot 内置了交接次数闸门兜底,但在人设里先说清更省钱。
- 审核发现问题不要当场打回重做——同理。要支持返工,就用「审核员 @ 回撰写、撰写改完直接交总调度」这样有界的一次回退,而不是让两个角色自由往返。
怎么搭出来
- 在 AgentPilot 里创建五个智能体,各写一段人设(把上面的约束抄进去)
- 逐个接入飞书(应用内一键完成)
- 把五个智能体组成一个团队
- 在团队页点**「创建协作群」**——自动建群、拉齐全部成员、你自己也在群里
- 群里 @ 第一棒,发一句任务
第 4 步是有意做成一键的:手工拉群最容易漏掉一个成员,而链路断在那儿不会有任何提示——被 @ 的机器人不在群里,消息发出去就没人接了。
值得知道的代价
- 比单个 Agent 慢:这一轮六分钟,其中检索和修订最耗时。换来的是每条结论可核验。
- token 花得更多:七跳就是七次完整调用。
- 适合什么:需要出处、需要交付给别人看的调研与报告。问个事实、写段代码这种,单个 Agent 更划算。
这条链真正的价值不是「更聪明」,而是过程可见、结论可追溯——你不用读完全文再逐条核对,因为哪条有出处、哪条被质疑过、哪条查不到,报告自己写着。