首页 / pi-agent 入门教程 / 会话管理:保存、恢复与切换

pi-agent 入门教程

会话管理:保存、恢复与切换

本教程共 30 篇 · 第 8 篇 · 更新于 2026-08-10 · 约 8 分钟阅读

pi-agent会话session恢复切换

本节目标:搞懂 pi 的会话系统——会话存在哪、怎么自动保存、怎样恢复历史会话、如何给会话起名字、以及会话相关命令的完整用法。

会话是什么

你在 pi 里的每一次对话,pi 都会自动存成一个”会话”(session)。一个会话就是一个完整的对话记录,包含你发的消息、pi 的回复、工具调用的结果、模型切换记录等等。

会话是自动保存的,你不需要手动点”保存”。退出 pi 之后下次再进来,接着上次聊——前提是你知道怎么恢复。

会话文件存在哪

所有会话都存储在:

~/.pi/agent/sessions/

按工作目录分类组织,每个会话是一个 .jsonl 文件:

~/.pi/agent/sessions/
└── my-project/
    ├── 2026-08-10T10_30_abc123.jsonl  # 会话 1
    ├── 2026-08-10T14_22_def456.jsonl  # 会话 2
    └── 2026-08-11T09_15_ghi789.jsonl  # 会话 3
Note

JSONL 是”每行一个 JSON 对象”的格式。你可以用任何文本编辑器打开看,但一般不需要手动编辑——pi 的会话命令已经够用了。

每个会话文件内部以树状结构组织(tree structure),这意味着你可以在任意的历史节点”分叉”出新分支,旧分支的对话不会丢失。不过树结构的细节留到第 25 章再深入,这里只关心怎么用。

启动时的会话选项

每次启动 pi 都可以用命令行参数控制会话行为。以下是全部选项:

继续最近的会话

pi -c

这是最常用的场景:昨天写到一半,今天接着写。-c 会自动找到当前工作目录下最近一次会话,直接恢复。

浏览并选择历史会话

pi -r

不想直接恢复最后一次?-r 会打开一个会话选择器:

  • 搜索:直接打字就能过滤会话列表
  • Ctrl+P:切换是否显示文件路径
  • Ctrl+S:切换排序方式
  • Ctrl+N:只看有名字的会话
  • Ctrl+R:重命名选中的会话
  • Ctrl+D:删除选中的会话

选好后按回车进入。

指定具体会话

pi --session ~/.pi/agent/sessions/my-project/abc123.jsonl

完整路径、部分 ID 都可以。pi 支持 ID 的部分匹配,所以你不用记住那个长 UUID:

pi --session abc123

从某个会话分叉

pi --fork abc123

这个命令会以指定会话为基础,创建一个新会话文件。原来的会话不受影响。想从历史某个时间点”重新来过”的时候用。

给会话起名

pi --name "重构认证模块"

缩写成 -n 也行:

pi -n "重构认证模块"

起了名字的会话在 /resume 里特别显眼,比靠时间戳翻找方便太多。

临时会话(不保存)

pi --no-session

快速试个东西、问一嘴就跑——不想留痕迹,就用这个。

会话管理命令大全

进了交互模式之后,下面这些斜杠命令帮你管理会话:

命令作用什么时候用
/resume浏览并恢复历史会话想把当前对话切到另一个项目/会话
/new开始一个全新会话当前任务完了,开启一个完全无关的新任务
/name 名称给当前会话取名会话有了明确主题,给它个名字方便日后查找
/session查看当前会话信息看看存哪了、多少条消息、烧了多少 token
/fork从历史消息分叉出新会话想从某个时间点重新开始,又不想破坏当前会话
/clone克隆当前分支到新会话在继续之前做个副本,给自己留条退路
/tree打开会话树浏览器在当前会话的历史节点之间跳转
/export 文件导出会话为 HTML想分享对话记录、或者归档保存
/share上传为 GitHub Gist生成一个可分享的链接

/session——看一眼当前状态

/session

输出大概这样:

