Agent 循环保护:用预算和进展信号及时停止
你可以用一段轨迹解释系统为什么停下来。成功是错误没有被继续放大,而不是模型自动修好了所有问题。
适用场景发现不确定结果、风险信号和需要人工复核的项目
把“动作不重复”和“取得新进展”分开。先有硬预算,再让模型辅助发现无效循环。预算与进展信号先于任何提示词技巧。
来源 · Ashutosh Mathore · X 原帖伴读
2026-09-21 · 编辑整理,未调用真实模型
背景 / 问题
Section titled “背景 / 问题”一个 Agent 可能每次都执行不同操作,却一直建立在同一个错误假设上。比如账户没有访问权限,它仍不断换 URL、刷新、换选择器。动作看起来变化了,事实却没有变化。
原作者展示过基于语义的熔断思路。本教程使用虚构轨迹讲清如何接入,不把原帖中某次减少调用的数字当成普遍结果。
先有硬限制,再判断是否前进 任务目标 → 动作+实际观察 → 检查新证据 → 硬预算限制 → 暂停并交接
模型不能为自己扩权或加预算。
-
一小段脱敏轨迹:目标、动作、实际观察和错误。
-
代码层已有限制步数、总时长和可使用额度。
-
停止后有人能看到原因,而不是任务悄悄消失。
1. 在模型之外先设置硬限制
Section titled “1. 在模型之外先设置硬限制”最大请求数、最长时间和预算上限必须由代码独立执行。即使模型超时、报错或返回「继续」,也不能越过硬限制。
对于支付、发布等写操作,还要有独立的审批与防重复机制。语义判断不是唯一保险。
2. 记录观察,不只记录动作名字
Section titled “2. 记录观察,不只记录动作名字”每一步保留实际结果:返回 403、目标列表仍为空、账户仍未切换。不要只写 click、retry、navigate,这样无法判断有没有新证据。
轨迹中删除 token、Cookie 和私人信息,只给模型必要摘要。保留原始日志在受控位置,便于人工排查。
3. 问一个有限的进展问题
Section titled “3. 问一个有限的进展问题”判断最近一次尝试是否基于新信息,或是否重复依赖已被否定的假设。结果可以是 progress、same_assumption、insufficient_evidence。
模型不能因为想继续,就自动延长预算或申请新权限;这些变更必须由另外的明确授权流程处理。
4. 触发暂停后,给人可操作的上下文
Section titled “4. 触发暂停后,给人可操作的上下文”显示原目标、最近有效观察、停止原因与建议人工核查项。不要把「暂停」伪装成「任务成功」。
恢复任务时从当前真实状态重新读取,不从过期 DOM、坐标或旧推测继续。写入结果不确定时先查询,而不是重复提交。
动作变化了,事实没有变化
下面是虚构轨迹,所有动作都面向同一个权限问题。
| 步 | 动作 | 实际观察 |
|---|---|---|
| 1 | 打开报表 | 403,无权限 |
| 2 | 刷新页面 | 同样返回 403 |
| 3 | 换入口链接 | 仍是同一账户权限不足 |
| 4 | 准备继续换选择器 | 没有新证据,应停止并交回人工 |
这不是原作者的运行轨迹,也没有调用模型。
你可以用一段轨迹解释系统为什么停下来。成功是错误没有被继续放大,而不是模型自动修好了所有问题。
- 不能由模型自己解除熔断。
- 禁止把登录失败理解成可以绕过身份验证。
- 停止后仍要核对是否已有副作用发生。
- 你能说明输入来自哪里、哪些字段会参与处理。
- 你保留了原始记录及不确定、失败和人工修改的结果。
- 你能区分本地练习、作者演示与自己真实调用后的测试。
来源边界:依据所列公开来源整理;本站未复现演示。分类结果需人工复核,不会自动执行。
最大步数设置了,还需要语义判断吗?
Section titled “最大步数设置了,还需要语义判断吗?”硬限制保证上界;语义判断可能更早发现无效路径,但需要评测误停与漏停。
停止是不是一定说明模型失败?
Section titled “停止是不是一定说明模型失败?”可能是输入、权限、网络或环境变化。给出具体观察,不简单归因。