AI Agent 一直说「任务完成」,但其实没有——我如何设计了一套验收机制

3 月 24 日
 caesor
最近在用 AI Agent 团队自动化运营一些工作流,遇到了一个很头疼的问题:

**Agent 会谎报完成状态。**

不是恶意的那种,而是语言模型的幻觉——它在没有真正执行完成的情况下,会生成「已完成」「任务成功」这样的文字输出。

---

## 具体现象

- Agent A 被要求「发布文章到平台」,它返回了「已发布,链接:xxx 」,但实际链接是伪造的
- Agent B 被要求「检查数据库状态」,它说「数据库正常」,但根本没有执行检查命令
- Agent C 被要求「生成报告」,它说「报告已生成」,但文件路径里什么都没有

---

## 根因分析

语言模型在训练时学会了「完成任务的语言模式」,在没有 ground truth 的情况下,它会生成符合期望的文字,而不是执行实际动作。

这在 tool_call 流程里尤其危险:如果 Agent 的 tool 调用返回了「成功」,但实际系统状态没变,模型不会主动质疑。

---

## 我的解决方案

1. **强制状态验证**:每个「完成」声明后,自动触发独立的验证步骤(由另一个 Agent 或脚本执行)
2. **副作用检查**:验证任务的真实副作用是否存在(文件是否生成、API 是否有响应记录、数据库是否有写入)
3. **蒙特卡洛采样**:对关键任务重复验证 3 次,超过 1 次失败则判定为未完成
4. **结构化返回**:强制 Agent 返回 JSON 格式,包含 `status`、`evidence`(证据链接/文件路径)、`verified_by`

---

## 效果

自从加了这套机制,虚报率从大约 30% 下降到接近 0%。

代价是:任务完成时间增加了约 20%,因为多了验证步骤。

但对于任何涉及外部副作用的任务(发布/写入/通知),这个代价是值得的。

---

有在做 Multi-Agent 系统的同学遇到过类似问题吗?你们是怎么处理的?

更多 AI Agent 实战踩坑记录在公众号「 Wesley AI 日记」,微信搜索关注。
1689 次点击
所在节点    程序员
6 条回复
sentinelK
3 月 24 日
从 AI Coding 的 Agent 设计来看,一般都是要求 LLM 要明确表达出最终改动的位置和内容,且通过 shell 复核确认,才算成功。最终的“完成状态”不依照 LLM 的 token 表述,是靠查验脚本决定。

Copilot 的最新额度扣除规则,也是通过类似的逻辑实现的。在 Agent 模式下,LLM 没有产出,是不会扣除额度的。
caesor
3 月 24 日
@sentinelK 你刚刚讲的都是需要有人的参与和评审。如果纯机器来做,一句话的需求如何设计产出 review 需要一整套的 workflow
Mutoo
3 月 24 日
不同参数大小的模型在 tool calling 的表现是不一样的,你应该在文章里标注一下使用的模型参数。
gotoschool
3 月 24 日
这套机制 我们应该如何用啊
ivyliner
3 月 24 日
感觉有点引流啊, 可以介绍一下你的解决方案的具体内容不 ?
t20000622yy
3 月 24 日
可以搞个工作流,一个 AI 工作完给另一个 AI (比如 codex )审查,审查完自动根据结果来调整,之前开发了两个这样的工具可以试试:

给任意 agent ( cursor ,cc 之类的都可以)调用的,并行执行或者审查: https://github.com/mco-org/mco

自动化组建 AI 团队的,开任意个 agent ,分配角色,不用人参与他们根据目标自动迭代,就差不多 AI 团队的意思: https://github.com/mco-org/squad ,这个工具我觉得可以解决你的问题

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://study.congcong.us/t/1200728

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX