<!-- title: 自主智能体35分钟墙：目标漂移 -->

自主智能体正在两条相互背离的曲线上狂奔。基准曲线上，METR 测得前沿模型可独立完成的任务时长（人类专家同等耗时、50% 成功率）每 4–7 个月翻一倍，从 2025 年初 Claude 3.7 Sonnet 的约 50 分钟，飙到 2026 年中"一条提示撑起 14 小时"的量级。生产曲线上，几乎所有部署团队撞上同一堵墙：连续自主运行约 35 分钟、累计约 1000 次工具调用后，智能体开始静默退化——不报错、不崩溃，只是逐渐答非所问。这堵"35 分钟墙"不是模型能力问题，而是**目标漂移（goal drift）与上下文腐烂（context rot）的复合利息**在基准测试的洁癖环境里被刻意抹掉、却在真实噪声里加倍计提。本文把这层"续航"鸿沟拆开量，给出可落地的目标锚定、子智能体交接、漂移 SLO 三套对策。

## 一、续航标尺：METR 的 50% 时间跨度律

衡量一个自主智能体能"撑多久"，METR（Model Evaluation & Testing Research）给出的不是 token 数、不是步数，而是一个反直觉的量——**任务完成时间跨度（task-completion time horizon）**：以人类专家完成该任务所需的真实时长为刻度，取智能体能以 50% 成功率独立完成的那一档时长。换句话说，若人类专家要 1 小时搞定的活，模型独立做下来有五成把握成，则它的续航标尺就是 1 小时。

这条标尺的惊人之处在于它**指数增长**：原始论文测得每约 7 个月翻倍，2026 年的复测把速率上修到约 4 个月。把它套到时间轴上，能算出每个代际的"理论续航"：

```python
# Estimate agent autonomy horizon under METR's observed doubling law
import math

def horizon(months_since_2019, h0=8.0, doubling=7.0):
    # h0 ~ 8 min baseline (~2019, GPT-3 era); doubling period in months
    return h0 * (2 ** (months_since_2019 / doubling))

for label, m in [("2022-11 ChatGPT", 36),
                 ("2025-02 Claude 3.7 Sonnet", 74),
                 ("2026-06 (now)", 90)]:
    print(f"{label:24s} -> {horizon(m):6.1f} min @ 50% success")
# Claude 3.7 lands ~50 min, matching METR's measured value.
```

理论上，到 2026 年中前沿模型应能"一条提示跑满 14 小时"。但这是**基准续航**——在 METR 精心清洗过的任务集上、单线程、无外部噪声、目标一成不变。把它当采购指标，是这场讨论里最大的坑。

## 二、35 分钟墙：基准续航与生产续航的鸿沟

生产环境的真实曲线是另一副面孔。多家部署团队的遥测指向同一个拐点：连续自主运行越过约 35 分钟，或累计工具调用越过约 1000 次，任务失败率开始陡升，质量滑坡不是线性而是悬崖式。这就是"35 分钟墙（the 35-minute cliff）"。

为什么基准 50 分钟、生产 35 分钟会同时成立？关键在于**退化起点 ≠ 完成终点**。METR 的 50% 跨度衡量的是"能不能整个做完"，35 分钟墙衡量的是"质量从哪一刻开始掉"。两者并不矛盾：智能体在第 35 分钟开始走神，但惯性还能撑到第 50 分钟勉强交差——而第 35 到 50 分钟这 15 分钟产出的，恰恰是最容易埋雷的部分。生产环境比基准多了三样基准刻意剔除的东西：**目标的隐式漂移、上下文里堆积的无关中间产物、以及副作用工具带来的不可逆状态污染**。这三样一旦叠加，35 分钟墙就会从基准的"软拐点"变成生产的"硬悬崖"。

把这条鸿沟量化成一句话：**自主智能体的真实续航，约等于基准续航打六到七折，再被任务噪声二次惩罚。** 谁按基准续航去排产、去承诺 SLA，谁就会在第三十五分钟集体翻车。

## 三、退化三象速查表

| 退化现象 | 触发阈值 | 内在机理 | 典型症状 | 首选对策 |
|---|---|---|---|---|
| **35 分钟墙** | 连续自主 ~35 min | 注意力/指令保真随步数衰减 | 后段步骤质量悬崖式下滑 | 子智能体交接、预算熔断 |
| **上下文腐烂** | 累计 ~1000 次工具调用 | 历史中间产物稀释目标信号 | 该读的记不住、该舍的删不掉 | 摘要下沉、上下文卸载 |
| **目标漂移** | 跨长上下文累积 | 上下文压力悄然改写目标 | "做完了，但答非所问" | 目标锚定、周期重锚 |

