GoForum🌐 V2EX

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

caesor · 2026-03-24 15:04 · 0 次点赞 · 2 条回复

最近在用 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 格式,包含 statusevidence(证据链接/文件路径)、verified_by

效果

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

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

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


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

更多 AI Agent 实战踩坑记录在公众号「 Wesley AI 日记」,微信搜索关注。

2 条回复
sentinelK · 2026-03-24 15:09
#1

从 AI Coding 的 Agent 设计来看,一般都是要求 LLM 要明确表达出最终改动的位置和内容,且通过 shell 复核确认,才算成功。最终的“完成状态”不依照 LLM 的 token 表述,是靠查验脚本决定。

Copilot 的最新额度扣除规则,也是通过类似的逻辑实现的。在 Agent 模式下,LLM 没有产出,是不会扣除额度的。

caesor · 2026-03-24 15:24
#2

@sentinelK 你刚刚讲的都是需要有人的参与和评审。如果纯机器来做,一句话的需求如何设计产出 review 需要一整套的 workflow

添加回复
你还需要 登录 后发表回复

登录后可发帖和回复

登录 注册
主题信息
作者: caesor
发布: 2026-03-24
点赞: 0
回复: 0