AI Agent 何时继续、重试或停下?设计运行中的循环护栏
用可观察的进展、分开的轮次与成本预算、错误分类和写入去重规则,决定 Agent 每一步是继续、重试、换路径还是交给人。
所属问题主题Agent 架构与协作↗先带着一个真实任务阅读,再完成页面中的工作台。能让另一位同事复核你的产物,才算完成本课。
一旦决定采用 Agent,仍然要回答更细的问题:看到这一步的工具结果后,下一步值得做吗? 一次循环可能顺利推进,也可能只是重复搜索、等待坏掉的接口,甚至把已经生效的写入再做一次。停止规则必须在运行中发挥作用,而不是等事故发生后才翻手册。
本页处理的是单次运行里的继续、改道、暂停与停止。固定工作流还是 Agent负责选择控制方式;工具调用契约规定单个工具怎样执行;恢复手册用于中断后的影响盘点与恢复。本页把这些约束应用到连续的每一步。
先定义完成证据,再判断是否有进展
不要用“模型觉得快完成了”表示进展。为当前任务写出可以从外部核对的完成证据,例如找到两份在指定日期内有效、来源不同的资料,或看到目标系统中出现唯一的预约编号。每一步还要记录上一次观察以后,证据集合究竟增加了什么、哪个阻碍被消除了。
对于只读研究,可把进展定义为新增的合格来源、被排除的错误假设,或问题范围的有效缩小。对于写入任务,进展是目标系统确认的状态变化,而不是模型又发出一条请求。相同查询反复返回相同内容,既没有新证据也没有改变计划,就应标为“无进展”;相同查询在资料更新后返回新证据,则不能仅凭调用名称相同认定卡死。
把四种预算分开记账
| 预算 | 计量单位 | 到线后的动作 |
|---|---|---|
| 模型轮次 | 本次运行中的模型调用次数 | 不再请求下一轮推理;输出已有证据与缺口 |
| 工具尝试 | 每项具体操作的尝试与重试次数 | 对该操作停止自动重试,改查状态或交人 |
| 实际时间 | 从启动到当前的经过时间,包括等待 | 到截止时暂停新动作,保存可复核结果 |
| 用量与费用 | 模型请求、输入和输出 token,另记外部工具费用 | 在剩余额度不足以完成下一步时停止或请人扩额 |
这些数值由业务自己决定,没有通用的“安全重试三次”。OpenAI Agents SDK 的 max_turns 限制模型循环轮次,不能代替每个工具的重试上限;其 usage 记录模型用量,也不自动包含所有外部工具账单。模型调用超时、工具调用超时和整项任务的截止时间也不是同一件事。若运行可以暂停再继续,预算必须累计,不能每次恢复都从零开始。
写护栏时同时写软提醒和硬上限。例如到预算的某个预警点,先检查剩余工作是否仍值得做;到硬上限则保存证据并停止新动作。具体数字应从试验案例、延迟要求和可接受成本倒推,而不是照抄框架默认值。
让每次观察进入同一张决策表
先问“任务是否已按验收标准完成”,完成就退出。未完成时,检查四类信号:新的可验证进展、错误能否通过同一操作的有限重试消除、下一动作是否可能产生重复外部效果,以及预算是否还允许这一步。建议把结果归入以下路径:
| 观察到的状态 | 下一动作 |
|---|---|
| 有新证据,且下一步仍在授权和预算内 | 继续,并写下预期的新观察 |
| 只读工具出现短暂的限流或网络故障 | 在单工具上限内等待后重试;记录本次尝试 |
| 参数无效、资料明确不存在或权限被拒 | 修正输入、换路径或停止;原请求不做原样重试 |
| 同一输入与同一结果重复,任务证据没有变化 | 至多尝试一次有理由的新路径;无新路径则停下 |
| 写入超时,远端是否生效不明 | 先查询权威状态;仍不明就暂停并交给负责人 |
| 需要人工批准、接近硬上限或已到截止时间 | 不再启动新动作;提交证据、剩余问题和明确请求 |
暂时性错误与永久性错误不能混作“再试一次”。重试应指向同一项可安全重复的操作,带退避、次数和时间限制;整条任务从头重跑可能重复已经完成的步骤。真正的无进展也未必表现为错误码,所以要比较输入指纹、工具观察和任务证据,而不能只统计异常。
在副作用不明时,把重复写入关在循环外
读操作和写操作的重复风险不同。执行写入前保存业务对象、参数指纹、操作标识和预期结果;工具返回后记录已确认、明确失败或未知。若写入请求超时,Agent 不能把“没收到答复”当成“没有生效”。先按操作标识查询目标系统。只有证实未执行,或目标系统确实保证同一标识的安全重放,才可能再次提交。
Temporal 的文档说明,外部动作可能已经完成,执行者却在回报成功前中断,随后被重新执行。它也说明幂等键必须由被调用的服务落实。因而“我带了一个键”不是防重证明;还要知道键的作用域、保存时长和参数改变后的行为。该检查与单工具契约配套,但循环控制必须在每次实际下一步重新执行它。
案例一:区域市场扫描重复搜索
研究助理 Agent 需要找到某城市近一年的两份独立公开资料,支撑一份进入市场的简报。第一次搜索找到两篇合格报告;第二轮换了关键词,却仍只拿到同一两篇。第三轮又提出内容相近的查询。此时没有新增来源、没有排除新假设,也没有缩小问题;模型说“还在研究”不算进展。
团队在试验中可设示例上限:最多六次模型调用、每类搜索最多两次无新证据尝试,达到时间或费用上限就停。达到无进展条件时,Agent 保留两篇已核验资料,列出仍缺的竞争者或销量证据,向研究负责人提出一个可回答的缩小范围问题。它不应为了填满简报而编造第三个来源。复核者能从轨迹看出,每次搜索为什么可能带来新信息,以及为什么最终停止。
案例二:活动名额预约出现未知结果
社区活动助手为一位已批准报名的参与者预约工作坊名额。它发出一次预约写入后,连接超时。名额可能已经占用,也可能完全没有写入。循环里的下一步不是再发一次预约,而是用活动编号、参与者编号和该次操作标识查询预约状态。
如果目标系统确认已有唯一预约,任务完成;若明确没有记录且操作仍在有效期内,可按工具契约决定是否安全重试。如果查询仍不确定,Agent 暂停,把请求时间、参数、操作标识、查询结果和可能的通知状态交给活动负责人。负责人核对后再决定。这个案例的测试应覆盖预约成功但响应丢失、明确拒绝、限流、重复请求和审批过期,确保“未知”不会在下一轮被误判为“失败”。
用失败用例检查护栏是否真的生效
至少运行六类模拟:连续两轮相同搜索结果、读取工具限流、永久无效参数、写入后响应丢失、批准尚未到达、总用量先于模型轮次触顶。每个案例记录实际动作与预期动作,并由另一位同事检查停止时留下的材料。尤其要检查预算是在恢复后继续累计,还是错误地重新放行。
工作台的最小记录应包含任务完成证据、当前进展差异、四种预算、上次操作指纹、外部效果状态、允许的下一步、停止原因和接手人。它不是另写一份事故报告;它要让当前循环的下一次动作可以被许可或阻止。若要在结束后找出一次运行首次偏离验收条件的位置,使用逐事件轨迹复核表对齐提议动作、实际工具请求和权威结果。
常见问题
只设置最大轮次够吗?
不够。一个模型轮次可能包含多次工具调用,工具也可能在某轮内反复尝试。还要分别限制具体操作、实际时间和用量;接近上限时要输出已知事实及未完成部分。
停下是否表示任务失败?
未必。正确停止可以是“证据不足,交人缩小范围”,也可以是“外部效果未知,暂停防止重复”。要把部分结果和未知状态如实交付,而不是强行生成完整答案。
不适用边界
循环护栏不能替代底层工具的权限与幂等实现,也不能自动判断所有业务错误是否可重试。高影响动作仍需独立审批。若外部系统无法核查写入结果,应保持停止并交给有权人员;不要因为运行预算尚有余额,就继续尝试产生同类外部效果。
核验来源
这篇内容参考了哪些一手资料?
来源用于核对定义、风险边界或操作事实;判断框架和工作台由 AI Vista 独立编写。
- Anthropic Engineering — Building effective agents核验于 2026-10-01
- OpenAI Agents SDK — Running agents核验于 2026-10-01
- OpenAI Agents SDK — Usage核验于 2026-10-01
- Temporal documentation — Activity definition and idempotency核验于 2026-10-01
AI 工具可能协助研究、提纲和语言编辑;事实、案例和最终措辞由编辑复核。发现错误请通过联系页提交更正。
可带走的工具
Agent 运行时循环护栏表
依据可核验进展、分项预算与外部效果状态,决定下一步。
- 01写任务摘要用脱敏摘要写明要交付的结果。
- 02补齐判断字段写清输入类别、风险、证据位置和接手方式。
- 03交给同事复核对方能复述结论,工具才算完成。
本课已读
完成工作台,再标记已读。
已读状态会更新课程目录与学习进度。
- 01字段齐全
- 02案例走过
- 03可以复核
文章实践笔记
读到这里,留下一条可复核的判断。
下方虚构示例展示写法;你的笔记只保存在当前浏览器。记录哪一步有效、哪个边界不成立,或一个值得测试的问题。
这篇文章还没有示例或本机笔记。你可以记录第一条具体观察。