<!-- title: Agent持久化执行六栈实测 -->

## Agent持久化执行六栈实测：从checkpoint到事件溯源的崩点续跑全账

### 概述

跑通一个Demo，Agent能在第3步漂亮地调用工具；推到生产，它死在第7步。2026年横扫业界的判断很残酷——企业级AI Agent部署有近七成在上线第一年内宣告失败，而崩点几乎清一色落在多步工作流的"中段"：一次外部API抖动、一次容器滚动更新、一次人在回路审批的8小时延迟。这把行业的注意力从"哪个框架更易上手"硬生生拽到了一个更底层的问题上：**Agent的执行能不能像数据库事务一样，崩了之后从断点无损续跑、且不重复副作用**。这就是"持久化执行（Durable Execution）"成为2026年Agent可靠性核心命题的原因。

本文不重复框架横评，而是把六栈放到同一台"崩溃测试台"上：LangGraph的节点checkpoint、Temporal的事件溯源、Restate的日志化函数、DBOS的Postgres事务、OpenAI Agents SDK的Session记忆、CrewAI Flows的结构化state。我们只问三件事：崩溃后能否从精确断点续跑？续跑时会不会重复扣款/重复发信？人审中断8小时后能否无缝恢复？

### 六栈持久化执行能力对照表

| 栈 | 持久化范式 | 最小续跑粒度 | 续跑副作用安全 | 人审中断续跑 | 时间旅行 | 侵入度 | 生产成熟度 |
|------|------|------|------|------|------|------|------|
| **LangGraph** | 节点Checkpoint | 超步(节点) | 需手动保证幂等 | 原生interrupt | 原生fork/get_history | 中 | 高 |
| **Temporal** | 事件溯源重放 | Activity | 确定性重放保证 | Signal+Timer | 历史查询(非fork) | 高 | 极高 |
| **Restate** | 日志化Journal | run()调用 | 自动replay | Awakeable | 有限 | 低 | 中(新锐) |
| **DBOS** | PG事务Checkpoint | step() | 自动(基于PG) | 外置Timer | 有限 | 低 | 中 |
| **OpenAI Agents SDK** | Session记忆 | 会话Turn | 无执行边界保证 | 手动 | 无 | 极低 | 中 |
| **CrewAI Flows** | 结构化State | Flow Step | 弱 | 有限 | 无 | 低 | 中 |

一句话读懂这张表：**只有Temporal和Restate/DBOS把"重放安全"做进了运行时；LangGraph把能力交给你，OpenAI Agents SDK和CrewAI则根本不在这一层**。下面逐栈拆解。

---

### 一、两大范式之争：Checkpoint快照 vs 事件溯源重放

在比较具体框架之前，必须先看透底层只有两种范式，它们决定了续跑时副作用的命运。

**Checkpoint快照式**（LangGraph、DBOS为代表）的思路是"定期存盘"：每个执行边界（节点/步骤）完成后，把当前完整状态序列化写盘。崩溃后从最近快照恢复，继续往后跑。优点直观、实现轻；致命弱点在于——**快照只能告诉你"走到哪了"，不能告诉你"已经对外做过什么"**。如果你的第5步已经扣了款但快照还没落，崩溃重试就会重复扣款；如果快照已落但下游邮件系统实际没收到，续跑又会跳过这封邮件。一句话：checkpoint存的是"状态"，不是"已发生的副作用契约"。

**事件溯源重放式**（Temporal、Restate为代表）的思路截然相反——"记下每一步发生了什么"。它把每次外部调用（Activity/run()）的结果作为事件追加进一条不可变日志。崩溃后，引擎重放这条日志：对已记录结果的事件直接返回缓存值，**绝不真正重新执行**；只有未完成的步骤才会真正执行。这就天然保证了"已扣款的绝不重扣"。

```python
# Temporal：重放语义——同一个charge在崩溃重试时不会被二次执行
@workflow.defn
class OrderWorkflow:
    @workflow.run
    async def run(self, order):
        await workflow.execute_activity(charge, order)   # 已记录→重放跳过
        await workflow.execute_activity(send_email, order) # 未完成→真正执行
```