三者并非独立——上下文腐烂放大目标漂移，目标漂移触发无效的副作用调用，副作用又污染状态、加速撞墙。所以对策必须**成体系**，单点修补收益有限。

## 四、千次调用后的上下文腐烂

上下文腐烂（context rot）是目标漂移的燃料。机理很朴素：上下文窗口不是越满越好，而是越满越烂。每一次工具调用的返回、每一段中间推理，都会往窗口里塞进与当前子目标**相关性递减**的内容。当这些"历史沉积物"累积到一定密度，原始目标在整个注意力分布里的权重被稀释，模型开始把旧上下文里某个偶然细节当作新目标，或对真正的目标指令"视而不见"。

研究给出量化拐点：上下文质量随输入 token 增长呈**结构性退化**，而非缓慢线性下降；约在累计 1000 次工具调用附近进入快速劣化区。这解释了为什么"再加点上下文"往往是反效果——你以为在帮它，其实在加速腐烂。对策的核心不是"放更多"，而是**周期性下沉与卸载**：把已完成的子任务产物摘要后移出主窗口，只保留目标锚点与当前待办。

```python
# Treat endurance as an SLO: cap continuous context, force compaction+reanchor
def agent_step(state):
    state.calls += 1
    # the empirically observed rot threshold ~1000 tool calls
    if state.calls % COMPACTION_EVERY == 0 or state.tokens > ROT_BUDGET:
        state.history = compact(state.history, keep=[state.goal_anchor,
                                                     state.current_subtask])
        state.calls = 0          # reset the rot clock on a clean window
    return act(state)
```

注意：压缩本身要谨慎——暴力截断会把目标也一起截掉，这正是"继承式漂移"的温床。压缩的保底规则只有一条：**目标锚点永不移出窗口。**

## 五、目标漂移：答非所问的"静默退化"

目标漂移是三者里最阴险的——它**不报错、不崩溃、日志全绿**。一个智能体可以一路绿灯跑完 50 步，最后交付一个技术上无懈可击、却完全偏离原始意图的产物。AAAI AIES 的《Evaluating Goal Drift in Language Model Agents》与 arXiv 2505.02709 把它定义为：智能体行为随执行推进，**渐进式偏离人类最初设定的目标**，且偏离过程对常规日志不可见。

为什么难抓？因为漂移不是某一步"做错"，而是目标在长上下文里被悄然**改写**。一段中间上下文里反复出现的某个实体、某次工具返回里夹带的强信号，会慢慢变成模型眼里的"真正目标"。当人类事后核对，看到的每一步都"合理"，拼起来却是另一个故事。livleavitt/goal-drift-study 与 Anchor Research 这类长期智能体安全项目，正专门围绕它产出检测工具与评测协议。

把它和"继承式漂移"做个切割：后者聚焦的是**跨上下文窗口的文本输出漂移**（同一模型在不同上下文压力下输出风格/内容的偏移，已有多模型横评覆盖）；本文谈的是**自主执行过程中的目标语义漂移**——前者是输出层的表征问题，后者是执行层的意图保真问题，对策栈完全不同。

## 六、漂移可量化：三种漂移与漂移分数

好消息是，漂移不再只是体感。arXiv 2601.04170《Agent Drift: Quantifying Behavioral Degradation in Multi-Agent LLM Systems》把生产中的行为退化拆成**三类可测漂移**，并给出可计算的漂移分数（drift score）框架，让"越跑越歪"第一次有了刻度：

- **目标漂移（Goal drift）**：偏离原始意图，可用"目标向量与各步行动向量的余弦相关"滑窗均值衡量；
- **分布漂移（Distribution drift）**：行动/工具选择分布相对基线偏移，可用 KL 散度衡量；
- **性能漂移（Performance drift）**：同等难度子任务成功率随时间下滑。

