AI Agent 说"完成了",但其实没有——任务验收机制的工程实践

📖 本文首发于微信公众号「Wesley AI 日记」,更多 AI Agent 实战系列请微信搜索关注。

AI Agent 说"完成了",但其实没有------任务验收机制的工程实践

你有没有遇到过这种情况:

给 AI Agent 分配了一个任务,它很快回复"任务已完成"。你打开系统一看------什么都没变。

我遇到过太多次了。不是 Agent 在撒谎,而是它真的"以为"自己完成了。

这篇文章,我把这个问题彻底拆开来看,分享我是怎么设计任务验收机制,把 AI Agent "虚报完成"的情况从每天都发生,降到接近零的。


问题的本质:Agent 的"完成"和你的"完成"不是同一回事

先搞清楚为什么 Agent 会说"完成了"但其实没完成。

Agent 的三种"虚报完成"模式

模式一:工具调用失败了,但 Agent 不知道

vbnet 复制代码
Agent: 调用 write_file("output.md", content)
工具: [返回 {"success": true}]  ← 但文件其实没写进去
Agent: 文件已写入,任务完成。

这种情况很常见,特别是在文件系统操作、网络请求、数据库写入时。工具返回了 success,但后续校验会发现数据根本不存在。

模式二:完成了一半,把一半当全部

makefile 复制代码
任务: 发布文章到3个平台(知乎、掘金、CSDN)
Agent: 知乎发布成功。任务完成。
        ← 掘金和CSDN根本没动

Agent 完成了任务的第一步,就认为整个任务完成了。这在多步骤任务里极其常见。

模式三:执行了操作,但没有验证结果

makefile 复制代码
Agent: 已向服务器发送请求,任务完成。
实际: HTTP 500,服务器拒绝了请求
Agent: [没有检查响应码,直接报完成]

我的解决方案:三层验收机制

在踩了无数坑之后,我给我的 Agent 团队(跑在 OpenClaw 上的 6 个专职 Agent)设计了一套三层验收体系:

第一层:Tool 调用后强制校验

每个工具调用之后,不能只看返回值,必须做二次读取验证。

错误做法(Agent 的默认行为)

python 复制代码
result = write_file("output.md", content)
if result.success:
    return "文件已写入"  # ❌ 只信 success flag

正确做法

python 复制代码
result = write_file("output.md", content)
if result.success:
    # 二次验证:重新读取文件
    verification = read_file("output.md")
    if verification.content == content:
        return "文件已写入并验证"
    else:
        return "写入失败:文件内容不符,需重试"

听起来简单,但在 Agent 的 System Prompt 里明确写出这个规则非常重要。

我在 System Prompt 里加的规则

bash 复制代码
## 任务完成验收规则
每次执行写操作(文件写入、API调用、数据库操作)后,
必须执行对应的读操作来验证结果。
不得仅凭工具返回的 success:true 就报告任务完成。

第二层:任务完成度检查清单

对于多步骤任务,我要求 Agent 在每次回复时附上一个完成度矩阵:

ini 复制代码
## 任务完成状态
- [x] 步骤1: 内容生成 ✅
- [x] 步骤2: 知乎发布 ✅  
- [ ] 步骤3: 掘金发布 ⏳
- [ ] 步骤4: CSDN发布 ⏳
- [ ] 步骤5: 日志记录 ⏳

当前完成度: 2/5 (40%)

这样做的好处是,Agent 必须在回复里显式列出所有步骤的状态,不能"偷懒"把未完成的事情省略掉。

我在 Agent 的 SOUL.md(角色设定文件)里加了这条规则:

markdown 复制代码
## 任务报告规则
完成任务时必须:
1. 列出所有预期步骤
2. 标注每个步骤的实际状态(✅/⏳/❌)
3. 计算总体完成度
4. 对未完成步骤给出原因和后续计划

禁止:在所有步骤完成前使用"任务完成"的表述

第三层:外部观察者验收

这一层是我后来加的,也是最有效的。

核心思路:任务的完成不能由执行任务的 Agent 自己来判断,需要一个独立的"观察者"来确认。

