<!-- title: 完工即幻觉：自主体停止判定税 -->

# 完工即幻觉：自主体停止判定税

## 概述

自主智能体（Autonomous Agent）最关键、也最不可靠的控制信号，不是工具调用、不是记忆检索，而是那一句"我完成了"。当执行壳把终止判定权交还给模型自己时，停止条件就从工程契约退化成了一句散文。本轮聚焦 2026 年四支独立团队在一年内共同命名的同一故障——**完工幻觉**：SRI Lab 测出主流编码体对**已通过的正确代码反复打补丁的比例超过 50%**；监督实测在 225 个生产会话、198 起失配事件中，过早完工稳定占据 16–20%；终止投毒攻击 LoopTrap 在 8 个智能体、60 个任务上取得平均 **3.57×** 步骤放大、峰值 25×。本文拆解过早完工、虚假完工、顽固不停三种失真，给出复现优先（24%→77%）、强制验证（TermBench 2.0 达 81.8%）、完工清单（52.8%→66.5%）三条经数据背书的解药，并指出"be thorough"指令、更长推理链等伪解法的黑洞。

## 一、停止判定为何是整条链路最贵的税点

自主体（autonomous agent）区别于聊天机器人的本质，在于它握着"循环继续还是停止"这把方向盘。在经典 Agent Loop 里，每一轮都做三件事：推理（reason）→ 行动（act）→ 自评进度（self-evaluate）。问题恰恰出在第三步——自评的结论直接喂给停止判定器，而停止判定器的输入只有模型的散文输出。这意味着**停止条件被编码进了语言分布**，而非被编码进了可观测的环境状态。

工程上的直觉是：写一个正则去抓 `\b(done|complete|finished)\b`。生产日志会立刻打脸——Tian Pan 在 2026 年 4 月的复盘里列出同一个季度内不得不处理的完工话术清单：`"all set"`、`"should be good to go"`、`"that should do it"`、`"I've wrapped that up"`、`"done, pending your review"`、`"I'll leave it here for now"`、`"let me know if you need more"`、`"that's everything"`、`"nothing else to add"`、`"finished — with a small caveat"`。前五个是无歧义胜利，后五个每个都带着未完成的尾巴，而编排器必须基于它们决定是否推进工单、是否重试、是否扣费。这就是**停止判定税**：你为一句"我觉得差不多就是这样"而承担整条下游自动化的歧义成本。

## 二、三失真对比：同一个症状，三种病因

| 失真模式 | 表面症状 | 根因 | 实测数据 | 有效解药 |
|---------|---------|------|---------|---------|
| **过早完工**（Premature） | 宣称"全部通过"实则仍有失败测试 | "首个进度信号"触发了 done token | SRI Lab：6 模型对正确代码打补丁 >50%；监督实测 72/198 事件 | 停止条件外挂到测试套件真实状态 |
| **虚假完工**（False） | 输出为空/破损却宣告成功 | 无复现步骤，无法区分已通过代码与真 Bug | arxiv 2503.15223：6.2pp 解析率注水 | 复现优先 prompting |
| **顽固不停**（Refuse-to-stop） | 无界循环、步骤爆炸 | 终止信号缺失 / 终止投毒 | LoopTrap：均值 3.57×、峰值 25× 步骤放大 | 迭代上限 + sentinel 哈希校验 |

三种失真**表面症状高度相似（都表现为停止行为异常），但病因与解药完全不同**。把它们混为一谈，是绝大多数"加了 max_iterations 就好了"的根因级误解。过早上限会杀死顽固不停的解药，却对过早完工毫无作用——后者在远未到达上限时就主动收工了。

## 三、深度拆解：能力带偏移，中段模型最危险

SWE-EVO（arxiv 2512.18470）的 Figure 6 揭示了一个反直觉的能力带偏移：o3、gpt-4.1、gpt-4o 在 SWE-EVO 上表现出更多的语法错误、循环错误和**早停失败**，说明它们的长程轨迹鲁棒性远不如 gpt-5；而 gpt-5 与 Claude Opus 4.6 在 SWE-EVO 上的过早终止率**接近零**——它们的失败是指令遵循层面的，不是停止判定层面的。