```python
# Lightweight goal-drift score: embed original goal, score step relevance
def drift_score(goal_vec, step_vecs, window=20):
    sims = [cosine(goal_vec, v) for v in step_vecs]
    drift = [1 - s for s in sims]                 # higher = more drifted
    # rolling window mean -> smooths transient dips
    return moving_average(drift, window)

# Wire it as a runtime check; alert before silent miss becomes a delivery
if drift_score(GOAL_VEC, recent_steps) > 0.40:
    raise GoalDriftExceeded(grounding_required=True)
```

理论分析表明，这三类漂移可在被检出后**显著削减**漂移相关错误，前提是部署了持续的漂移监测而非事后抽检。一句话：漂移必须像 P99 延迟一样被当作**运行时指标**盯，而不是上线前评测一次了事。

## 七、对策一：目标锚定与周期重锚

最朴素也最有效的续航延长术，是把目标从"开头说一次"改成"周期性重锚"。机理直白：上下文腐烂稀释目标权重，那就在固定步频把目标重新钉回窗口顶部。重锚不是简单复读，而是**带着进度做状态化注入**——告诉智能体"原目标是 X，已完成 Y，当前应聚焦 Z"，既抵消腐烂，又顺带校正已发生的轻微漂移。

```python
# Countermeasure 1: periodic goal re-grounding every N steps
GOAL = state.original_goal
for step in agent_loop():
    if step.n % RE_GROUND_EVERY == 0:
        step.inject(GOAL_ANCHOR_PROMPT.format(
            goal=GOAL,
            completed=step.completed_subtasks,
            current=step.current_subtask))
    step.forward()
```

工程上的关键变量是 `RE_GROUND_EVERY`（重锚步频）。太密则浪费 token、打断思路；太疏则在两次重锚之间漂移已经发生。经验起点是"每约 15–25 步或每当上下文压缩后"重锚一次，并让重锚频率随累计调用数**反向缩短**——越接近腐烂拐点，锚得越勤。代价是 token 税温和上升，但换来的是续航曲线从悬崖变成平台，这笔账几乎总是划算。

## 八、对策二：子智能体交接与上下文重置

当单次连续运行逼近 35 分钟墙，最干净的解法不是"撑过去"，而是**主动交接**：在预算耗尽前，把当前状态摘要成一份"交接简报"，交给一个全新上下文的子智能体接棒。新智能体的窗口是干净的，没有历史沉积物，目标锚点由简报显式注入——相当于把 35 分钟墙后那一截"烂尾"直接截掉，换成一段新续航。

```python
# Countermeasure 2: hand off to a fresh-context subagent before the wall
def runner(goal):
    agent = spawn(goal=goal)
    while not goal.done:
        if agent.tokens_used > FRESH_CONTEXT_BUDGET or agent.calls > 1000:
            brief = agent.handoff_brief(goal)    # state + goal + next step
            agent = spawn_subagent(goal=goal, brief=brief)  # clean window
        agent.step()
```

这条对策的精髓是把"一个长跑智能体"重构为"一串短跑智能体的接力赛"。它天然抗上下文腐烂（每棒起点干净）、抗目标漂移（每棒重锚）、抗状态污染（交接简报只携带必要状态）。代价是**交接税**：摘要会丢信息、接棒者要重新"进入状态"、边界处可能漏掉跨段的隐式依赖。这要求交接简报设计得像一份给新人的 onboarding 文档，而非流水账——把目标、约束、已完成、待办、坑点结构化列出。这与"上下文三态交接"属于同一工程族，但此处目标是**续航延长**而非断点续传。

## 九、对策三：把续航做成 SLO 与可观测闭环

第三块拼图是把上面两套对策**制度化为运行时 SLO**，并配漂移探测闭环。生产侧的做法是给每个自主智能体定义"续航预算"：累计步数上限、累计调用上限、漂移分数阈值，三者任一触发即强制走"压缩 + 重锚"或"交接"分支，而非任其撞墙。可观测侧则把三类漂移分数接入面板，像盯延迟和错误率一样盯它。

```python
# Countermeasure 3: endurance as a runtime SLO with drift telemetry
def supervised_runner(goal):
    while not goal.done:
        s = agent.step()
        emit_metric("drift.goal",    drift_score(GOAL_VEC, s.recent))
        emit_metric("drift.distrib", kl_div(s.action_dist, BASELINE))
        if s.drift > 0.40 or s.calls > 1000 or uptime_min(s) > 35:
            if s.calls > 1000 or uptime_min(s) > 35:
                agent = handoff(goal, s)      # near the wall -> fresh context
            else:
                agent = compact_and_reanchor(goal, s)  # mild drift -> re-ground
```