理解了这条分水岭，后面六栈的差异就只是这两条路的工程化程度不同。变现角度看，这套"重放安全"心智模型是当前最高溢价的训练营主题——因为它直接对应企业最痛的"扣错款/发错信"事故，能把一节通用框架课从199元卖到1990元的客单。

---

### 二、LangGraph：把持久化能力交给你，但不替你背书

LangGraph是六栈里把"持久化"做到最细粒度的Agent框架。它的核心抽象是`thread_id`+checkpointer：图每执行完一个节点（一个"超步"），就把整张图的状态序列化进checkpointer。崩溃后用同一个`thread_id`重新`invoke(None)`，就从断点续跑。

```python
from langgraph.checkpoint.postgres import PostgresSaver
graph = builder.compile(checkpointer=PostgresSaver(...))
cfg = {"configurable": {"thread_id": "order-7"}}
graph.invoke(None, config=cfg)   # 崩溃恢复：从最近checkpoint续跑
```

它还有六栈里最强的**时间旅行**能力：`get_state_history`能倒查每一步的历史状态，`update_state`能从任意历史节点fork出一条新分支重跑——调试"到底哪一步把状态带歪了"时几乎是神器。HITL也是原生的：节点上挂个`interrupt()`，流程挂起等人审，几小时后恢复继续。

但LangGraph的软肋正是范式带来的：它默认你是个**清醒的工程师**。checkpoint存的是图状态，工具调用是否幂等、外部副作用是否可重放，全部是你自己的事。官方文档点破：LangGraph的"durable"程度**取决于你怎么建模task、side effect和thread identity**。一个没做幂等的扣款工具，在崩溃重试时照样会重复执行——框架不会拦你。所以LangGraph是"能力完备但责任自负"，适合有能力自己设计幂等契约的团队，而不是开箱即用的兜底。

---

### 三、Temporal：把重放安全写进引擎，代价是与LLM的非确定性硬碰硬

如果"绝不重复副作用"是红线，Temporal是六栈里唯一能把这话写进契约的引擎。它来自Uber的十年生产打磨，核心是**事件历史+确定性重放**：工作流函数本身必须是纯函数（不能用墙钟、不能直接调外部），所有副作用必须包成Activity。崩溃恢复时引擎重放事件历史，对已完成的Activity直接返回记录值。

```python
@workflow.defn
class OrderWorkflow:
    @workflow.run
    async def run(self, order):
        await workflow.execute_activity(charge, order, 
            start_to_close_timeout=timedelta(seconds=10),
            retry_policy=RetryPolicy(maximum_attempts=5))
        # charge完成后崩溃→重放时跳过，绝不二次扣款
```

它的生产成熟度是六栈天花板：支持跨进程跨机器恢复、长任务可以跑几天甚至几周、Signal机制让长流程里的人审和外部回调都能无缝嵌入。但代价同样高昂——**确定性约束与LLM的天生非确定性正面冲突**。LLM的输出不可复现，而Temporal要求重放时工作流逻辑必须产生完全相同的调用序列。实践中必须把"调用LLM"整体包进Activity（让它的输出成为不可变事件，而非可变逻辑），这本身需要一套设计纪律，新手极容易踩坑。结论：要企业级durability、要扛住金融级副作用，Temporal是终点；但要为陡峭的学习曲线和确定性心买单。

---

### 四、Restate：代码即持久化的新锐，低侵入是杀手锏

Restate代表2026年最值得关注的工程方向——**把持久化执行做成"几乎零侵入"的代码注解**。你写一个普通函数，用`ctx.run("name", fn)`标记每一步，Restate自动给它套上journaling：每步结果写入日志，崩溃重放时自动跳过已完成步骤。它不要求函数确定性（重放靠日志而非重算），也不要求你重写架构——函数照样能被当作HTTP/gRPC服务调用。

```ts
@restate.service
export default {
  async process(ctx: restate.Context, order) {
    const charged = await ctx.run("charge", () => charge(order));   // journaled
    await ctx.run("email",   () => sendEmail(order));                // journaled
    // 崩溃重放：两步若已完成→直接返回缓存，绝不重发
  }
}
```

