Prime Agent 如何用 /tree 和 /fork 从历史回合分支出新的会话路径?
【免费下载链接】prime-agentA self-improving RLM agent for coding workflows and long-running autonomous tasks.项目地址: https://gitcode.com/GitHub_Trending/pr/prime-agent
在 Prime Agent 的交互式会话中,agent 已经沿某条思路跑了很久(比如试了方案 A 并执行了一系列工具调用),你希望回到某个历史回合、换一种说法重新出发,而不是放弃当前会话或从头再来。Prime Agent 的会话本身就是以树结构存储的,/tree让你在当前会话文件内跳到任意历史回合继续,/fork则从某条历史用户消息派生出一个全新的会话文件。两种方式都要求你已经有一个自动保存的会话(会话默认保存在~/.prime/agent/sessions/下),可用prime-agent --continue继续最近一次会话,或直接在交互式模式里操作。
理解会话树:分支为什么不需要新文件
会话是 JSONL 文件,每条记录都有id和parentId字段,通过父子链接构成一棵树;当前所处位置称为活动的叶子(active leaf)。分支时只是在更早的节点下挂一个新的子节点,不产生新文件。Sessions 文档给出的树形示例如下:
├─ user: "Hello, can you help..." │ └─ assistant: "Of course! I can..." │ ├─ user: "Let's try approach A..." │ │ └─ assistant: "For approach A..." │ │ └─ user: "That worked..." ← active │ └─ user: "Actually, approach B..." │ └─ assistant: "For approach B..."会话文件的完整字段定义(包括branch_summary条目、头部的parentSession字段等)见 Session Format 文档。
用 /tree 在当前会话内从历史回合分支
在输入框输入/tree打开树导航器,按以下步骤操作:
- 定位目标回合。用
↑/↓在可见条目间移动,←/→翻页;Ctrl+←/Ctrl+→或Alt+←/Alt+→用于折叠/展开或在分支段之间跳转。 - 调整过滤模式。
Ctrl+O在五种过滤模式之间循环:default、no-tools、user-only、labeled-only、all。长会话里工具结果很多时,可以先过滤到只看用户消息。默认过滤模式可在 Settings 中用treeFilterMode设置,默认值为"user-only"。 - 选择回合(Enter),然后行为取决于所选条目的类型:
- 选中用户或 custom 消息:叶子移动到该消息的父节点,被选中的消息文本会填入编辑器——你可以修改措辞后重新提交,从而创建一个新分支;
- 选中assistant、tool、compaction 等其他非用户条目:叶子移动到该条目,编辑器为空,你直接从那个点继续;
- 选中根用户消息:叶子重置为空对话,原始提示词填入编辑器。
- 用
Escape或Ctrl+C可以取消导航而不动叶子位置。
切换分支时的可选摘要
当/tree把叶子从一个分支切到另一个分支时,Prime Agent 会提示是否总结被放弃的分支,把那条路径的上下文带到新位置,而无需重放整个分支。提示中三选一:不总结、用默认提示词总结、用自定义关注点说明总结。生成的branch_summary条目会保存在导航点上,文件里可以看到形如下面的条目(文档示例):
{"type":"branch_summary","id":"g7h8i9j0","parentId":"a1b2c3d4","timestamp":"2024-12-03T14:15:00.000Z","fromId":"f6h8i9j9","summary":"Branch explored approach A..."}摘要的具体机制(查找公共祖先、按 token 预算收集条目、生成并追加条目)见 Compaction 文档。如果不想每次被提示,可以在 Settings 中设置branchSummary.skipPrompt为true,效果是默认不总结。
用 /fork 从历史回合派生新会话文件
/tree的分支留在原会话文件里;如果你想要一个独立的会话文件,用/fork。它打开一个用户消息选择器,选中某条历史用户消息后,就从该消息开始创建一个新会话文件。也可以不进交互界面,直接用命令行把会话文件路径或部分会话 ID 分叉出去:
prime-agent --fork <path|id>新会话文件的头部会记录来源,即parentSession字段指向原会话文件(Session Format 文档中的示例头部):
{"type":"session","version":3,"id":"uuid","timestamp":"2024-12-03T14:00:00.000Z","cwd":"/path/to/project","parentSession":"/path/to/original/session.jsonl"}验证分支是否成功
- 输入
/session查看当前会话文件、会话 ID 和消息数:用/tree分支后该值不变(仍在同一文件);用/fork后指向新的会话文件。 - 用
--fork或/fork时,打开新会话文件确认头部带有parentSession字段,且第一条消息就是你选择的那条历史用户消息。 - 用
/usage检查 token、费用与上下文用量,确认新分支的上下文符合预期(切分支后上下文只包含从叶子回溯到根的路径)。
选择 /tree 还是 /fork
Sessions 文档给出的对照表(/clone是把当前活动分支整体复制成新文件,供需要原样备份时使用):
| 特性 | /tree | /fork | /clone |
|---|---|---|---|
| 输出 | 同一会话文件 | 新会话文件 | 新会话文件 |
| 视图 | 完整树 | 用户消息选择器 | 当前活动分支 |
| 典型用途 | 在原地探索备选方案 | 从更早的提示词开始新会话 | 在继续之前复制当前工作 |
| 摘要 | 可选的分支摘要 | 无 | 无 |
选择依据:想让备选路径和主线保存在一起、随时切回,用/tree;想让某条历史消息之后独立成一份新记录,用/fork(或/clone)。
限制与后续
/tree和/fork在交互模式下没有默认按键绑定;如需快捷键,可用 keybinding IDapp.session.tree和app.session.fork自行配置,见 Keybindings 文档。- 在树导航器中可以用
Shift+L给条目设置或清除标签、Shift+T切换标签时间戳显示,配合labeled-only过滤模式可以快速在书签之间跳转。 - 需要以编程方式操作会话树(
branch(entryId)、branchWithSummary(...)、getTree()等 SessionManager 方法)时,继续查阅 Session Format 文档。
【免费下载链接】prime-agentA self-improving RLM agent for coding workflows and long-running autonomous tasks.项目地址: https://gitcode.com/GitHub_Trending/pr/prime-agent
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考