所有页面
本页内容

压缩对话

模型一次能读取的内容是有限的。在长对话中,历史记录会填满它的上下文窗口,迟早要有所取舍。OAR 给你两条出路:你可以用 /compact 开始一个带摘要的新对话,另外有些提供商会自动缩减自己的上下文。

上下文窗口的显示(🧠 按钮)在上下文窗口中介绍;本页只讲压缩。

/compact #

在输入区中输入 /compact 并发送。你输入 / 时,输入区的自动补全也会列出这个命令。OAR 会请你确认 Compact this conversation into a new one with carry-over summary?(将此对话压缩为带有延续摘要的新对话?),然后:

  1. 创建一个新对话,标题与旧对话相同,并加上 (compacted)(已压缩)。
  2. 归档旧对话。旧对话完整保留,在已归档列表中仍可阅读,参见对话列表。
  3. 打开这个空的新对话,摘要已准备好。其他打开着旧对话的浏览器也会被切换到新对话。

摘要会放在你在新对话中发送的第一条消息前面:智能体收到的内容是 [Carry-over context from previous compacted conversation]([从上一个已压缩对话带入的上下文])下的摘要,后面跟着 [New user request]([新的用户请求])下你输入的文字。你自己的气泡只显示你输入的内容。第一条消息发出后,摘要就用完了;之后的轮次只带有智能体自己在历史记录中保留的内容。

/compact 不接受任何指令。只有当它是整条消息、不带附件、且对话未归档时才有效。如果你在它后面加上文字,这条消息就不会被当作命令,而是作为普通文字发给智能体。OAR 既不会等待正在运行的轮次,也不会停止它,所以请在智能体空闲时发送 /compact。

新对话是全新的开始

只复制标题和摘要。新对话不会延续旧的智能体会话,因此除了摘要以外,智能体对旧对话没有任何记忆。应用中没有任何东西把这两个对话关联起来;要找旧对话,请到已归档列表中查找。提供商、模型和文件夹都不会复制:像新建任何对话时一样选择它们。置顶消息也不会复制。

摘要包含什么 #

摘要由旧对话的文本消息直接拼成,不需要让模型来撰写:

  • 对话标题;
  • 最多 16 条消息,包括你的和智能体的,按从旧到新排列,每条压成一行并截断到 260 个字符;
  • 总共最多 3,500 个字符,所以过长的摘要末尾会被截掉。

这 16 条从最近 24 条消息中选取,并优先取其中较早的消息。因此在超过 24 条消息的对话中,最新的 8 条不会进入摘要。没有文字的消息也占一个名额,但不会添加任何内容。

其他内容一概不带:工具输出、文件、图片、思考和智能体的计划都不会带过去。如果旧对话没有任何文字,摘要会注明这一点。新对话得到的是对话题的粗略提示,而不是准确的记录。请在第一条消息中把重要的事情再告诉智能体一次,尤其是最近的几步。

自动压缩 #

有些提供商会自行就地压缩长对话。对话还是原来那个,智能体会话也不变;当窗口接近上限时,提供商会用一个更短的版本替换较早的历史记录。不会请你确认。

提供商 何时压缩
Claude 上下文达到自动压缩窗口时,见下文。默认情况下它接近模型自身的上限(在 1M 上下文的模型上约为 967k token),所以长对话很少会达到。
DeepSeek 0.9.17 新增 与 Claude 相同,在达到自动压缩窗口时压缩。保持 Auto(自动)时,DeepSeek 对话在 400k token 时压缩,远低于这些模型的 1M 窗口。
GitHub Copilot 和 OpenAI,SDK 引擎 达到上下文窗口的 80% 时在后台压缩,达到 95% 时进行阻塞式压缩。

压缩进行期间,你发送的消息会暂留在队列中,压缩结束后再发出;此时发送按钮显示为 Queue(加入队列)。

你会看到什么 #

在 Claude、DeepSeek 和 Claude Cloud 上,对话记录会把一次压缩显示为一条通栏的行,同一位置还会以滚动条旁的一个圆点标出:

  • 0.9.8 新增 压缩进行时(仅 Claude 和 DeepSeek),正在运行的轮次上方的这一行显示 Compacting context…(正在压缩上下文…),该轮的气泡显示 Compacting the conversation…(正在压缩对话…)。
  • 压缩结束后,同一行变为 Context compacted · 120k → 40k tokens(上下文已压缩 · 120k → 40k token),其中是实际的数字。如果只知道压缩前的大小,则显示 Context compacted · was 120k tokens。
  • 没有结果就结束的压缩不会留下这一行。

