会话不是直线,是树
这是 Pi 最有特色的地方:会话不是线性对话,而是树。
每个条目有 id 和 parentId,当前位置是「活跃叶子」。/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..."
贯穿项目做
md-tools 时,你会遇到「这个方案不行,换一条试试」的情况。/tree 让你在同一个会话里保留不同方案的分支,随时回头——这是别处少见的能力。树控件的操作
在 /tree 视图里:
| 按键 | 作用 |
|---|---|
↑/↓ |
在可见条目间导航 |
←/→ |
上一页/下一页 |
Ctrl+←/→ 或 Alt+←/→ |
折叠/展开,或在分支段间跳 |
Shift+L |
给选中条目设置/清除标签 |
Shift+T |
切换标签时间戳 |
Enter |
选中条目 |
Escape/Ctrl+C |
取消 |
Ctrl+O |
循环切换过滤模式 |
过滤模式有:default(默认)、no-tools(无工具)、user-only(只看用户)、labeled-only(只看标签)、all(全部)。默认过滤可在 Settings 的 treeFilterMode 配置。
选择条目会怎样
选择一条用户消息:
- 把叶子移到该消息的父节点
- 把该消息文本放进编辑器
- 让你编辑并重新提交,创建新分支
选择助手/工具/压缩等非用户条目:
- 把叶子移到该条目
- 编辑器留空
- 让你从那里继续
选择根用户消息:把叶子重置为空白对话,并把最初的提示词放进编辑器。
三种分支方式对比
| 特性 | /tree |
/fork |
/clone |
|---|---|---|---|
| 输出 | 同一会话文件 | 新会话文件 | 新会话文件 |
| 视图 | 完整树 | 用户消息选择器 | 当前活跃分支 |
| 典型用途 | 就地探索不同方案 | 从早期提示词开新会话 | 继续前先复制当前工作 |
| 分支摘要 | 可选 | 无 | 无 |
一句话选法:想保留不同方案在一起用 /tree;想要独立的会话文件用 /fork 或 /clone。
分支摘要
当 /tree 从一条分支切到另一条时,Pi 可以摘要被搁置的分支,并把这个摘要附加到新位置——保留你离开那条路径的重要上下文,而不重放整条分支。
切换时它会问你:
- 不摘要
- 用默认提示词摘要
- 用自定义关注点指令摘要
落地练习:体验会话树
- 启动
pi,输入一个方案 A 让它干活 - 再输入方案 B 让它换一种做法
- 敲
/tree,看两条分支在树上的形态 - 用
↑/↓导航,Enter选回方案 A 那条,从那里继续
怎么判断做对了?——你看到了树状结构(同一会话里有多个分支),并能用
↑/↓+Enter跳回任意历史分支继续。
卡住了怎么办? /tree 里没分支 → 你还没产生分支,先输入两条不同方向的请求。导航乱 → 用 Escape 退出重进。分不清 tree/fork/clone → 记「tree 原地分叉、fork/clone 另起会话」。
常见坑:把会话当线性日志,一条道走到黑
新手习惯把会话当聊天记录,一条道走到黑——方案不对只能整个重开。
Pi 的会话树就是为了解决这个。方案不对,/tree 跳回某个历史点换个方向继续,原来的分支还在。学会「分叉而不重开」,你才真正用上了 Pi 的独特能力。
小结
- 会话是树结构,不是线性日志
/tree跳回任何历史点继续,原地保留分支- 树控件:
↑/↓导航、Shift+L打标签、Ctrl+O过滤 /tree原地分叉,/fork//clone另起会话- 切分支时可自动摘要被搁置的分支
下一节,学 fork / clone 和导出分享。