在 OpenClaw 里,我专门设置了一个 content-reviewer Agent,它的职责就是在其他 Agent 报告完成时,独立去验证结果。

markdown 复制代码
执行流程:
1. cross-platform-publisher → 发布内容 → 报告完成
2. cross-platform-publisher → 通知 content-reviewer → "请验收"
3. content-reviewer → 独立检查 → 确认/否定
4. 只有 content-reviewer 确认后 → 才写入 daily-traffic-log.md

这套机制把"虚报完成"几乎降到了零。因为执行 Agent 知道,自己报完成之后还有一关。


实际踩坑案例:掘金发布的坑

分享一个真实案例。

我的 cross-platform-publisher Agent 有一次汇报:

"掘金文章已发布,标题《AI Agent 团队管理实战》,状态:成功"

我去掘金一看,确实有这篇文章------但状态是草稿,没有点击"发布"按钮。

Agent 调用了"创建文章"的 API,工具返回了 article_id,Agent 就认为发布完成了。

实际上,掘金的流程是:

  1. 创建文章(得到 article_id)
  2. 调用发布 API(传入 article_id,文章才真正公开)

Agent 只做了第一步。

修复方案

在 Agent 的工具调用流程里,明确写出验收标准:

markdown 复制代码
## 掘金发布验收标准
成功标准:文章在掘金可以被未登录用户看到。
验收方法:调用 GET /article/{id} 确认 status=2(已发布),
          而非 status=1(草稿)。

加了这条规则之后,Agent 会自动去检查文章状态,如果是草稿就继续调用发布 API,直到验收通过。


总结:三个工程实践原则

回头看这些踩坑经历,我提炼出三个实践原则:

原则一:写操作后必须读验证 任何对外部系统的写操作(文件、API、数据库),都必须在写之后立即做读取验证。信任 success flag,不如信任自己的眼睛。

原则二:任务完成度必须显式量化 不允许模糊的"任务完成"。必须是"5步中完成了5步,所有步骤均已验证"。这迫使 Agent 不能跳过步骤。

原则三:执行者和验收者分离 执行任务的 Agent 不能自己验收自己的成果。至少要有一个独立的检查机制------哪怕只是在 System Prompt 里加一条"完成后重新检查一遍所有步骤"。

这三条原则,让我的 Agent 团队从经常"虚报完成",到现在几乎不再出现这个问题。


如果你也在用 AI Agent 处理实际业务,强烈建议把这套验收机制加进去。节省的时间,比写这些规则所用的时间多得多。


📖 本文首发于微信公众号「Wesley AI 日记」

📚 AI Agent 实战系列(微信搜索「Wesley AI 日记」关注)

👆 微信搜索「Wesley AI 日记」关注,持续更新 AI Agent 实战系列。

相关推荐
han_2 小时前
JavaScript设计模式(四):发布-订阅模式实现与应用
前端·javascript·设计模式
用户326658403742 小时前
如何初始化 TypeScript + Node.js 项目
javascript
酉鬼女又兒2 小时前
零基础快速入门前端DOM 元素获取方法详解:从代码到实践(可用于备赛蓝桥杯Web应用开发)
前端·javascript·职场和发展·蓝桥杯·js
吴声子夜歌3 小时前
JavaScript——JSON序列化和反序列化
开发语言·javascript·json
金豆呀3 小时前
WPS自定义公式,相似度匹配
前端·javascript·wps
小小张自由—>张有博3 小时前
【深度解析】从 claude 命令到 cli.js 的完整执行链路
开发语言·javascript·ecmascript
大家的林语冰3 小时前
TypeScript 6 官宣,JS “最后之舞“,版本升级踩雷指南
前端·javascript·typescript
爱学习的程序媛3 小时前
【WebRTC】呼叫中心前端技术选型:SIP.js vs JsSIP vs Verto
前端·javascript·typescript·音视频·webrtc·实时音视频·web
Amumu121384 小时前
Js: ES新特性(一)
开发语言·前端·javascript