Session file: ~/.pi/agent/sessions/my-project/abc123.jsonl
Session ID:   abc123-def456
Messages:     42
Tokens:       85,432
Cost:         $0.52
Current model: claude-sonnet-4-20250514

看一眼就知道花了多少钱、聊了多少轮。出问题排查时也很实用——至少能确认用的是哪个会话文件。

/resume——切到别的会话

/resume

和启动时的 -r 一样,打开交互式的会话选择器。选好之后会替换当前会话。

/new——开个新的

/new

当前会话自动保存,然后开启一个全新的、干净的对话。适合”上一个任务做完了,开始下一个”的时候用。

/name——给会话起个好名字

/name 写登录模块的单元测试

会话名字会显示在 /resume 的列表里,取代默认的时间戳。名字越具体越好——“周三晚上改的 bug”比”修 bug”强十倍。

/tree、/fork 和 /clone 的区别

这三个命令看起来有点像,但用途完全不同。一句话概括:

命令效果比喻
/tree在当前会话文件内跳到历史节点一本书里翻回某一页,接着写
/fork从历史节点创建新会话文件复印一页到新本子上,从那里开始写
/clone复制当前分支到新会话文件整本笔记本复制一份,防止写坏

什么时候用哪个:

  • 要比较两种方案 → 用 /tree,在当前会话里分叉两条支线,方便对比
  • 想从三天前某个时间点重新来 → 用 /fork,独立文件互不干扰
  • 要做大改动、想备份当前状态 → 用 /clone,留条退路

/tree 快速上手

进入 /tree 之后,用键盘操作:

├─ user: "帮我实现登录..."
│  └─ assistant: "好的..."
│     ├─ user: "用 JWT 方案..."        ← 分支 A
│     │  └─ assistant: "JWT 实现..."
│     │     └─ user: "测试通过了"       ← 当前活跃
│     └─ user: "还是用 Session 方案..." ← 分支 B
│        └─ assistant: "Session 实现..."
操作按键
上下移动/
翻页/
折叠/展开Ctrl+←/Ctrl+→
打标签Shift+L
确认选择Enter
取消Escape
Tip

选了用户消息会把它填回编辑区——你可以修改后重新发,这会创建一个新分支。选了AI 回复或工具调用,则会直接跳到那个位置继续对话。

过滤模式按 Ctrl+O 循环切换:defaultno-tools(隐藏工具调用)→ user-only(只看用户消息)→ labeled-only(只看有标签的)→ all

导出与分享

导出 HTML

# 导出到默认位置
/export

# 导出到指定文件
/export ~/Desktop/my-session.html

适合归档或者发给同事看对话记录。

分享为 Gist

/share

这会创建一个私有 GitHub Gist 并生成分享链接。对方打开看到的是渲染好的 HTML,不需要安装 pi。

Note

要使用 /share,需要先在 pi 里配好 GitHub token。如果没用过 Git 集成,第 20 章会讲到。

命令行导出

不进交互模式也能导出:

pi --export session.jsonl output.html

适合脚本批量处理。

会话命名技巧

命名是小事,但在翻几十个会话的时候——名字好坏天差地别。几个建议:

  • 用动词开头:“重构用户模块”而不是”用户模块”
  • 加上范围:“修复登录超时 bug”而不是”修 bug”
  • 加日期前缀可以,但别只靠日期——一周后你就忘了那天干了啥

临时试东西的会话也可以不起名。它们排在有名字的会话后面,不会碍眼。

小结

  • 会话存在 ~/.pi/agent/sessions/,按工作目录分文件夹,每个会话一个 .jsonl 文件
  • pi -c 恢复最近会话,pi -r 浏览历史,--no-session 临时模式
  • /resume/new/name/session 四个命令覆盖了日常会话操作
  • /tree(在文件内跳)、/fork(复制到新文件)、/clone(备份当前)用途不同,别搞混

会话树数据结构和 JSONL 格式的内部细节,放在第 25 章。现在你知道怎么存、怎么找、怎么切,日常使用已经够用了。