无极开物Docs
在会话中工作

换用其他 Agent 继续

原地切换正在运行会话的编程 Agent,保持同一会话,并查看交接了哪些上下文。

通常情况下,一个 Kaiwu 会话的整个生命周期都由同一个编程 Agent 运行。换用其他 Agent 继续允许你在对话中途原地更换 Agent,无需新建会话。

开发状态

该功能目前仅存在于开发分支源码中,尚未在已发布的 Kaiwu 版本中提供。它尚未通过集成实机准入测试,因此下文描述的行为应视为当前的开发约定,而非最终发布的行为。可用性、文案及故障处理逻辑后续仍可能调整。

该功能的保证范围很窄,有必要准确说明:

  • 会话仍是原会话,拥有相同的 ID、历史记录和设置
  • 当前 Agent 会被停止,由你选择的新 Agent 接管
  • 近期对话的有限摘要会以文本形式交接给新接入的 Agent
  • 切换操作在你发送消息时才会真正提交

这与以下操作不同:

功能入口

打开正在运行的会话,在消息输入框中使用 Agent 选择器——也就是显示当前引擎和模型的同一个选择器。

选择器中列出了当前 CLI 可为该会话运行的所有 Agent。当前正在运行该会话的 Agent 会带有对应标识,并且依然可选,因为你也可以在该行中修改其模型与配置。

装载 Agent 并发送

选择另一个 Agent 即可将其装载。这一操作没有单独的确认步骤:

  1. 选中你想要的 Agent。该行会显示与新建会话选择器完全相同的模型、思考过程及配置选项,因此引擎和模型依旧保持联动选择。
  2. 详情面板会说明后续操作:“你近期的对话会以文本形式延续;图片和文件不会继承。在你发送下一条消息之前,不会发出任何内容。”
  3. 输入框的发送按钮会变为换用 {Agent} 继续。
  4. 输入你的消息并发送。点击发送即会停止当前 Agent 并启动选定的 Agent。

如需取消,重新选中当前正在运行会话的 Agent 即可。你无需退出会话;在按下发送之前,不会发出任何内容。

装载状态仅在当前会话以及装载时运行的 Agent 范围内有效。如果在你操作期间会话底层的 Agent 发生变更,或服务器端禁用了该功能,已装载的状态会被直接丢弃,而不会隐式保留。

可用条件

只有当会话为托管会话、当前 Agent 在 Kaiwu 中可识别且处于严格空闲状态时,才能进行切换。会话记录的设备并不构成切换限制:由负责停止和激活的主体来决定当前 CLI 是否能执行对应的操作。对于处于冷不活跃状态的会话,一旦其规范的会话状态确认了这一事实,即视为已停止。

在以下情况下不可用:

  • 会话记录不由 Kaiwu 托管。 在 Agent 自行维护存储的直连会话中,不存在可供其他 Agent 延续的 Kaiwu 对话。
  • 你对该会话仅有只读权限。 选择器会针对整个会话提示一次,而非对每个 Agent 分别提示。
  • 当前 Agent 仍在工作中。 发送将被拒绝并提示:“{Agent} 仍在工作中。未发送任何内容——请等待其完成后重试。” 请等待当前轮次结束再重新发送。
  • 没有可访问的 CLI 能执行该操作,或对应的 CLI 版本低于该功能的要求。 Kaiwu 会尽量区分这两种情况;若确实无法判断,则会提示“请更新或重新连接”。
  • 目标为自定义 ACP 后端。 已配置的 ACP 后端在选择器中依然可见,以确保各处的目录一致;但系统暂不支持原地切换到这类后端,并会提前拦截,而不是等到发送时才报错。

切换操作绝不会将会话迁移到另一台设备。如需迁移设备,请使用会话交接。

切回之前使用过的 Agent

如果你切回同一设备上先前运行过该会话的 Agent,它会恢复自身的对话,而不是重新开始。Kaiwu 此时仅会重放该 Agent 离开期间发生的内容,因此不会向其重复灌输已知历史。

由此引出两点:

  • 只有在该 Agent 自身的提供商会话恢复功能受支持且权限允许时,才会按此逻辑执行。如果你在设置中禁用了该 Agent、提供商根本不支持恢复,或者(对于 Codex)后端模式不支持恢复,系统都会回退为全新启动,并携带完整的延续上下文。参见继续会话。
  • 当你切回时,Agent 自身的厂商会话可能已不复存在:提供商会对其会话存储进行修剪、轮换和过期清理。Kaiwu 不会对此进行预检。只有当提供商接受请求的原生标识时(包括无需重放种子的情形),记录的边界才会推进;仅凭提示词已送达或重放种子已停用,并不能作为成功恢复的凭据。严格恢复失败时,先前的边界保持不变,该标识也会失效,而不会再次被当作有效的原生恢复候选。

新接入 Agent 获取的内容

