Agent 如何验证工具确实执行成功,避免产生任务完成幻觉?
未标记
考查重点:业务回执与最终状态核验。提交后读取业务回执或独立查询最终状态,按任务ID和关键字段确认完成;模型自述、无错误退出或成功截图都不单独替代验收
本题目录
参考答案
核心回答
把“工具返回了”“模型认为完成了”和“业务结果已确认”分开。 执行前明确对象和验收条件;执行后保留真实工具结果,再通过业务回执或独立查询核对最终状态。只有预期条件得到证据支持,才能向用户报告完成。
例如导出订单,点击导出按钮没有报错,只能说明这次动作返回了;出现导出任务,也可能仍在排队。需要确认对应任务完成、文件实际下载,并核对文件字段和日期范围,才能判断整项导出完成。
工程上有三项关键处理:
- 明确返回语义。 工具返回业务对象标识、状态、错误及必要结果;
HTTP 200、进程退出码为0或“请求已受理”不能统一映射成业务完成。 - 执行后重新观察。 把工具结果写回上下文,读取新的页面、任务状态或文件内容;能用代码判定的条件直接校验,模型负责解释和处理尚不明确的情况。环境反馈循环。
- 未确认时保留未知状态。 异步操作按任务标识有界轮询;等待超时后先查已有结果,避免把“没收到回执”当成“没执行”而重复提交。
验收条件怎样落到程序中
验收围绕用户要求建立,既检查状态,也检查对象和关键字段。例如退款要匹配订单、金额及退款状态;导出要匹配筛选条件、文件格式和内容。成功提示或截图可以提供证据,但单独看到“成功”两个字,无法证明操作对象、金额或数据范围正确。
把动作输入、工具原始回执、执行后的查询结果和判定依据关联到同一任务,才能定位“工具失败”“仍在处理”“操作成功但不符合要求”等不同问题。过程记录与最终状态需要分别检查:选对工具、参数合法,与业务结果正确是不同的指标。
模型复核适合判断页面含义、文本是否完整等语义条件;它仍可能误读页面或遗漏要求。对于明确的状态、数量、字段和文件检查,应以实际系统数据及程序断言为依据。模型评分失败或没有取得证据时,不把缺失结果补成成功。
browser-usePython
browser-use 是用 Python 驱动的浏览器 Agent:模型结合页面状态选择点击、输入、提取等动作,工具层执行,再把结果交给后续决策。以 0.13.13 的供应商报价采集场景说明,它提供执行反馈与模型复核机制,报价字段及附件的最终验收还需要接入具体规则。
上轮动作结果与新页面一起判断
step() 先调用 _prepare_context() 获取浏览器状态及截图,把上轮模型输出、ActionResult 和当前页面组织成消息,再请求模型并执行动作。_execute_actions() 保存本轮结果,供后续步骤使用。这样模型可以检查筛选后是否出现目标报价、页面是否仍显示报错,而不是只根据自己计划过的动作推断成功。观察与结果回填。
工具层把执行超时、浏览器错误或其他异常转成相应结果,让模型决定恢复方式。不过,没有 error 不等于动作达成目标:例如元素索引已失效时,点击工具会在 extracted_content 中提示重新获取页面状态。因此还要读取返回内容并检查实际页面变化。工具执行与异常、元素不存在的返回。
done、结构化输出和 Judge 各自说明什么
done 把模型给出的 success 和最终文本写入 ActionResult,并设置 is_done=True。所以 history.is_done() 表示已经发出结束动作,history.is_successful() 读取模型自报的成功状态,history.final_result() 返回最后的输出内容。配置 output_model_schema 可以约束结构化结果的格式,不能据此证明其中的报价内容或附件真实存在。完成动作、历史结果方法。
该版本默认启用 use_judge=True。结束后,Judge 根据任务、最终输出、执行轨迹和截图再次评估,可通过 ground_truth 提供验收条件;未指定 judge_llm 时使用主模型。它是另一次模型评估,仍受可见证据和模型判断能力限制。Judge 输入、默认配置。
Judge 的结论只附加为 judgement,不会覆盖模型自报的 success,判失败也不会自动重新执行任务。 Judge 调用异常时返回 None;调用方可以分别读取 is_successful() 与 is_validated(),不能把“模型称成功、Judge 未返回”当作验证通过。终局评估及异常路径、结束处理。
报价采集怎样补上业务验收
业务集成可以增加报价验收步骤:按供应商、产品规格和采集时间保存报价字段与来源地址,确认币种、含税口径、起订量及交期能在网页或附件中定位;下载后再检查文件存在、能解析且对应目标产品。Agent 的完成文本、Judge 结果与这些检查分别保存,最终完成状态由业务验收条件决定。
例如“已打开报价页但没有目标规格”“附件下载完成但已过报价有效期”“模型自报成功而 Judge 判失败”都应保留各自状态。等待超时先检查当前页面与已有附件,再决定是否重新读取或下载。这些是可增加的验收设计,不能仅凭上游浏览器循环就推定已经实现。
对应教程
- 《从零开始学 AI 智能体》第 21 章:Agent 智能体:参考根据工具反馈继续决策的循环;本文进一步区分模型结束判断与业务结果验收。
- 第 17 章:Tools 工具调用:参考稳定返回结构、异常处理、幂等和调用记录,用于说明超时后不能直接重复写入。
参考资料
- 国内:JavaGuide:AI Agent 核心概念:参考工具执行结果进入下一轮观察的机制,解释为何不能只凭模型计划判断动作成功。
- 国内:JavaGuide:AI 应用评测体系:参考最终业务状态与执行轨迹分开评估,以及规则检查和模型评审的分工。
- 国内:Datawhale:智能体经典范式构建:参考动作由工具执行、观察结果回填历史的循环,解释返回文本要与真实执行反馈区分。
- 国内:Datawhale:智能体性能评估:参考工具调用能力、任务完成和故障恢复分别评估的思路,说明参数合法不足以证明最终任务完成。
- 国外:Anthropic:Building effective agents:参考持续从环境取得反馈、设置停止条件和使用程序检查的做法。
- 国外:Browser Use:Output Format:参考历史结果、结束动作与模型自报成功的语义,以及重要外部结果需要到目标系统核实的说明。