# LangGraph 时间旅行教程：从同一检查点分叉两份受众草稿

## 本轮实际范围

已真实运行 checkpoint history、update_state 与后续执行，原快照保留，两个固定草稿可逐字比较；未调用模型。

## 起步

```bash
python3 verify.py
```

## 1. 运行一个确定性的原始图

安装 requirements 后运行 run.py。prepare 固定三项事实，draft 根据 audience 拼接草稿；本题验证状态分叉，不伪装成大模型改写。

```bash
python3 -m venv .venv
.venv/bin/python -m pip install -r requirements.txt
.venv/bin/python run.py
```

## 2. 查看完整状态历史

通过 get_state_history 找到 next 为 draft 的快照，保存 checkpoint_id。不要选择任务已经结束的最新状态后盲目期待所有节点重跑。

## 3. 只更新目标受众

以选中快照的 config 调用 update_state，把 audience 从开发者改成运营。facts 保留 60 分钟、12 台设备、4 人，不因受众变化改写数据。

## 4. 沿分叉配置继续执行

使用 update_state 返回的新 config 调用 invoke(None, fork)。读取 branch.md；原始 original.md 和原快照都保留，不把分叉解释为覆盖旧历史。

## 5. 对照两个输出的差异

两份草稿应该只有受众标签不同，三项事实逐条相同。本机已实际执行并把结果存入 result.json，不使用虚构 checkpoint ID。

```bash
python3 verify.py
```

## 6. 运行历史保护负例

脚本重新读选中原快照，audience 仍必须是开发者；若直接改原对象导致原快照变化就失败。对用户而言时间旅行不是撤销已经发生的外部操作。

## 7. 需要模型时另记生成证据

可扩展模型节点为两类受众写不同语言风格，模型调用与状态校验分开记录。本包只证明真实框架分叉，没有证明某个模型生成了两篇成文。

## 官方来源

https://docs.langchain.com/oss/python/langgraph/use-time-travel

## 提醒

参考文档、卡片、JSON和图片都明确标注人工或离线范围；没有实际调用的模型不提供假成功结果。占位配置不是可用凭据。