在 Claude Cloud 上,这一行只在压缩结束后出现,显示的是会话报告的内容。

在 SDK 引擎(GitHub Copilot 和 OpenAI)上,进度则以活动行的形式显示在正在运行的轮次中:先是 Compacting the conversation context…(正在压缩对话上下文…),然后是带实际数字的 Context compacted (removed 12 messages, 30k tokens)(上下文已压缩,移除 12 条消息、30k token),或者 Context compaction failed: reason(上下文压缩失败:reason)。

自动压缩窗口 #

在 Claude 和 DeepSeek 上,你可以选择一个对话在压缩之前最多积累多少上下文。窗口越小,压缩得越早,每一轮也越便宜。这个设置属于对话本身。

打开对话的 🧠 上下文按钮,拖动 Auto-compact window(自动压缩窗口)滑块。它有七个档位:

档位 含义
Auto 默认值。Claude Code 会选择适合该模型的窗口。在 DeepSeek 上,Auto 表示 400k:除非你选择其他档位,否则中继会设置这个窗口。
100k、150k、200k、300k、500k、1M 对话的上下文达到这么多 token 时压缩。

需要了解的几点:

  • 最小的窗口是 100k。 Claude Code 会忽略更小的值,改用它自己的默认值,所以滑块不提供更小的档位。
  • 窗口不能超过模型自身的上限。 在上下文窗口较小的模型上,1M 窗口超出那个较小上限的部分不起作用。
  • 滑块在你关闭弹窗时保存。 拖动它只会改变标签和下方的说明。
  • 正在运行的会话会重启一次以应用它。 Claude Code 只在启动时读取窗口。在你发送下一条消息之前,OAR 会在智能体进程中没有任务运行时重启它,回复中也会说明:Restarted the session to apply the compaction window (Auto → 100k)(已重启会话以应用压缩窗口,Auto → 100k)。滑块下方的说明会告诉你这项更改在等什么:Applies after the current turn.(在当前这一轮之后生效。)、Applies when background work has finished.(后台工作结束后生效。)或 Applies on the next message (the session restarts once).(从下一条消息起生效,会话会重启一次。)
  • 如果窗口小于对话已经用掉的量,对话会立即被压缩。 滑块会提醒你:The conversation will be compacted on the next message.(下一条消息时将压缩对话。)
  • 滑块下方的一行显示当前生效的窗口及其来源:你的设置、模型默认值或环境变量。对话的第一轮完成后这一行才会填上。

环境变量 CLAUDE_CODE_AUTO_COMPACT_WINDOW 也可以设置窗口。当 Claude Code 报告窗口取自这里时,滑块下方的一行显示 from CLAUDE_CODE_AUTO_COMPACT_WINDOW(来自 CLAUDE_CODE_AUTO_COMPACT_WINDOW)。在会话运行于 tmux 中的系统上(Linux 和 macOS),为中继设置这个变量并不会把它传给 Claude Code:参见哪些变量会传到智能体。

会丢失什么、会保留什么 #

/compact 自动压缩
对话 新建一个;旧对话被完整归档。 还是同一个。
对话记录 旧对话记录保留在已归档的对话中;新对话从空白开始。 不变。每条消息都留在对话记录中,压缩发生的位置有压缩行(Claude、DeepSeek、Claude Cloud)。
智能体知道什么 只有摘要:最近的几条消息,最多 3,500 个字符。 由提供商写出的、更短的历史记录版本。
置顶消息 留在旧对话中。 保留。
提供商、模型、文件夹 不复制。 不变。

按提供商 #

/compact 自动压缩
GitHub Copilot 和 OpenAI,SDK 引擎 是 是,在窗口的 80% 和 95% 时。由活动行显示。
GitHub Copilot 和 OpenAI,扩展引擎 是 OAR 既不设置也不显示。
Claude 是 是。自动压缩窗口、对话记录中的压缩行、滚动条旁的圆点。
DeepSeek 0.9.17 新增 是 与 Claude 相同;除非你选择其他窗口,否则窗口为 400k。
Claude Cloud 是 会话报告压缩时显示对话记录中的压缩行;没有窗口设置。
Cursor 是 OAR 既不设置也不显示;没有窗口设置。
Grok 是 OAR 既不设置也不显示;没有窗口设置。

/compact 在所有提供商上都一样,因为它从不使用提供商自己的压缩:它只是开始一个新对话。“OAR 既不设置也不显示”的意思是 OAR 既不触发压缩,也不在对话记录中标出压缩;提供商自己的智能体仍可能自行管理它的上下文。