957 字
5 分钟
Agent 工程(七):Agent 可靠性的上限取决于目标能否验证

Harness 能稳定处理结构信号,却不能直接理解“任务是否完成”。Agent 可靠性的关键不是让 Harness 模拟模型的语义判断,而是尽可能把目标转换为退出码、产物校验、状态变化和评分标准。

Harness 执行每一次工具调用,因此天然掌握命令结果、文件变化和调用次数。它缺少的不是数据,而是“这些数据是否意味着目标已经达成”的定义。

停滞不是简单重复#

同一测试连续运行可能是正常轮询,不同命令也可能只是在重复同一个失败思路。更准确的停滞定义是:资源持续消耗,但可观察目标没有进展

检测可以从低成本信号逐层增加:

信号能说明什么
相同调用得到相同结果可能正在重复
同一错误签名反复出现解决路径没有改变
文件、测试或待办状态不变客观进展接近于零
独立评审判断转录开放任务可能缺乏结构指标

检测之后不应立即终止。先把“连续三次得到同样错误”作为显式信息放入下一轮,仍无进展时再回到早期 Checkpoint、启用干净上下文或请求人工介入。最大轮数只负责限制最坏损失,不能代替停滞判断。

“完成”必须转换为可检验条件#

模型停止或声明完成,只是一项建议。Harness 若没有验收条件,就无法区分真实完成与过早结束。

可靠性从高到低可以分为三层:

  1. 机器可验证:测试通过、编译成功、文件存在且结构合法;
  2. 独立评分:事先定义检查项,由独立上下文评审产出;
  3. 人工确认:目标只存在于用户判断中时,整理证据并交还用户。

代码任务往往比开放式写作稳定,不一定是模型更擅长代码,而是代码天然拥有测试、编译器和静态检查。目标越容易转换为确定性信号,Harness 越能可靠批准完成。

Harness 应在执行中和结束时各检查一次#

流中检查用于判断进展。例如失败测试从 12 个降到 5 个,虽然尚未完成,但不应被判为停滞;连续多轮维持 5 个,才需要干预。

终局检查则在模型声明完成后重新执行验证,不依赖它提供的文字总结:

模型声明完成
→ Harness 独立运行验证
→ 通过则结束
→ 失败则把真实结果送回 Agent

工具层错误也应作为结果交给模型,而不是由 Harness 无条件重试。网络超时可以在满足幂等条件时退避重试;文件不存在或命令失败通常需要模型改变方法;任务级停滞则必须改变上下文、计划或参与者。

我的选择:先设计验收,再设计 Agent#

我会在任务进入 Agent Loop 前定义可验证的完成条件,并同时记录过程指标和终局验证结果。写不成测试时,就写成明确评分表;两者都无法定义时,任务必须保留人工确认。

这会增加验证器和状态采集成本,也可能限制开放任务的自由度。但如果目标无法被任何独立证据确认,就不应把“自动完成”作为系统承诺。下一篇进一步讨论如何判断系统改动是否整体变好:评估集的定位是防回归,而不是证明质量