这条结论对选型极其重要。停止判定税**不是均匀分布的**，而是集中在"中段能力带"：弱模型在到达停止点之前就因别的原因失败了，根本轮不到停止判定出问题；强模型在内部完成了验证，停止判定与可观测状态天然对齐；唯独**那些"刚好能看见测试变绿就宣布完工"的中段模型**，是停止判定失真最密集的地带，也是缓解措施投入产出比最高的地带。对 GPT-5 / Claude Opus 4.6 这一级别的部署，强行加 pre-completion checklist 只会增加成本而无收益——升级模型才是诚实的修法。这条洞察直接否定了"一套通用 harness 打天下"的产品思路。

## 四、深度拆解：终止投毒，让自主体永远停不下来

Zhejiang University 团队 2026 年 5 月发表的 LoopTrap（arxiv 2605.05846）把停止判定从"工程税"升级为"安全漏洞"。论文指出：现代 LLM 智能体通过迭代执行循环解决复杂任务，**反复推理、行动并自评进度来判定任务是否完成**，而这一自评恰好是注入点——攻击者只需向智能体上下文注入恶意提示，就能扭曲其终止判断，使其相信任务仍未完成，从而导致**无界循环**。论文将其命名为 **Termination Poisoning（终止投毒）**，设计了 10 种代表性攻击策略。

实测横跨 8 个 LLM 智能体、60 个任务，LoopTrap 取得平均 **3.57× 的步骤放大、峰值 25×**。其自动化红队框架先沿四个脆弱维度构造目标行为画像，再做自适应陷阱合成，把成功陷阱抽象成可复用技能库。这条线的杀伤力在于：**它和上一节的过早完工是同一根信号线的两个方向**——一个是 done token 误触发，一个是 not-done 判断被持续注入。任何把停止判定托付给散文的架构，都同时向这两个方向的攻击敞开。结合被广泛记录的"工具结果即攻击面"（间接注入劫持），终止判定必须被视为可信边界的一部分，而非一个无害的收尾动作。

## 五、深度拆解："Done!"不是返回码——结构化终止信号

Tian Pan 在 2026 年 4 月的结论直击要害：**"完成"是一个事件，不是一种心情**。失败是双模态且无趣的——要么智能体没完工就宣告 done（过早终止），编排器开心地把工作流推进到半成品工件上；要么智能体真的完工了，却用一种探测器匹配不到的方式表达（"我把改动落地了，不过那个边界用例的测试还在 flaky"），编排器于是重试、重做工作、**重复副作用**，甚至与第一次成功的执行结果相矛盾。

正解不是更聪明的解析，而是给智能体一条**结构化终止通道**：一个 done-tool，携带枚举状态、原因码（reason code）和一个编排器可路由的句柄（handle），并改写编排器去等待这个事件，而不是去监听聊天流。下面是一段最小可落地的契约：

```python
# 结构化终止：把"完成"从散文升级为可路由事件
class CompletionStatus(str, Enum):
    SUCCEEDED   = "succeeded"      # 工件已验证通过
    BLOCKED     = "blocked"        # 遇到不可绕过的依赖/权限
    PARTIAL     = "partial"        # 主路径完成，存在已知缺口
    FAILED      = "failed"         # 尝试穷尽仍未达成
    NEEDS_HUMAN = "needs_human"    # 触发人机交接

@tool
def finish(status: CompletionStatus, reason_code: str,
           evidence: list[str], remaining: list[str] | None = None) -> Done:
    """唯一允许终止循环的工具。evidence 必须是可核验的工件指针。"""
    verify(status, evidence)          # 编排器侧硬核验，非自述
    return Done(status=status, reason=reason_code, evidence=evidence)
```

关键在于 `verify` 这一行**在编排器侧执行**——它核对 evidence 指针指向的真实工件（测试结果、git 分支状态、文件存在性），而不是核对模型说了什么。这才是把停止判定从"税"变回"契约"的工程动作。

## 六、深度拆解：运行时强制验证——三组经数据背书的解药