这套闭环的回报是：把"什么时候智能体会答非所问"从玄学变成可告警的工程事件。原生追踪（trace/span）够你回答"它调用了什么"，却回答不了"它是不是还在做对的事"——漂移分数补的正是这一层。把它和现有的工具调用追踪、token 预算熔断拼到一起，自主智能体的"续航工程"才闭环。

## 自主智能体续航工作流

```mermaid
flowchart TD
    A[原始目标 Goal] --> B[主智能体 Loop]
    B --> C{累计调用 >1000<br/>或 运行 >35min?}
    C -- 否 --> D{漂移分数 >0.40?}
    D -- 否 --> E[正常推进]
    E --> F{步数 % 重锚周期 ==0?}
    F -- 是 --> G[目标锚定重注入<br/>带进度状态化]
    F -- 否 --> B
    G --> B
    D -- 是 --> H[压缩+重锚<br/>历史下沉 目标留窗]
    H --> B
    C -- 是 --> I[生成交接简报<br/>目标+完成+待办+坑点]
    I --> J[spawn 子智能体<br/>干净上下文窗口]
    J --> B
    B --> K{Goal.done?}
    K -- 否 --> B
    K -- 是 --> L[交付]
    M[漂移遥测面板<br/>Goal/Distrib/Perf 三分] -.监控.-> D
```

整张图的核心思想：**把"一条长线跑到底"重构为"被持续监控、周期重锚、到点交接"的闭环**。目标锚定对抗日常腐烂，子智能体交接对抗 35 分钟墙，漂移 SLO 对抗静默退化——三者缺一，续航曲线都会在某个拐点重新塌成悬崖。

## 推荐方案：按场景配续航栈

- **短任务（<15 分钟、<200 调用）**：不必上重锚或交接，单智能体直跑即可。35 分钟墙够不到你，漂移分数几乎不涨。把工程预算留给别处。
- **中等任务（15–60 分钟）**：**目标锚定**为必选，重锚周期按累计调用反向缩短；**漂移分数**接入告警，阈值 0.40 起步。这一档最容易被"基准续航"误导——看着 50 分钟能跑，实际第 35 分钟已开始烂。
- **长任务（>1 小时 / 多会话）**：三套全上，并把交接简报设计成结构化 onboarding 文档。这是"一条提示撑 14 小时"基准续航唯一可能落地的工程前提——没有交接和重锚，14 小时是基准的，不是你的。
- **多智能体长链**：在上述基础上额外盯**分布漂移**，因为多智能体之间的行动分布偏移会通过消息传递放大，是目标漂移的二次诱因。

一句话收尾：自主智能体的竞争力，2026 年起越来越不取决于"模型多强"，而取决于**续航工程做得多扎实**——谁能把 35 分钟墙推到 3 小时、把漂移从玄学变成告警，谁就拿到了自主智能体的真实生产门票。

## 参考来源

1. [Measuring AI Ability to Complete Long Tasks — METR](https://metr.org/blog/2025-03-19-measuring-ai-ability-to-complete-long-tasks/) — 提出"50% 任务完成时间跨度"指标及每约 7 个月翻倍的续航律
2. [Task-Completion Time Horizons of Frontier AI Models — METR](https://metr.org/time-horizons/) — 跨代际模型续航标尺的持续追踪数据（2026 更新）
3. [Evaluating Goal Drift in Language Model Agents — AAAI AIES](https://ojs.aaai.org/index.php/AIES/article/view/36541) — 目标漂移的定义、检测方法与实验（含 arXiv 2505.02709 技术报告）
4. [Agent Drift: Quantifying Behavioral Degradation in Multi-Agent LLM Systems — arXiv 2601.04170](https://arxiv.org/abs/2601.04170) — 三类漂移（目标/分布/性能）的量化与漂移分数框架
5. [Context Rot in Production: Why AI Agents Degrade After 1,000 Tool Calls](https://agentmarketcap.ai/blog/2026/04/09/agent-state-accumulation-degradation-context-window-memory-drift) — 生产环境千次调用拐点与"35 分钟墙"的遥测观察

---

*51学通信原创 · AI智能体实战分析（第2轮：自主智能体续航与目标漂移）· 站长爱卫生 微信：gprshome201101*

> [!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)
