第 03 模块 · 2 节

会话树 /tree 与分支

《Pi 基础入门》03 会话管理 · 本节时长 26 分钟

会话不是直线,是树

这是 Pi 最有特色的地方:会话不是线性对话,而是树。

每个条目有 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..."
贯穿项目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 可以摘要被搁置的分支,并把这个摘要附加到新位置——保留你离开那条路径的重要上下文,而不重放整条分支。

切换时它会问你:

  • 不摘要
  • 用默认提示词摘要
  • 用自定义关注点指令摘要

落地练习:体验会话树

  1. 启动 pi,输入一个方案 A 让它干活
  2. 再输入方案 B 让它换一种做法
  3. /tree,看两条分支在树上的形态
  4. ↑/↓ 导航,Enter 选回方案 A 那条,从那里继续

怎么判断做对了?——你看到了树状结构(同一会话里有多个分支),并能用 ↑/↓ + Enter 跳回任意历史分支继续。

卡住了怎么办? /tree 里没分支 → 你还没产生分支,先输入两条不同方向的请求。导航乱 → 用 Escape 退出重进。分不清 tree/fork/clone → 记「tree 原地分叉、fork/clone 另起会话」。


常见坑:把会话当线性日志,一条道走到黑

新手习惯把会话当聊天记录,一条道走到黑——方案不对只能整个重开。

Pi 的会话树就是为了解决这个。方案不对,/tree 跳回某个历史点换个方向继续,原来的分支还在。学会「分叉而不重开」,你才真正用上了 Pi 的独特能力。


小结

  1. 会话是树结构,不是线性日志
  2. /tree 跳回任何历史点继续,原地保留分支
  3. 树控件:↑/↓ 导航、Shift+L 打标签、Ctrl+O 过滤
  4. /tree 原地分叉,/fork//clone 另起会话
  5. 切分支时可自动摘要被搁置的分支

下一节,学 fork / clone 和导出分享。