新接入的 Agent 会收到一份有长度限制的纯文本简报。根据实际存在的内容,简报可能包括:

  • 一段简短的头部信息,说明这是同一个 Kaiwu 会话换由新 Agent 接管,并注明刚刚离开的 Agent 名称
  • 会话标题
  • 若是全新接入的 Agent,会明确提示前一个 Agent 自身的对话状态不会继承,后续内容为重放;若是切回的 Agent,则会恢复其自身原生对话,且只接收离开期间的增量内容
  • 前一个 Agent 正在追踪的内容(即其进行中的计划),会归属于该 Agent 并标记为已成过去
  • 你的最后一条指令;若该指令落在重放窗口之外,则会被置顶钉选
  • 对话末尾内容
  • 当窗口中的某部分内容无法读取时的说明提示
  • 读取其余内容的指引:如何获取完整的会话记录,以及在前一个 Agent 自身的会话日志仍保留在磁盘上时的读取方法

简报的大小受字符数而非消息条数限制,因此它截取的是对话末尾部分,而非全部对话——这也正是上述指引存在的原因。

早期对话中的图片和文件不包含在简报中。随切换操作发送的新消息中的附件不受影响。

如果你尚未发送任何内容就进行切换,则没有任何可延续的上下文,选择器会显示相应提示,而不会展示常规说明。

会话记录分割线与“已交接的上下文”卡片

每次切换都会在会话记录中留下一条分割线,内容为 “已将此会话从 {A} 切换至 {B} 继续”。它标记了归属边界:分割线上方的消息归属于前一个 Agent,下方的消息归属于新 Agent。

点击分割线可打开已交接的上下文卡片。

阅读该卡片时请务必了解一点:系统并未存储任何内容用于回显。 简报在新接入的 Agent 接收后即被丢弃。打开卡片时,执行重建的 CLI 会针对切换时记录的同一会话记录节点,重新运行相同的上下文处理流程,现场完成重建。

卡片本身也说明了这一点,因为这直接决定了你该如何理解其内容:

当前根据此会话的会话记录重新生成,当时并未存储——因此可能与实际发送的内容存在差异。前一个 Agent 追踪的工作及其自身日志无法重建,因而未包含在内。

这两处省略皆为有意设计。前一个 Agent 追踪的工作及其会话日志属于该 Agent 自身的实时状态;切换时已被清空,后续 Agent 会在同一位置重新发布。若显示当前的值,则无异于宣称它们跨越了切换边界。

该卡片还提供了跳转至所包含的最后一条消息功能,可将会话记录滚动至简报所能覆盖的最新消息。

若设备不可达,或重建失败的原因可能不会再次出现,卡片会提供重试选项。

异常处理

对于消息是否已发送、切换是否已发生,Kaiwu 均有明确的状态反馈。

  • 未发送任何内容,未发生任何改变。 原因可能包括:权限不足、会话不受支持、执行操作的 CLI 无法使用目标 Agent、在你选择期间会话发生变动、原 Agent 仍在运行,或原 Agent 无法停止。排除原因后重新发送即可——你的草稿会得以保留。
  • 前一个 Agent 已停止,但切换未完成。 你的消息未发送。Kaiwu 会自动核对并协调当前会话的实际状态;你的草稿仍然可用,如果会话依然保留在原状态,直接按常规方式发送即等同于重试。
  • 会话已完成切换,但目标 Agent 未启动。 你的原消息已进入队列,并将在会话恢复时投递;请勿重复发送。仅当会话已切换为目标且处于未激活状态时,才会提供原有的恢复会话操作。
  • Kaiwu 无法确认处理结果。 在状态明确之前,输入框会自动执行一次状态对齐,并拒绝新的发送请求,以避免重复发送消息的风险。

系统没有检查状态、恢复源或恢复目标控件,也没有恢复面板、轮询机制或第二重恢复状态机。除针对未激活目标的恢复会话外,输入框顶部的横幅不提供任何恢复操作。

重试同一次已装载的切换会复用同一个标识,因此重试只允许一条消息生效,不会产生重复投递。

一次发送只能对应一个目标。如果输入框当前已关联其他目标(例如语音适配器或委托运行),Kaiwu 会直接拒绝,而不是悄悄将消息投递到错误的位置,并提示你清除其中一项设置。

运维指南

该功能由服务器声明支持且默认开启。客户端采用故障闭锁(fail closed)设计:若服务器未声明支持该功能,选择器将完全不提供任何切换目标。

若要对连接到某台服务器的所有客户端禁用该功能:

KAIWU_FEATURE_SESSIONS_AGENT_SWITCHING__ENABLED=0

修改该设置后需重启服务器。被禁用或格式错误的服务器配置项均会触发故障闭锁,并且变更路由会直接拒绝未经选择器发起的直接调用并返回不可用,而不是仅仅依赖选择器做前端限制。

所延续简报的大小是运行该会话的设备上的守护进程端设置。该设置与分叉及其他依赖重放种子的流程共享,因此对其进行修改也会影响这些流程:

# Character budget for the carried-over context.
# Default 120000. Minimum 1024, maximum 200000.
KAIWU_REPLAY_MAX_SEED_CHARS=120000

此处的最小值设定并非随意为之。低于大约 800 个字符时,提示词构建器会直接不生成任何简报,而不是生成一个没有对话内容的空框架;因此 1024 是仍能生成可用简报的最小值。

相关内容

© 乾元执中(南京)科技有限公司 · WUJI-Labs

On this page