它还内置**Awakeable**原语：可以让流程挂起，等一个未来的外部回调（人审、第三方webhook）把结果推回来再继续，且这整段挂起是durably持久化的，重启不丢。相比Temporal，Restate的侵入度低一个量级、上手快、TS/JS原生，特别契合前端全栈团队给Agent加"崩溃兜底"。短板是生态新、生产案例还在积累、多语言支持不如Temporal广。但就"最小代价给Agent装上事件溯源"这件事，Restate是2026年性价比最高的赌注。

---

### 五、OpenAI Agents SDK + DBOS：会话记忆到执行持久化的拼图

OpenAI Agents SDK本身只提供**Session级记忆**——内置保存对话历史，跨turn保持上下文，省去手动拼`to_input_list()`。这解决的是"上下文连续"，**不是**"执行续跑"。SDK对"崩溃后从第7步续跑、不重复副作用"没有原生承诺，Session也只是消息列表的持久化。

```python
# SDK原生：只是会话记忆，崩溃续跑不保证
result = await Runner.run(agent, "处理订单", 
    session=session)  # 存的是对话历史，非执行边界
```

要补上"执行持久化"这块，2026年的标准答案是外挂DBOS——一个**把Postgres当唯一真相源**的轻量持久化执行引擎。DBOS官方直接给了OpenAI Agents SDK的集成：用`@dbos.workflow()`包住Agent主流程，用`@dbos.step()`标记副作用步骤，崩溃后基于PG事务日志自动续跑、跳过已完成步骤。

```python
@dbos.workflow()
def run_agent(self, prompt):
    draft = dbos.step(lambda: Agent().run(prompt))   # durably journaled
    dbos.step(lambda: send_email(draft))             # 崩溃重放跳过
    return draft
```

这个组合的价值在于：你保留了SDK"上手极简"的开发体验，又用DBOS拿到了Temporal级别的执行可靠性，且全程只用一个Postgres、事务一致性天然成立。适合"已经用OpenAI Agents SDK写好了Demo、现在要上生产"的团队做最小改造。变现上，"把SDK原型改造成生产级Agent"是当下咨询市场的高频付费需求。

---

### 六、CrewAI Flows：结构化State很顺手，但replay是软肋

CrewAI的Flows把多Agent编排做成了声明式管线，`FlowState`是一个你自定义的结构化对象，在`.and_then()`串联的步骤间流转并持久化。这给多Agent协作场景提供了清晰的状态骨架——每个step拿到上游state、产出新state，整体可序列化落库。

```python
class OrderState(FlowState):
    items: list
    total: float
flow = (Flow(start=fetch)
        .and_then(checkout)
        .and_then(ship))
flow.kickoff(inputs={"items": [...]})  # state在步骤间持久化
```

但CrewAI的持久化停留在**"存一个state对象"的粒度**，缺乏事件溯源式的重放保证。崩溃续跑时，它恢复state继续往后跑，可如果第3步的`checkout`已经发了外部请求，续跑可能既漏掉又重复，取决于你自己在step里写的幂等逻辑——框架不兜底。时间旅行、细粒度replay这些能力基本缺席。结论：CrewAI Flows在"多Agent编排的顺手程度"上很强，但在"执行可靠性"这个维度上是六栈里最薄的，适合短链路、对副作用重复容忍度高的场景，长程生产链路要慎选。

---

### 七、选型红线：replay边界与幂等三问

抛开品牌，落到工程决策，所有选型都收敛到三个问题，建议在动工前先回答：

1. **续跑时会不会重复外部副作用？** 若你的链路含扣款、发信、下单这类不可逆操作，必须选事件溯源系（Temporal/Restate）或自己严格做幂等。Checkpoint系（LangGraph）和Session系（SDK/CrewAI）默认不兜底。
2. **人审中断能撑多久？** 若流程需要在"等用户8小时审批"期间安全挂起，Temporal的Signal/Timer、Restate的Awakeable是原生解；LangGraph的interrupt够用；SDK/CrewAI需自建。
3. **崩溃点有多深？** 若链路只有3步、每步<30秒，Session记忆+简单重试就够，别上重型引擎；若动辄几十步、跨数小时，没有事件溯源就是赌命。

