自主智能体最难的不是"做",而是"停"。2026 年学界与工程界形成共识:终止判定(termination logic)是被低估的头号设计难题,其影响力压过模型质量与提示词工程。自主智能体在终止上存在两个相反方向的塌方——早停税(premature exit,任务没做完就宣称完成)与滑翔税(thrashing,原地空转烧 token)。两者之间没有静态最优解:max_iterations 设低会被硬顶截断好任务,设高会让坏任务空转到天荒地老。本文拆解 OpenHands、SWE-agent、Atropos、AgentExit、EET/AgentStop 等当前主流终止机制的代价结构,给出按场景选型的判定框架。
| 策略 | 机制 | 触发信号 | 早停税风险 | 滑翔税风险 | 实现复杂度 | 典型代表 |
|---|---|---|---|---|---|---|
| 硬顶截断 | 固定迭代上限 | 步数 == 上限 | 高(截断好任务) | 低(强制止血) | 极低 | OpenHands max_iterations_per_run、SWE-agent max_steps |
| 自主 finish | 模型显式输出终止动作 | 模型自判完成 | 高(过早宣称done) | 中(依赖模型自觉) | 低 | OpenHands finish action、ReAct Finish |
| 无进展/环路检测 | 状态指纹或动作序列去重 | 连续重复 | 低 | 低 | 中 | SWE-agent loop detection、自定义 hash 滑窗 |
| 预测式早停 | 训练分类器预测成败概率 | P(成功) < 阈值 | 中(需校准) | 极低(提前止血) | 高 | Atropos(+热替换 SLM) |
| 终止预算可见 | 把剩余步数注入提示 | 模型看到预算 | 中 | 中 | 低 | OpenHands 提案 #2406 |
| HITL 审批门 | 风险分级 + 人工确认 | 高危动作 | 取决于人 | 取决于人 | 中高 | Stack AI、tianpan 审批门模式 |
OpenHands 的 max_iterations_per_run 默认 500 步,挂在 ConversationState 上、在第 594 行做计数。SWE-agent 同样以固定交互步数为天花板。这是最朴素也最不可省的护栏:它保证智能体永远会停。但硬顶是一把钝刀——它对"好任务"和"坏任务"一视同仁地截断。
代价集中在一个真实的边界 bug:OpenHands 曾出现当智能体恰好在最后一步(iteration == max_iterations)调用 finish 时,execution_status 被错误置为 ERROR 而非 STOPPED/SUCCESS。这意味着终止判定机制本身在边界条件下就会误报,把一个本可成功的任务判成失败。硬顶的本质问题是步数与任务难度解耦:一个本该 80 步的任务设了 500 步上限,前 420 步都在空转;一个本该 800 步的难任务被 500 截断,永远做不完。没有"一刀切"的正确值,这就是后续所有自适应终止技术的存在理由。
让模型自己说"我做完了"(OpenHands 的 finish action、ReAct 范式里的 Finish(observation))是最自然的终止方式,但也是早停税的主要来源。CMU 的"Optimal Termination in LLM-Based Decision Support"专门研究教 LLM 何时停止收集信息、何时开始行动——这恰恰是 finish 判定的核心难点:模型往往过早收敛,在信息不充分时就宣布完成。
AgentExit(Coldmist-Lu)把这种"早退行为"(early-exit behavior)单独拎出来作为研究对象,量化了 LLM 智能体在何等条件下会草草收场。与之相对的是 VLAA-GUI 指出的 GUI 智能体两大失败模式之一正是premature task termination。自终止的悖论在于:模型越聪明、越自信,早停风险在某些场景反而越高——它"觉得"自己懂了。这跟你另测过的"自验证假通过"是同源异象:验证器被俘获是 finish 的质量问题,过早 finish 是 finish 的时机问题,两者合力制造了大量"看起来完成了其实没完成"的灰色产出。
# 自终止的可信化:finish 不应只信模型的"done",要交叉验证
def should_finish(state):
if not state.agent_emits_finish():
return False
# 早停税对冲:模型说done时,要求至少一个外部信号佐证
return (state.tests_pass()
or state.goal_achieved_probe()
or state.no_unresolved_subgoal())
滑翔税的另一头是thrashing——智能体卡在测试失败里反复横跳,改一行、跑测试、失败、再改、再失败。codex.danielvaughan 在 2026 年 6 月的早停策略文章里给出的经验判据很直白:"一个在测试失败里反复折腾 80 轮的会话,通常说明任务范围被划得太大了。" 这意味着 thrashing 往往不是模型笨,而是任务分解的终止判定缺位——本该在 80 轮前就触发"任务过大,回退重分解"。
工程上用状态指纹或动作序列去重来检测环路:对最近 N 步的 (action, observation_hash) 计算指纹,重复超过阈值即判定卡死。SWE-agent 内置了环路检测。更阴险的是 LoopTrap 攻击——通过"终止投毒"(termination poisoning)让智能体忘记如何停止,既可逼它过早退出返回残缺结果,也可逼它无限滑翔烧光预算。这把"无进展检测"从优化项变成了安全防线:没有环路检测的自主智能体,其终止判定在对抗条件下是可被远程操控的。
# 极简无进展检测:动作指纹滑窗
from collections import deque
class ProgressGate:
def __init__(self, window=8, dup_thresh=3):
self.win, self.thresh = deque(maxlen=window), dup_thresh
def observe(self, action, obs):
fp = hash((action, str(obs)[:200]))
self.win.append(fp)
# 同一指纹出现 >= thresh 次即判卡死
if self.win.count(fp) >= self.thresh:
return "THRASHING"
return "OK"
Atropos(ISSTA 2026,COINSE 实验室)是目前终止判定最前沿的工程答案。名字取自希腊神话中"剪断生命之线"的命运女神 Atropos,意涵精准。它的核心是预测式早停 + LLM 热替换:在 self-consistency(自洽性多次采样)流程中,训一个轻量预测器实时估计"当前轨迹是否大概率会失败";一旦预测失败概率超过阈值,立刻提前终止这条轨迹,并把后续推理热替换(hotswap)到更便宜的小语言模型(SLM)上重试,而非让昂贵的大模型一路空跑到失败。
aimodels.fyi 汇总的实测结论是:Atropos 在多个基准上把总计算成本降低 40-60%,同时保持准确率不降。这个数字说明一件事——滑翔税不是边际成本,而是主流成本:默认配置下有将近一半的算力花在了注定失败的轨迹上。Atropos 的代价是工程复杂度高(预测器训练 + 在线热替换 + 状态迁移)和对预测器校准的依赖:预测器若系统性悲观,会复活早停税。它是把"二选一的税"转化成了"一个可校准的概率阀门"。
OpenHands 提案 #2406 提出一个被长期忽视的点:max_iterations 这个上限对模型自身是不可见的。模型不知道自己还剩多少步,就无法做"我快到顶了,该收尾了"的规划。把剩余迭代数注入系统提示,是成本近乎为零、收益明确的终止增强——它让模型的 finish 判定从"我觉不觉得做完"变成"在剩余预算内我能不能做完"。
这背后的原理是预算约束下的终止再规划。无预算可见时,模型倾向于要么过早 finish(早停税),要么无限探索(滑翔税);给了可见预算后,模型会自发地在预算中段收敛。代价是模型可能"知道还有 400 步就故意磨洋工"或"知道只剩 5 步就草草交差"——即预算信息本身会改变模型的终止分布。这是终止判定里少有的"信息即干预"现象,需要配合阈值告警而非单纯暴露原始数字。
arXiv 2606.08162 指出一类更隐蔽的终止问题:无外部触发的静默失败(silent failure)——智能体既没有 finish、也没有撞 max_iterations、也没有进入显式环路,而是"熵增"式地缓慢失效,产出看似正常实则错误的结果。这类失败不触发任何终止判定,因为现有机制都在检测"显式停止信号",而静默失败的特征恰恰是没有停止信号。
熵原理意味着终止判定不能只盯"该不该停",还要盯"产出是否在可信熵窗口内"。工程对策是引入产出健康度探针:对最终输出做一致性、可验证性、子目标覆盖率的多维打分,低于阈值的即便模型已经 finish 也要拉回继续。这把终止从"一次性决策"升级为"持续监控的可信度曲线",是对早停税最彻底的对冲,也最贵。
当自动终止判定都不够稳时,最后一道闸门是人。tianpan、Stack AI、Boundev 等给出的模式高度趋同:风险分级 + 审批门 + 断点续跑。把智能体的动作按破坏力分级——只读、本地写、对外副作用(发邮件、付款、删数据),只有高危动作才触发 pause,路由给人工确认后再 resume。
这本质上是把终止判定从"停/不停"二元化,扩展为"继续 / 暂停 / 终止"三态。审批门的代价是中断税:自主性的全部价值在于"无人值守",每加一道门就削掉一份自动化收益。最优策略不是无差别加门,而是只对不可逆副作用加门——一个只读探索的智能体空转 500 步是钱的问题,一个有发邮件权限的智能体空转 500 步是公关灾难。终止判定在这里与副作用幂等性(你此前测过的"邮件发两遍")正面交汇:副作用越不可逆,终止判定越要前置到"动手之前"。
把以上七点压成一张成本图,自主智能体的终止判定始终在两条税线之间走钢丝:
而判定机本身也有税:预测器训练、环路 hash 滑窗、健康度探针都在每一步消耗算力,即使任务本会顺利结束。Atropos 用 40-60% 的成本节省证明,在大多数场景下"判定机税"远小于"滑翔税"——值得交。但在简单、短任务上,判定机税反而是净亏。这就是为什么选型必须按场景,而非按框架名气。
flowchart TD
A[Agent 每步执行] --> B{步数 == max_iterations?}
B -->|是| H[硬顶截断 STOPPED]
B -->|否| C{模型主动 finish?}
C -->|是| D{产出健康度探针过关?}
D -->|是| L[结束 SUCCESS]
D -->|否| E[拉回继续]
C -->|否| F{无进展/环路命中?}
F -->|是| G[强制终止 THRASHING]
F -->|否| I{预测器 P成功 < 阈值?}
I -->|是| J[Atropos 早停 + 热替换 SLM]
I -->|否| K{下一步是高危副作用?}
K -->|是| M[HITL 审批门]
M -->|批准| A
M -->|拒绝| N[终止 REJECTED]
K -->|否| A
按任务特征分层选终止策略,是当前最务实的工程结论:
一句话结论:自主智能体的成熟度,不取决于它能跑多少步,而取决于它在正确的那一步停下来——而正确的那一步,永远是早停税与滑翔税的交点。把这个交点显式建模出来(预算可见 + 无进展检测 + 预测早停 + 健康度探针的四件套),就是 2026 年终止判定工程的标准答案。
[!tip] 51学通信知识星球 星主:爱卫生(微信:gprshome201101)——公众号「51学通信」创办者,19 年通信行业运维与讲师经验,著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书(各大电商平台有售)。 星球定位:深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域,主打运维岗位与信令分析。 当前规模:5200 篇主题 / 990 个回答,198 元/年。 加入福利:加入星球后请加爱卫生微信,拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题,另有群内分享。 AI 加持:51学通信知识星球已作为 skill 接入 WorkBuddy,使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例,做总结、找文档和 PPT 等场景全覆盖。
