01Bread Agent · 第 8 章
总进度 8 / 33

会话持久化(JSONL)

现在的 messages 只保存在内存里,退出 Python 后就没有了。要在下次启动时继续,需要把这份历史写入文件,再加载回来。

2026-09-28约 40 分钟470 行代码难度 ★★★

如果想获取全套课程资料,请关注微信公众号 「AI面包君」,回复 「课程资料」 即可领取。

1. 关掉程序后,下次接着聊

现在的 messages 只保存在内存里,退出 Python 后就没有了。要在下次启动时继续,需要把这份历史写入文件,再加载回来。

这一章加入保存和读取会话,让你可以分两次启动程序,检查上下文是否恢复。

操作入口采用 / 开头的命令,也叫 slash 命令。它们由本地程序处理,不会当作问题发给模型。例如 /save 保存会话,/load 读取会话;/list 可以查看已经保存的记录。

/save 工作笔记       # 把当前对话存到 sessions/工作笔记.jsonl
/load 工作笔记       # 把对话读回来,agent 从断点继续聊
/list                # 列出所有保存过的会话

底层格式是 JSONL(一行一个 JSON),不是一整个大 JSON。

写文件本身不复杂,需要留意的是保存时机:如果工具请求只处理到一半,保存下来的历史可能缺少对应结果,恢复后就无法继续调用。

<!-- bread-visual:start -->

让对话过夜:内存 → 文件 → 内存

图解: JSONL 每行一条消息,保存的是对话历史。 “/命令”由程序本地处理;/list 用来查看已经保存的会话。

<!-- bread-visual:end -->

2. 跑起来

cd ch07_session
python main.py

试这个流程(分两次启动 Python 来验证持久化):

第一次启动

你 > 列出当前目录文件
AI > [切换到非流式模式获取工具调用...]
  [hook:log] 即将调用 list_dir 参数={}
AI > 当前目录包含:

- 📁 `__pycache__/`
- 📄 `agent.py`
- 📄 `hooks.py`
- 📄 `main.py`
- 📄 `README.md`
- 📄 `session.py`
- 📄 `tools.py`

你 > /save 我的笔记
已保存 5 条消息 → sessions\我的笔记.jsonl

你 >
再见!

image-20260606230219558

第二次启动

python main.py

你 > /list
可用会话: 我的笔记

你 > /load 我的笔记
已加载 5 条消息。

你 > 刚才那个目录里第一个文件叫什么
AI > 第一个文件是 `agent.py`(如果把 `__pycache__` 目录也算上,那它排在最前面)。

image-20260606230338281

第二次启动是新的 Python 进程,原来的内存已经不在。此时还能接上对话,是因为 /load 从文件中重新读回了消息。


<!-- bread-practice:start -->

试读到这里 · 后续内容已封存

关注公众号,继续把这章学完

在「AI面包君」发送关键词「学习AI」拿到口令。验证一次,这个浏览器就能继续阅读全部课程。