<!-- title: 长跑即迷：自主体漂移四栈实测 -->

## 概述

把自主体从"30步内跑完"的演示，推向"30小时不崩"的长时域（long-horizon）实战，是2026年Agent落地的真正分水岭。本期横向实测四套主流自主体运行栈——LangGraph、OpenHands、AutoGen、Mini-SWE-Agent（最小自研Loop）——在同一个长跑任务下的**目标漂移**、**上下文腐烂（context rot）**与**中断恢复**表现。核心发现：超过六成（65%）的实战失败并非模型能力不足，而是长跑过程中自主体"忘了自己在干嘛"；而能把任务从崩溃点接续完成的，全部依赖一个被低估的原语——**可重放的检查点**。100行代码的Mini-SWE-Agent能在SWE-bench Verified拿到74%，恰恰证明长跑自主体缺的不是花架子，是工程纪律。

## 对比表格：四栈长时域表现横评

| 维度 | LangGraph | OpenHands | AutoGen | Mini-SWE-Agent（自研Loop） |
|------|-----------|-----------|---------|---------------------------|
| 长时域核心策略 | 节点级Checkpoint | 事件流Event Stream重放 | 对话状态内联 | 全量历史回放，无状态外置 |
| 漂移对抗 | 状态Schema强约束 + 显式状态 | 事件裁剪 + 上下文压缩 | 弱（状态混入消息） | 靠prompt + 短期窗口 |
| 中断恢复粒度 | 任意节点可断点续跑 | 事件回放重建完整内存态 | 需自建快照 | 重跑或自管快照 |
| 生产Checkpoint采用率 | ~92%生产部署启用 | 内建，默认开 | 需自建 | 无 |
| SWE-bench Verified通过率 | 框架不参与打榜 | 72% | 框架不参与打榜 | 74%（100行代码） |
| 上手成本 | 中（概念多） | 中低（一个loop） | 中（多Agent） | 极低（100行） |
| 变现/训练营可包装度 | ★★★★ 企业级首选 | ★★★★ 开源标杆 | ★★★ 多Agent叙事 | ★★★ 极简哲学卖点 |

## 深度分析

### 一、漂移病灶：六成长跑失败率从哪来

长时域自主体的头号杀手不是模型蠢，是模型"走神"。多份2026年实战复盘指出，约**65%的企业级Agent失败可归因于上下文漂移（context drift），而非原始模型能力**。漂移的机理很朴素：自主体每执行一步，上下文就膨胀一截——工具返回、中间推理、试错记录全部堆进历史。当历史超过某个阈值，模型的注意力被"稀释"，原本清晰的目标被噪声淹没，于是出现三类典型症状：**重复调用已完成的工具**、**忘掉最初的验收标准**、**在错误的子问题上死磕**。Chroma的"Context Rot"研究测试了18个模型，证实输入越长、准确率越低，即便模型声称支持百万token窗口——这是"窗口大"与"窗口内全能"的本质区别。所以长跑自主体拼的不是谁的上下文长，而是谁在长跑中**保持目标清晰**。判断一个栈能不能打长跑，第一个问题就该问：它的漂移对抗机制是什么。

### 二、LangGraph：检查点优先的存活术

LangGraph把"状态"从模糊的对话流里抽出来，做成**一等公民**：每个节点有一个强类型State Schema，每次转移都生成一个Checkpoint存进Checkpointer（内存/Redis/Postgres皆可）。这套设计让它在生产环境被广泛采用——有数据指出**约92%的生产LangGraph部署启用了某种形式的检查点**以维持对话连续性。漂移对抗上，强Schema本身就是约束：你无法在状态里偷偷塞进无关字段，自主体"走神"的物理通道被收窄。中断恢复是它的强项：崩溃后`graph.invoke(None, config)`传一个`thread_id`，从最近的Checkpoint继续，不需要从头跑。

```python
# LangGraph 断点续跑的核心：thread_id 绑定一条可恢复的执行轨迹
from langgraph.checkpoint.postgres import PostgresSaver
graph = builder.compile(checkpointer=PostgresSaver.from_conn_string(DB))
config = {"configurable": {"thread_id": "job-7713"}}
# 崩溃前跑了一半，重连后自动从最近 checkpoint 接续
result = graph.invoke({"task": "修复登录bug"}, config)
```

缺点是概念税重（Channels、Reducers、Threads、Checkpointer），新人容易在"为什么要Reducer"上卡壳。训练营包装价值高：企业级、可审计、可恢复，是甲方最爱听的三个词。

### 三、OpenHands：事件流重放的"录像机"

