ZH

 


会话不是一条直线,是一棵树

最朴素的会话是线性日志:一条接一条往下记。但真实使用里你会想「回到刚才那一步,换个方向再试」——这就需要分支(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 试一条激进的方案,不满意就回到岔口换路——之前的尝试完整留在树上,随时可对比。