无极开物Docs
在会话中工作

会话分叉与重放

安全分支 Kaiwu 会话,通过隐藏重放种子保留上下文,并深入理解当前 Codex app-server 的分叉与回滚行为。

会话分叉允许你在不丢失原始对话的前提下创建会话分支。本文将介绍 Kaiwu 会话分叉的工作原理、重放种子如何在隐藏提示词的同时完整保留上下文,以及 Codex app-server 目前对原生分叉与回滚的支持情况。

功能一览

  • 从任意消息分叉:悬停在已提交的消息上,即可分叉至新会话。
  • 从最新对话分叉:通过会话操作(顶部标题栏、菜单或命令面板),从当前对话的最新位置创建分支。
  • 隐藏式重放种子:重放提示词仅在首个用户回合发送给模型,绝不会显示在会话记录中。
  • 无冗余的祖先上下文:子会话以内联方式渲染只读的祖先消息;向上滚动即可自动按页加载父会话片段。
  • 分支与编辑:从用户消息处分叉时,子会话的输入框会自动预填该消息,方便你修改后重新发送。
  • 易于识别的子会话标题:若父会话已有标题,子会话会保留原标题并追加 (fork 1)。继续对该子会话进行分叉会递增编号,而不会叠加后缀。
  • 优先使用提供商原生能力:支持 OpenCode 服务端原生在消息处分叉;Codex app-server 原生在最新位置分叉及回滚至指定点;ACP 在受支持时从最新位置分叉。若不满足原生条件,选择 auto 的兼容调用方可以使用重放机制。

分叉策略的选择机制

在当前的开发流程中,每个分叉入口在开始工作前都会打开策略选择器。当 Agent 和分叉点支持原生操作时,你可以选择原生分叉;也可以选择重放分叉,使用受限大小的会话记录种子启动子会话;或者选择配置新会话,进入常规的新建会话界面继续操作。

显式指定原生分叉是严格生效的:若提供商原生分叉不可用或执行失败,Kaiwu 会直接报错并反馈结果,而不会静默创建重放子会话。显式使用兼容策略 auto 的既有调用方,仍可允许守护进程按既定规则自行选择原生或重放。原生分叉在提供商完成处理前会一直保持进行中状态;Kaiwu 不会设置武断的超时时间来放弃任务,也不会为了分叉专门执行就绪轮询。

重放机制的工作原理

  • 获取截止到分叉点(会话级分叉则截止到最新位置)的会话记录。
  • 构建重放种子提示词(若在“设置”中启用了“摘要 + 近期”,则可包含总结摘要)。
  • 将该种子仅一次性应用于子会话中发送的首条用户消息;既不注入草稿,也不污染会话记录。
  • 保持新提供商会话的独立纯净,确保工具与策略均作用于子会话而非父会话。

重放策略

  • 近期消息(默认):仅发送近期的对话窗口。
  • 摘要 + 近期:若启用且 execution.runs 可用,Kaiwu 会先生成一份结构化摘要(目标/指令/发现/已完成项/相关文件),随后附加近期消息。若执行运行已禁用,Kaiwu 会回退至仅包含近期消息。

你可以在“设置”中调整重放种子的预算(max seed characters),在上下文完整性与体积之间进行权衡。

祖先会话记录渲染

  • 子会话会以内联形式展示自身消息及只读的祖先上下文,并带有“分叉自……”(Forked from …)分割线。
  • 向上滚动会自动拉取更早的父会话分页数据,不会在存储中产生重复消息。
  • 祖先消息不可交互(不支持审批或工具操作),但仍保留复制和深层链接功能。

分支与编辑语义

  • 在用户消息处分叉时,分叉点截取在该消息之前(开区间截止),并将该消息的原始内容恢复到子会话输入框中作为可编辑的草稿。
  • 在助手(assistant)或工具消息处分叉时,分叉点截取在该消息之后(闭区间截止),且不会预填草稿。

Codex app-server 行为表现

  • 原生会话级分叉:Codex app-server 支持从最新已提交的对话状态进行分叉的会话操作。
  • 不支持原生消息级分叉:悬停在旧消息上分叉仍依赖 Kaiwu 重放机制;若重放功能已禁用,该控件将不可用。
  • 回滚至指定点:Codex app-server 支持将当前活跃对话回滚至任意已提交的用户消息之前。Kaiwu 会将该用户消息恢复到输入框草稿中供你修改重发,同时在会话记录中将已回滚的消息标记为历史记录,而非直接从视图中删除。
  • 旧版 Codex 变体:较旧的会话元数据可能仍显示为 openai 或 gpt;Kaiwu 现已将其视作 Codex,以提供分叉与回滚的界面支持。

OpenCode 专属特性

  • 两种后端:
    • 服务端原生(默认):支持在消息处原生分叉、问题事件以及更丰富的生命周期。除非显式配置了服务器 URL,否则默认使用托管的本地 OpenCode 服务器。
    • ACP(旧版回退):当 ACP 后端暴露 session/fork 时,尽力从最新位置分叉;否则使用重放。
  • 显式配置外部服务器 URL(位于“设置”中)为可选功能;仅接受不含凭据的环回源 http 或 https。显式设置后,Kaiwu 会按会话持久化保存该 URL;托管服务器则不会被持久化。
  • 托管的 OpenCode 服务器在每台设备上共享;如果服务进程异常终止,Kaiwu 会自动重启它,避免阻塞新会话的创建。

AskUserQuestion(用户操作)

  • OpenCode 服务器会将 question.* 事件作为结构化的 AskUserQuestion 请求抛出。
  • 这些请求会渲染为用户操作卡片(而非权限);回答问题即可恢复运行。已过期的历史问题呈只读状态,避免运行卡死。

提示与排错指南

  • 若分叉会话缺失上下文,请检查分叉点选择(悬停消息分叉与会话级分叉的区别),并确认“设置”中已允许使用重放种子。
  • 若要使用摘要模式,请确保已启用 execution.runs;否则 Kaiwu 将回退到仅包含近期消息。
  • 若显式选择的原生分叉失败,请手动改选重放分叉;系统绝不会静默替你降级。使用 auto 的兼容调用方则保留既有的守护进程自动选择回退行为。
  • 如需直接覆盖 OpenCode 服务器地址,请使用不包含路径或查询参数的环回源,避免基准 URL 无效。
© 乾元执中(南京)科技有限公司 · WUJI-Labs

On this page