会话不是一条直线,是一棵树
最朴素的会话是线性日志:一条接一条往下记。但真实使用里你会想「回到刚才那一步,换个方向再试」——这就需要分支(branching)。pi 把会话建模成一棵树:每条消息是一个节点,parentId 指向上一条;从任意节点都能岔出新分支。
● root (system)
│
● user: 帮我重构这个模块
│
● assistant + toolCalls
╱ ╲
分支 A ● ● 分支 B ← 从同一节点岔开
│ │
● ●
「线性日志」只是树上的一条路径树图 vs 线性日志
- 线性日志:当前这条「活跃路径」从根到叶的展开,是你正在对话的视图。
- 树:所有走过的可能性。回退 + 重发 = 在树上新开一个兄弟节点,旧分支并不消失。
节点的形状(精简)
interface SessionNode {
id: string
parentId: string | null // 指向上一条 → 构成树
message: AgentMessage // 这一步的内容
timestamp: number
}
// 活跃路径 = 从某个叶子沿 parentId 一路回溯到 root分支让「探索」变得无损:你可以大胆地让 pi 试一条激进的方案,不满意就回到岔口换路——之前的尝试完整留在树上,随时可对比。