PaperBridge 长尾问题
长时间运行的 AI Agent 为什么更依赖 harness,而不只是更长的 prompt?
Prompt 负责告诉模型“想完成什么、下一步怎么判断”,harness 负责让这件事在多轮工具调用、上下文压缩和失败恢复后仍然成立。最小 harness 应把任务目标、当前状态、允许工具、权限、预算、停止条件、可执行验收和恢复点放在模型上下文之外,并在每次动作后读取真实环境结果。更长的 prompt 可以改善一次决策,却不能单独持久化状态、阻止越权、证明工具真的成功,或让下一次会话从正确位置继续。
1. 先分清 Prompt 和 Harness 各自负责什么
Prompt 是模型输入的一部分:它描述角色、目标、规则、示例和当前上下文。Harness 是模型周围的执行系统:它组装上下文、暴露工具、验证参数、读回环境结果、保存状态、控制权限与预算,并决定继续、重试、升级还是停止。
两者不是互斥关系。成熟 harness 通常包含 prompt 模板,但还把重要边界变成代码、schema、测试和状态机。只写在 prompt 里的规则仍然需要模型每一步都记住并正确执行;机械约束则可以在模型犯错时拒绝动作。
2. 把进度放到上下文窗口之外
长任务会经历上下文压缩、进程重启、人员接管和外部状态变化。不要把“已经做了什么、还剩什么、哪个假设已验证”只留在对话历史里。保存结构化任务状态、决策记录、产物清单、未完成项和最近一次通过的检查。
Anthropic 的长任务实验记录了两类典型失败:Agent 在上下文耗尽前一次做太多,留下半成品;后续会话看到已有进展后又过早宣布完成。初始化脚本、进度文件、增量交接和干净工作状态,实质上是在为下一次会话提供可靠的外部记忆。
- 稳定目标与验收条件,和会变化的当前计划分开保存。
- 记录已执行动作、真实结果、未解决错误和下一最小步骤。
- 让恢复点可以被程序读取,而不是只写一段自由文本总结。
- 每次恢复先重放关键状态并验证环境,不能直接相信旧计划。
3. 把工具和观察设计成 Agent 的接口
Agent 不只需要“能调用工具”,还需要参数清楚、返回值可解释、错误可恢复的接口。SWE-agent 的 Agent-Computer Interface 研究说明,命令和反馈格式的设计本身会改变模型操作仓库、编辑文件和运行测试的能力。
工具成功返回并不等于任务成功。Harness 应把动作后的数据库、文件、浏览器或 API 状态重新读回,让下一步基于真实结果,而不是模型对刚才动作的想象。高风险工具还需要参数 schema、最小权限、幂等键、预览和提交前检查。
4. 把“完成”变成可执行验收
一句“完成这个项目”会让模型自己解释完成范围。更可靠的做法是把完成定义成测试通过、目标文件存在、页面可访问、数据库状态匹配、预算未超限以及禁止动作没有发生。难以二值判断的质量,再交给人工或独立评估器。
Harness 还应规定停止条件:连续失败多少次后换路线,什么时候请求用户输入,哪些动作需要确认,以及什么状态必须安全退出。这样 Agent 不会因为还有 token 就无限重试,也不会因为生成了一段像答案的文字就提前结束。
5. 评估“模型 + Harness”,不要只报模型名
Harness-Bench 在固定协议下观察到明显的模型—harness 差异,并识别出推理与工具反馈、工作区状态或可验证产物脱节的执行对齐失败。WildClawBench 也报告,单独更换 harness 可让同一模型得分变化最多 18 分。
因此生产评估应锁定模型版本、harness 版本、工具集合、权限、预算和恢复策略。至少报告完成率、验证通过率、越权动作、重试、成本、延迟和人工介入,而不是把一次成功归因于模型,把失败全部归因于 prompt。
最小 Agent Harness 执行合同
- 写清目标、非目标、可执行验收和禁止动作。
- 把任务状态、决策、产物和下一步保存到上下文之外。
- 为工具定义 schema、权限、错误语义、幂等与真实结果读取。
- 为高风险动作增加预览、确认和独立提交前检查。
- 设置 token、时间、工具调用、成本和重试预算。
- 定义失败恢复、人工升级、安全停止与跨会话接力。
- 按模型—harness 配置重复评估,并保存完整轨迹与最终环境状态。
原论文、研究与官方文档
以下来源用于核对事实;流程与比较建议是 PaperBridge 对研究、官方文档和工程实践的综合。