CMU AI AGENTS / 从一句回答,到一次真实动作 / 第 08 课

Agent 说“完成了”,我们凭什么相信?

区分模型宣称完成、工具成功返回、环境目标真的达成。任务要有可检查的终止条件,失败观察要能回到循环。

完整讲解 · 条件对照 · 理解检查所在单元与学习顺序官方课件全页浏览

本节要解决的事:从“回答很像成功”走到“环境中确实出现了要求的结果”。例子延续库存任务,但这次用户明确要求修改教学文件。

一句话很有把握,可能四条轨迹都一样

用户说:“把 /demo/stock.json 中红笔库存从 5 改为 2,其他商品保持原样。”四个 Agent 最后都说“已完成”。第一个没有调用写文件工具;第二个调用了,但工具返回权限错误;第三个成功写入 /demo/stock-copy.json;第四个写入指定文件并重新读取。只读最后一句话,你无法区分它们。

目标不是“说出数字 2”,也不只是“出现一次成功工具调用”。目标包含对象、字段、新值和不变条件:指定路径的红笔库存等于 2,蓝笔等其他字段没有被意外改动。把这句话变成验收条件,成功才有共同含义。如果用户只是问库存,本节的写入当然不在任务范围内;验收必须从实际请求出发。

把成功拆成三层证据

第一层是模型声明。它方便向人汇报,却仍是模型生成的文本。第二层是工具报告,例如写入工具返回成功。这说明某个操作接口认为自己完成了工作,但路径可能错误,成功也可能只代表任务已排队。第三层是目标状态的检查:读回指定文件,解析内容,对照目标与原始快照。对于异步服务,还要区分“接受请求”和“业务最终完成”。

这三个层次不是互相排斥。声明负责交流,工具状态帮助定位故障,环境验证负责支持完成结论。问题出在拿前一层直接代替后一层。比如工具返回“已保存 120 字节”,它不能单独证明保存的是正确 JSON,更不能证明保留了所有其他商品。

官方原课件 · Lecture 2 · PDF 第 54 页官方如何把工具评估分成四层
Tool selection、arguments、trajectory 与 task outcome 的评估表格

从上往下读:选对工具、参数正确、顺序正确、任务成功。右侧各行列的是不同失败方式。最后一行明确指出,听上去合理的答案仍可能是错误结果。我们的四条文件轨迹正是在区分这些层。

沿着最短证据链走一遍

先读取原文件,保存红笔 5、蓝笔 1 的事实与路径。生成只修改红笔库存的操作,让工具返回实际目标路径与结果。随后重新读取同一路径,将 JSON 解析为对象,检查红笔是否等于 2,再检查蓝笔仍为 1。最后汇报这两项检查,而不是根据工具名字猜测成功。

如果写入失败,失败结果应该回到下一轮输入。模型可以分析权限、路径或格式,选择修正,也可以在缺乏授权时停止。不能把失败字符串删掉后让它继续宣布完成。循环的终止规则应允许“成功”“失败且无法继续”“预算耗尽”等不同结局,避免把所有结束都叫成功。

观察过程 · 改变条件

同一句完成,分别检查实际状态

先做预测,再逐步展开。这里是固定规则的教学回放,不是真实模型测评。

教学构造场景 · 按下方规则逐步回放;不调用真实模型,不代表实际成功率。

这一轮的输入

目标 /demo/stock.json:红笔 5,蓝笔 1。工具写入 stock-copy.json。

  1. 1. 操作报告

    工具表示成功写入副本。

  2. 2. 读回目标

    原路径仍是红笔 5、蓝笔 1。

  3. 3. 对照条件

    红笔应该是 2;实际为 5。

操作报告

工具表示成功写入副本。

1 / 3
先预测,再核对结果与原因任务失败

操作成功与目标成功分离,不能用副本代替指定文件。

两组条件变化,会改变检查方式

第一组比较同步文件与异步订单。文件写入返回后可以立刻读回;订单接口返回任务号时,订单可能还在处理中。后一种情况应查询任务状态或订单记录,而不能把 HTTP 请求成功视为订单已成立。等待需要有超时和停止条件,不能无期限轮询。

第二组比较独占修改与多人并发。如果另一个人同时合法修改蓝笔,简单拿整个文件字节与旧副本比较会把合理变化也算成我们的错误。此时需要版本号、事务或更精确的变更归属证据。教学例子假定没有并发写入;真实系统要把这个前提写进验证设计。

验证也有成本。只读库存问答无需构造大型测试框架;关键是验证风险最大的未知部分。检查一条输出样式不能证明没有其他副作用,读回一个字段也不能证明所有字段都安全。我们应明确“本次检查支持什么”,避免把有限证据扩张成全系统可靠性。

理解检查:先回答,再看解释

问题一:工具显示成功,为什么第三条轨迹仍失败? 因为成功对应副本路径,而用户目标对应原路径。请求对象和验证对象必须一致;增加更多“成功”日志不能弥补对象错位。

问题二:读回红笔为 2,是否足够? 对本任务还不足够。用户还要求其他商品不变,至少需要检查有关字段或审查准确差异。如果红笔变对了、蓝笔被删除,目标只完成了一部分。

问题三:写入权限错误后,正确最终回答一定是失败吗? 不一定立即结束。若可在授权范围内修正路径等问题,可以继续;但没有新证据前不能说已完成。最终应该区分已尝试、已执行、已验证,并报告未解决项。

回到整条循环

至此,工具调用不仅能跑起来,还能配对、校验、选择并行并判断结束。下一问是:如果每一步都要带着这些请求、返回和证据继续,历史越来越长,模型究竟反复读了多少内容?