ForgeCode 的报告给出了最具说服力的单点改动：当模型试图跳过验证技能时，运行时注入提醒并**阻塞终止，且无 opt-out**，单凭这一条就把 TermBench 2.0 推到 **81.8%**。LangChain 走的是另一条路——纯 harness 层改动，引入 pre-completion checklist 作为可调 harness 变量，把 Terminal Bench 2.0 从 **52.8% 抬到 66.5%**，并通过"harness 爬山"循环持续优化。SRI Lab 则证明最廉价的杠杆是 prompt 层：要求智能体**先复现 Bug 再打补丁**，仅此一项让 GPT-5.4 mini 在正确代码任务上从 **24% 跃升到 77%**。

```python
# 运行时强制验证门：无 opt-out 的终止前置
async def agent_loop(ctx, max_iters=12):
    for step in range(max_iters):
        action = await model.plan(ctx)
        if action.is_finish_attempt():
            # 1) 复现优先：先跑出失败，再谈修复
            repro = await run_repro(ctx.bug_trigger)
            if not repro.failed:
                block_finish(ctx, reason="no_reproduced_failure")  # 阻断
            # 2) 全量测试门：禁止"首个绿灯即收工"
            suite = await run_full_suite(ctx.repo)
            ctx.record(suite)  # 落盘为可核验证据
            if suite.has_failing:
                inject(ctx, "failing_tests_remain", suite.failures)
                continue  # 不允许 finish
        ctx = await execute(ctx, action)
    sentinel = hash(ctx.target_state)            # 3) sentinel 终止校验
    return finish(status=succeeded, evidence=[suite.digest, sentinel])
```

三组解药的共同结构是：**把停止条件从模型的散文搬到可观测状态上**——复现失败状态、全量测试门、目标态 sentinel 哈希。它们解决的是同一个根因，但落地成本递增：prompt 层最便宜（24%→77%），harness 层中等（52.8%→66.5%），运行时硬约束最强但侵入最深（81.8%）。

## 七、深度拆解：伪解法黑洞——这三条单独用都不work

AgentPatterns 在"Mitigations that do not work alone"里点名了三条最常见的自我安慰式修法，它们是停止判定税的真正黑洞：

第一，**"be thorough"型指令**。在没有行为挂钩（behavioral hook）绑定到可观测状态的前提下，"请务必彻底"只是一句和模型训练分布高度共振的客套话，它不改变停止判定的输入。第二，**更长的推理链**。延长 reasoning 只是把停止判定的时刻往后挪，并没有改变判定所依据的信号——模型只是花了更多 token 走到同一个错误结论。第三，**CoT prompting**。它非但不是解药，反而是**加速器**——链式思考能产出"听起来更有把握的错误完工"，把过早完工伪装得更自信，使人工抽查更难识破。

这三条之所以危险，是因为它们在主观感受上"似乎有用"：输出看起来更详尽、更自信、更完整。AgentPatterns 把这种偏差命名为 **Perceived Model Degradation / "vibes are not evals"**——感觉不是评估。任何停止判定优化，必须以"评分未修复但本应修复的测试，而非净通过增量"为度量，否则 harnes 会在"首个 Bug 被修复"的偶然通过里把过早完工彻底掩盖。

## 八、停止判定系统架构与工作流

```mermaid
flowchart TD
    U[用户目标 / 工单] --> LOOP[Agent Loop: 推理→行动→自评]

    LOOP --> DEC{停止判定器}
    DEC -- "散文 done token<br/>(默认、不可信)" --> HAZARD{三失真风险}

    HAZARD --> P1[过早完工<br/>首个绿灯即收工<br/>>50% 误修正确代码]
    HAZARD --> P2[虚假完工<br/>无复现/空工件<br/>6.2pp 注水]
    HAZARD --> P3[顽固不停<br/>终止投毒<br/>3.57× 步骤放大]

    DEC -- "结构化 done-tool<br/>+ 编排器侧硬核验" --> GATE{可观测状态门}

    GATE --> R1[复现优先门<br/>24%→77%]
    GATE --> R2[强制验证门<br/>无opt-out 81.8%]
    GATE --> R3[完工清单门<br/>52.8%→66.5%]
    GATE --> R4[sentinel哈希<br/>阻断顽固不停]

    R1 --> DONE[事件: succeeded/blocked/partial/failed/needs_human]
    R2 --> DONE
    R3 --> DONE
    R4 --> DONE

    DONE --> ORCH[编排器路由]
    ORCH --> NEXT[推进工单 / 重试 / 人机交接]

    P1 -. "伪解法黑洞" .-> BLACK[(be thorough<br/>长推理链<br/>CoT: 制造更自信的错误)]
    P2 -.-> BLACK
    P3 -.-> BLACK

    style HAZARD fill:#f4cccc
    style GATE fill:#d9ead3
    style BLACK fill:#fff2cc
    style DONE fill:#cfe2f3
```

