本文为社区中文翻译(依据 MIT 协议),阅读英文原文 →。译文可能滞后于上游更新。

会话

会话存储

会话自动保存到 ~/.pi/agent/sessions/,按工作目录归档。每个会话是一棵树状结构的 JSONL 文件。

pi -c                  # 继续最近一次会话
pi -r                  # 浏览并选择历史会话
pi --no-session        # 临时模式,不保存
pi --name "我的任务"    # 启动时设置会话显示名
pi --session <路径|id> # 使用指定会话文件或部分会话 ID
pi --fork <路径|id>    # 把会话文件分叉为新会话

交互模式中用 /session 查看当前会话文件、会话 ID、消息数、token 与费用。

JSONL 文件格式与 SessionManager API 见会话格式

会话命令

命令 说明
/resume 浏览并选择历史会话
/new 开始新会话
/name <名称> 设置当前会话显示名
/session 显示会话信息
/tree 在当前会话树中导航
/fork 从更早的用户消息创建新会话
/clone 把当前活动分支复制为新会话
/compact [提示] 摘要较早的上下文,见压缩
/export [文件] 把会话导出为 HTML
/share 上传为私有 GitHub gist,生成可分享链接

恢复与删除会话

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

选择器里可以:

可用时,Pi 会用 trash CLI 删除文件,而不是直接永久移除。

会话命名

/name <名称> 设置人类可读的会话名:

/name 重构 auth 模块

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

pi --name "重构 auth 模块"
pi --name "CI 审计" -p "评审这个构建失败"

命名会话在 /resumepi -r 里更容易找到。

/tree 分支

会话以树的形式存储。每个条目都有 idparentId,当前位置就是活动叶子节点。/tree 可以跳到任意历史节点并从那里继续,不需要新建文件。

示例形状:

├─ user: "你好,能帮我……"
│  └─ assistant: "当然可以!我可以……"
│     ├─ user: "我们试试方案 A……"
│     │  └─ assistant: "对于方案 A……"
│     │     └─ user: "方案 A 成功了……"  ← 当前
│     └─ user: "其实还是用方案 B……"
│        └─ assistant: "对于方案 B……"

树视图按键

按键 动作
↑/↓ 在可见条目间移动
←/→ 上下翻页
Ctrl+←/Ctrl+→ 或 Alt+←/Alt+→ 折叠/展开,或在分支段之间跳转
Shift+L 给选中条目设置或清除标签
Shift+T 切换标签时间戳显示
Enter 选中条目
Escape/Ctrl+C 取消
Ctrl+O 循环切换过滤模式

过滤模式有:默认、不显示工具、仅用户消息、仅带标签、全部。默认值可在设置中用 treeFilterMode 配置。

选中行为

选中用户消息或自定义消息时:

  1. 叶子节点移动到该消息的父节点。
  2. 该消息文本放进编辑器。
  3. 你可以编辑后重新提交,形成新分支。

选中助手消息、工具、压缩或其他非用户条目时:

  1. 叶子节点移动到该条目。
  2. 编辑器保持为空。
  3. 你可以从该节点继续。

选中根用户消息会把叶子重置为空对话,并把最初的提示词放回编辑器。

/tree/fork/clone

特性 /tree /fork /clone
输出 同一会话文件 新会话文件 新会话文件
视图 完整树 用户消息选择器 当前活动分支
典型用途 原地比较不同方案 从更早的提示词另起新会话 继续之前先复制当前工作
摘要 可选的分支摘要

想把备选方案留在同一处,用 /tree;想要独立的会话文件,用 /fork/clone

分支摘要

/tree 从一条分支切换到另一条时,Pi 可以把被离开的分支生成摘要并挂到新位置。这样既保留了那条路径的重要上下文,又不必整段回放。

出现询问时,可选:

  1. 不生成摘要
  2. 用默认提示词生成摘要
  3. 用自定义关注点生成摘要

分支摘要的内部机制与扩展钩子见压缩

会话格式

会话文件是 JSONL,包含消息条目、模型切换、思考等级切换、标签、压缩、分支摘要和扩展条目。

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