OpenHands（前身OpenDevin，AllHands维护）走的是另一条路——**不存"状态摘要"，存"事件流"**。自主体执行的每一步（思考、动作、观察）都作为不可变事件追加到一个EventStream里，状态是事件流在任意时刻的"投影"。这意味着两件事：第一，崩溃恢复本质是**重放事件流重建内存态**，类似数据库的WAL；第二，上下文压缩可以无信息损失地做——原始事件永远在，压缩只是当前视图。这让它能在SWE-bench Verified拿到**约72%**，且GitHub星标超70K、累计融资1880万美元。它跑的是完整自主循环（含浏览、终端、文件编辑），长跑能力内建而非外挂。

```python
# OpenHands 哲学伪代码：状态 = reduce(events)，恢复 = 从头重放
state = initial_state
for event in event_stream[start:]:      # 崩溃点之后的事件
    state = reducer(state, event)        # 重建到当前
agent = Agent(state)                     # 从重建态继续
```

优点是可重放、可审计、压缩无损；缺点是事件流会无限增长，磁盘与重放开销随任务时长线性上升，超长任务需要配合事件归档策略。

### 四、AutoGen：状态混进对话的代价

AutoGen擅长多角色对话（用户Agent、助手Agent、评论者Agent），但它的"状态"长期是**隐式地塞在消息历史里**的——谁说了什么、决策到哪一步，全靠你从一长串消息中"读"出来。这对短任务无伤大雅，对长跑是慢性中毒：随着消息堆积，关键决策被埋在数百轮对话深处，模型每次都要"翻完聊天记录"才能确认自己在哪一步，漂移由此加剧。AutoGen没有内建的可恢复Checkpoint，断点续跑需要开发者自己把对话快照序列化到外部存储，恢复时再灌回去——而这个"灌回去"往往无法保证语义等价（消息顺序、缓存策略、tool call id都对齐很难）。结论：**AutoGen在长跑任务上是四栈里最吃力的**，它适合短而密的协作对话，不适合"30小时无人值守"。如果一定要用它跑长任务，必须在外层套一层自管的Checkpoint+压缩，等于把别的栈的活自己重写一遍。

### 五、Mini-SWE-Agent：100行复刻74%的启示

SWE-agent团队的反讽之作：Mini-SWE-Agent用**约100行代码**，在SWE-bench Verified上拿下**约74%**，比复杂的OpenHands脚手架还高两个点。它在GitHub的Tagline直接发问——"我们在2014年建了SWE-bench和SWE-agent，引爆了coding agent革命；现在我们想问，当初那套复杂里有多少是必要的？"。这条数据对长跑自主体的选型是当头一棒：**漂移和崩溃，常常是过度工程自己造出来的**。越多的中间层、越复杂的状态机、越花哨的"记忆模块"，反而制造了越多让自主体走神的噪声表面。Mini-SWE-Agent的纪律很朴素：一个清晰的Agent Loop、一个干净的工具集、一个明确的停止条件。它没有花哨Checkpoint，但因为没有冗余状态，重跑成本极低。给我们的启示是：**长跑自主体的第一步不是加功能，是减熵**——先把Loop写干净，再决定要不要上Checkpoint和压缩。

```python
# Mini-SWE-Agent 的极简 Loop 骨架（示意）
while not done and steps < MAX_STEPS:
    obs = view()                      # 看当前文件/错误
    action = llm(PROMPT, obs, history) # 决定下一步
    result = run(action)              # 执行
    history += [(action, result)]     # 只记必要轨迹
    done = check_goal(result)         # 明确停止条件
```

### 六、压缩即续命：上下文compaction三式

长跑绕不开上下文体积，而体积一涨，rot就来。当前主流的compaction有三种范式：**摘要式压缩**（让模型把旧历史总结成几句话塞回去，实现简单但有损，可能丢关键细节）、**检索式剔除**（把历史转存向量库，只保留最近窗口+按需召回，无信息损失但召回质量决定成败）、**结构化外置**（把可重算的中间结果——工具输出、检索片段——用引用占位符替代，需要时重算/重取，OpenHands和Codex系倾向于这条）。值得注意的是，OpenAI于2026年2月5日发布的**GPT-5.3-Codex在compaction上做了关键扩展**，被视为让长跑coding agent真正可用的一步。对长跑自主体而言，compaction不是优化项，是**生存项**——一个不做压缩的自主体，长跑时上下文必然触顶，触顶那一刻就是漂移的拐点。选型时该问的不是"支不支持压缩"，而是"压缩有没有信息损失、损失的部分能不能从外部源恢复"。

### 七、中断恢复：从崩溃点继续 vs 从头再来