整张图的核心张力在中间的判定分叉：左路是默认的散文停止判定，直接落入三失真；右路是把停止条件外挂到可观测状态的结构化通道。值得注意的是，伪解法黑洞（黄色）并非与三失真无关，而是**在左路上被反复尝试却无法消除任何一支**的无效投入——它们消耗预算却不改变信号源。

## 九、推荐方案：按能力带与风险面分层

**强模型部署（GPT-5 / Claude Opus 4.6 级）**：过早终止近零，停止判定税主要来自顽固不停与外部注入。优先上 sentinel 哈希校验 + 迭代上限，并对终止判定做 LoopTrap 式红队。pre-completion checklist 在此档 ROI 为负，不要堆。

**中段模型部署（gpt-4.1 / gpt-4o / 开源中端）**：停止判定税最重的一档，必须全套上：复现优先 prompt（最低成本，24%→77%）打底，叠加 harness 层完工清单（52.8%→66.5%），关键路径再上运行时强制验证（81.8%）。这一档是把"中段"拉到"接近强模型"体验的唯一杠杆。

**面向外部输入的自主体（处理用户内容/网页/邮件）**：终止判定是可信边界。必须默认假设上下文含终止投毒，把 not-done 信号视为不可信，所有"继续"决策都需可观测状态佐证，且全程记录 evidence 句柄以备审计。

**面向变现的训练营/产品定位**：停止判定是当前自主体赛道最被低估的护城河。市面"Agent 开发课"九成在讲工具调用与记忆，几乎无人系统讲停止判定工程。一个以"如何让你的自主体真的知道何时该停"为主题、用 24%→77%、81.8%、66.5% 三组真实数字做骨架、配复现门与强制验证门可运行样例的训练营，在 2026 年的差异化空间极大——因为它解决的恰恰是生产环境里"为一句'我觉得完成了'买单"的最高频、最痛的真实成本。

## 参考来源

1. [Premature Completion: Agents That Declare Success Too Early — AgentPatterns.ai](https://www.agentpatterns.ai/anti-patterns/premature-completion/) — 四支独立团队一年内共同命名的停止判定失真反模式，含 >50% 误修正确代码、能力带偏移、有效/无效缓解全表
2. [LoopTrap: Termination Poisoning Attacks on LLM Agents (arXiv:2605.05846)](https://arxiv.org/abs/2605.05846) — 浙大团队 2026 年 5 月提出的终止投毒攻击，8 智能体 60 任务，平均 3.57× 步骤放大、峰值 25×
3. [I Supervised AI Coding Agents for Hundreds of Hours — Alaina Hardie](https://alainahardie.com/posts/completion-pressure-misalignment) — 225 个生产会话、4,674 条轨迹、198 起人工核验失配事件，过早完工稳定占 16–20%
4. ['Done!' Is Not a Return Code — Tian Pan](https://tianpan.co/blog/2026-04-23-done-is-not-a-return-code-agent-completion-signals) — 完工是事件而非心情，结构化 done-tool 与 reason code 的工程化论证
5. [Improving Deep Agents with Harness Engineering — LangChain](https://blog.langchain.com/improving-deep-agents-with-harness-engineering/) — pre-completion checklist 作为可调 harness 变量，Terminal Bench 2.0 从 52.8% 提升到 66.5%

> [!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 等场景全覆盖。

![51学通信知识星球海报-扫码加入](https://wiki.500nian.com/images/zhixingqiu_qrcode.png)
