展开本页目录
开始前准备什么
- 将练习包解压到独立目录,不覆盖已有项目或真实业务资料。
- 先运行本包校验并查看实测范围,再按官方文档使用自己的软件、账号与准确版本。
- 需要真实模型的步骤只使用自己的 Key,截图与下载包不包含凭据。
- 固定框架和持久化版本
- 第一进程处理一份资料
- 确认不是内存保存
- 第二进程恢复同一线程
- 核对三份结果顺序
- 检查错误线程负例
- 保存重跑与模型边界
原创输入、运行脚本、字段校验、负例和执行范围;不含可用密钥。
已真实用两个独立 Python 进程运行 SQLite 检查点恢复,并核对三份材料无重复与错误线程空状态;没有调用模型。
对应正文的具体资料,保持输入可追溯。
验证字段与负例;不能代替未执行的软件或模型。
明确区分材料验证、框架执行和模型调用。
1. 固定框架和持久化版本
安装 requirements.txt,注意 SqliteSaver 来自独立 langgraph-checkpoint-sqlite 包。只在本目录创建 checkpoints.sqlite,不连接你已有业务数据库。
bash
python3 -m venv .venv
.venv/bin/python -m pip install -r requirements.txt2. 第一进程处理一份资料
运行 prepare,图在 first 节点之后暂停。prepare.json 应只包含课程安排.md;检查点写到磁盘后 Python 进程实际退出。
bash
.venv/bin/python run.py --phase prepare3. 确认不是内存保存
在目录看到 SQLite 文件,并检查原进程已经结束。InMemorySaver 不支持这个跨进程示例,不能用它替代 SqliteSaver 截图。
4. 第二进程恢复同一线程
重新启动 Python,加载同一图、数据库与 course-materials-01,使用 invoke(None, config)。它从 second 继续,不重新处理 first。
bash
.venv/bin/python run.py --phase resume5. 核对三份结果顺序
resume.json 的 processed 必须依次为课程安排、器材清单、验收规则,长度和去重后都为 3。跨进程实际日志保存在 result.json。
bash
.venv/bin/python verify.py6. 检查错误线程负例
脚本同时查询 another-thread,必须得到空状态。换 thread_id 是新任务,不是恢复原检查点;错误线程不应偷偷复用旧结果。
7. 保存重跑与模型边界
无参数运行 run.py 会清除本目录练习 DB 并完整执行两个子进程;该命令只用于重做本例。所有材料处理是固定字符串,尚未调用摘要模型。
bash
.venv/bin/python run.py怎样确认已经完成
- 脚本同时查询 another-thread,必须得到空状态。换 thread_id 是新任务,不是恢复原检查点;错误线程不应偷偷复用旧结果。
- 无参数运行 run.py 会清除本目录练习 DB 并完整执行两个子进程;该命令只用于重做本例。所有材料处理是固定字符串,尚未调用摘要模型。
- 已真实用两个独立 Python 进程运行 SQLite 检查点恢复,并核对三份材料无重复与错误线程空状态;没有调用模型。
常见问题
SQLite 文件存在就证明恢复成功吗?
还不够。要退出第一个进程,用同一 thread_id 从第二个进程恢复,并检查最终材料数与去重结果。
LangGraph checkpointer 保证外部写操作只执行一次吗?
不能直接这么说。检查点保存图状态,外部副作用仍要按 durable execution 规则设计幂等与任务边界。