把六和前面合起来看，长跑自主体的成败最终压在一个判断上：**任务中途崩了，能不能从崩溃点接着干**。四种栈给出四种答案。LangGraph：能，任意节点Checkpoint，传thread_id续跑。OpenHands：能，事件流重放重建态。AutoGen：勉强，需自建快照且语义等价难保证。Mini-SWE-Agent：默认不能，但因为干净，重跑代价低。这里藏着一个被忽视的成本账：很多团队上了Checkpoint却**从不演练恢复**，等到真崩溃才发现Checkpoint写坏了、版本对不上、状态缺字段——恢复比重跑还贵。**长跑自主体的可靠性 = Checkpoint质量 × 恢复演练频率**，二者缺一不可。这也是为什么"最小可恢复单元"比"最大上下文窗口"更该成为长跑设计的第一指标：先保证能停下来、能接上去，再谈跑多远。

## Mermaid架构图：长跑自主体存活循环

```mermaid
flowchart TD
    A[长跑任务启动] --> B[Agent Loop: 思考-行动-观察]
    B --> C{上下文体积超阈值?}
    C -->|否| D[继续执行]
    C -->|是| E[Compaction 压缩<br/>摘要/剔除/外置]
    E --> D
    D --> F{目标漂移检测<br/>重复调用/标准遗忘?}
    F -->|检测到漂移| G[重注入目标 + 回滚最近步]
    G --> B
    F -->|正常| H[写 Checkpoint/事件]
    H --> I{崩溃/超时?}
    I -->|否| J{达到验收标准?}
    J -->|否| B
    J -->|是| K[任务完成]
    I -->|是| L[从最近 Checkpoint 恢复]
    L --> M{Checkpoint 完好?}
    M -->|是| B
    M -->|否| N[降级: 重跑或人工介入]
    style C fill:#fff3cd
    style F fill:#fff3cd
    style I fill:#f8d7da
    style H fill:#d4edda
```

## 推荐方案

**企业级长跑（合规可审计）**：首选 **LangGraph**。强Schema + 92%生产Checkpoint采用率 + thread_id断点续跑，满足甲方对"可中断、可恢复、可追溯"的全部要求。务必把Compaction做在节点转换处，并定期演练恢复。

**开源自主coding/工程长跑**：首选 **OpenHands**。事件流重放是四栈里唯一无信息损失的恢复范式，72% SWE-bench Verified证明其自主循环的成熟度。适合需要浏览/终端/文件编辑的开放式长任务，注意配事件归档策略。

**学习/极简起步**：从 **Mini-SWE-Agent** 的100行Loop开始。先用它跑通一个长任务，感受漂移和触顶，再决定要不要加Checkpoint——"先减熵再加固"，避免一上来就被框架概念税淹没。

**明确避开**：用AutoGen跑"30小时无人值守"。它的状态隐式内联在对话里、无内建可恢复Checkpoint，是四栈里长跑最吃力的。短而密的多角色协作才是它的主场。

**通用长跑纪律**（与栈无关）：①明确停止条件，否则自主体永不收敛；②Compaction做在状态转换处而非上下文将爆时；③Checkpoint必须演练恢复，写得出≠接得上；④把"最小可恢复单元"看得比"最大上下文窗口"更重。

## 参考来源

1. [Agent Context Engineering 2026: Sliding Windows, Hierarchical Memory](https://agentmarketcap.ai/blog/2026/04/11/agent-context-engineering-sliding-windows-memory-2026) — "65%企业级Agent失败源于上下文漂移而非模型能力"的核心数据出处
2. [Long-Running Autonomous Agents: Drift, Checkpointing, Recovery](https://dikrana.dev/blog/long-running-autonomous-agents/) — 长跑自主体漂移、检查点、恢复机制的实战复盘
3. [OpenHands vs SWE-agent (2026): SWE-bench Scores Compared](https://localaimaster.com/blog/openhands-vs-swe-agent) — OpenHands 72% / Mini-SWE-Agent 74% 的对比数据
4. [GitHub: SWE-agent/mini-swe-agent](https://github.com/SWE-agent/mini-swe-agent) — "100行AI Agent"项目原文，对复杂度必要性的反问
5. [Context Rot: How Increasing Input Tokens Impacts LLM Performance (Chroma Research)](https://www.trychroma.com/research/context-rot) — 18模型测试，输入越长准确率越低的"context rot"研究
6. [LangGraph Checkpointing and Persistence Guide](https://langgraphjs.guide/persistence/) — "92%生产部署启用检查点"及Checkpoint/Thread机制说明

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