---

### 六栈持久化执行工作流架构

```text
flowchart TB
    Req[Agent请求 / order-7] --> RT{执行运行时}

    subgraph CP[Checkpoint快照范式]
        direction TB
        LG[LangGraph 节点checkpoint]
        DB[DBOS PG事务step]
        LG & DB -->|存:完整状态快照| Snap[(状态快照库)]
    end

    subgraph ES[事件溯源重放范式]
        direction TB
        TP[Temporal Activity]
        RS[Restate ctx.run]
        TP & RS -->|追加:不可变事件| Log[(事件日志)]
    end

    subgraph MEM[记忆范式 - 非执行边界]
        SDK[OpenAI Agents SDK Session]
        CR[CrewAI Flows State]
        SDK & CR -->|存:对话/状态对象| Sess[(会话库)]
    end

    RT --> CP
    RT --> ES
    RT --> MEM

    Snap --> Crash{崩溃恢复}
    Log --> Crash
    Sess --> Crash

    Crash -->|续跑:可能重复副作用⚠️| CP
    Crash -->|重放:跳过已完成步骤✅| ES
    Crash -->|仅恢复上下文,不保证续跑| MEM

    Crash --> Side[外部副作用<br/>扣款/发信/下单]
    Side -.重放安全.->|绝不重复| ES
    Side -.需自保幂等.-> CP
    Side -.不兜底.-> MEM
```

---

### 推荐方案

- **金融/电商长程链路（含扣款）**：Temporal打底，LLM调用全部包成Activity，副作用零重复。这是唯一能过审计的答案。
- **全栈团队给Agent加崩溃兜底、求低侵入**：Restate，几行`ctx.run`注解即可拿到事件溯源，TS/JS原生，性价比最高。
- **已用OpenAI Agents SDK写好原型、要上生产**：SDK + DBOS组合，保留开发体验，用PG事务补执行可靠性，改造量最小。
- **需要细粒度调试和时间旅行、团队有工程纪律**：LangGraph，原生fork/get_history + HITL interrupt，但幂等契约自己写。
- **多Agent协作但链路短、副作用可容忍重复**：CrewAI Flows，编排顺手胜过一切。
- **极简聊天Agent、无不可逆操作**：OpenAI Agents SDK原生Session足矣，别过度工程。

一句话收尾：2026年Agent框架的胜负手，已经从"谁更易上手"转移到了"谁的执行能扛住崩溃"。持久化执行不是框架的附加题，而是Agent从Demo走进生产的最后一公里工程。

## 参考来源
1. [Durable Execution for AI Agent Runtimes: Checkpointing, Replay, and Recovery — Zylos Research](https://zylos.ai/research/2026-04-24-durable-execution-agent-runtimes/) — 持久化执行作为Agent可靠性核心层的范式定义与收敛方向
2. [Temporal vs LangGraph (2026): Durable Agent Architecture — Cordum](https://cordum.io/blog/temporal-vs-langgraph) — "失败发生在第7步而非Demo"，checkpoint与事件溯源在Agent架构上的对垒
3. [LangGraph vs OpenAI Agents SDK vs PydanticAI (2026) — Open TechStack](https://open-techstack.com/blog/langgraph-vs-openai-agents-sdk-vs-pydanticai-2026/) — 三框架持久化、handoff、MCP与评估能力的实战对比
4. [Mastering Flow State Management — CrewAI Docs](https://docs.crewai.com/en/guides/flows/mastering-flow-state) — CrewAI Flows结构化state的持久化与流转机制
5. [Sessions: Built-in Session Memory — OpenAI Agents SDK](https://openai.github.io/openai-agents-python/sessions/) 与 [OpenAI Agents SDK | DBOS Docs](https://docs.dbos.dev/integrations/openai-agents) — SDK会话记忆机制与DBOS执行持久化集成方案

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