跳转到内容

会话

Pi 将对话保存为会话(session),方便你继续工作、从更早的轮次分支(branch),并重新回顾之前的路径。

会话自动保存到 ~/.pi/agent/sessions/,按工作目录组织。每个会话是一个 JSONL 文件,内部采用树形结构。

Terminal window
pi -c # 继续最近一次会话
pi -r # 浏览并从过去的会话中选择
pi --no-session # 临时模式;不保存
pi --name "my task" # 启动时设置会话显示名称
pi --session <path|id> # 使用指定的会话文件或部分会话 ID
pi --fork <path|id> # 将某个会话文件或部分会话 ID 分叉为新会话

在交互模式下使用 /session 可查看当前会话文件、会话 ID、消息数、token 数和费用。

JSONL 文件格式和 SessionManager API 参见会话格式

命令 说明
/resume 浏览并选择之前的会话
/new 开始一个新会话
/name <name> 设置当前会话的显示名称
/session 显示会话信息
/tree 在当前会话树中导航
/fork 从之前的一条用户消息创建新会话
/clone 将当前活动分支复制为新会话
/compact [prompt] 总结较早的上下文;参见上下文压缩
/export [file] 将会话导出为 HTML
/share 上传为私有 GitHub gist,并提供可分享的 HTML 链接

/resume 打开当前项目的交互式会话选择器。pi -r 在启动时打开同一个选择器。

在选择器中,你可以:

  • 通过输入进行搜索
  • 按 Ctrl+P 切换路径显示
  • 按 Ctrl+S 切换排序方式
  • 按 Ctrl+N 过滤出已命名的会话
  • 按 Ctrl+R 重命名
  • 按 Ctrl+D 删除,然后确认

可用时,pi 使用 trash 命令行工具执行删除,而非永久移除文件。

使用 /name <name> 设置一个可读的会话名称:

/name Refactor auth module

启动时用 --name-n 设置名称:

Terminal window
pi --name "Refactor auth module"
pi --name "CI audit" -p "Review this build failure"

/resumepi -r 中,已命名的会话更容易找到。

会话以树的形式存储。每条记录都有 idparentId,当前位置是活动叶节点。/tree 让你跳转到任意之前的位置并从那里继续,无需新建文件。

会话树

示例形状:

├─ user: "Hello, can you help..."
│ └─ assistant: "Of course! I can..."
│ ├─ user: "Let's try approach A..."
│ │ └─ assistant: "For approach A..."
│ │ └─ user: "That worked..." ← 当前
│ └─ user: "Actually, approach B..."
│ └─ assistant: "For approach B..."
按键 作用
↑/↓ 在可见记录之间导航
←/→ 上翻/下翻一页
Ctrl+←/Ctrl+→ 或 Alt+←/Alt+→ 折叠/展开,或在分支片段之间跳转
Shift+L 在所选记录上设置或清除标签
Shift+T 切换标签时间戳显示
Enter 选择记录
Escape/Ctrl+C 取消
Ctrl+O 循环切换过滤模式

过滤模式包括:default、no-tools、user-only、labeled-only 和 all。默认模式可通过设置中的 treeFilterMode 配置。

选择一条用户消息或自定义消息时:

  1. 将叶节点移动到所选消息的父节点。
  2. 将所选消息文本放入编辑器。
  3. 你可以编辑并重新提交,从而创建新分支。

选择一条助手、工具、压缩或其他非用户记录时:

  1. 将叶节点移动到该记录。
  2. 编辑器保持为空。
  3. 你可以从该位置继续。

选择根用户消息会将叶节点重置为空对话,并把原始提示词放入编辑器。

特性 /tree /fork /clone
输出 同一会话文件 新会话文件 新会话文件
视图 完整树 用户消息选择器 当前活动分支
典型用途 就地探索各种备选路径 从较早的提示词开始新会话 在继续之前复制当前工作
概要 可选的分支摘要

当你想把备选路径保留在一起时,使用 /tree;当你想要独立的会话文件时,使用 /fork/clone

/tree 从一个分支切换到另一个分支时,pi 可以总结被放弃的分支,并把摘要附加到新位置。这样可以在不重放整条分支的情况下,保留你离开路径时的重要上下文。

提示时,选择以下之一:

  1. 不生成摘要
  2. 使用默认提示词生成摘要
  3. 使用自定义重点指令生成摘要

分支摘要的实现细节和扩展钩子参见上下文压缩

会话文件是 JSONL 格式,包含消息记录、模型切换、思考级别切换、标签、压缩记录、分支摘要和扩展记录。

解析器、扩展、SDK 用法以及完整的 SessionManager API 参见会话格式