上下文窗口
上下文窗口是模型一次能读取的文本量。它容纳系统提示词、工具定义、所有记忆文件,以及对话到目前为止的每条消息、每个工具结果和每条回复。在长对话中它会逐渐填满,窗口越满,每一轮就越慢、越贵,直到历史被缩短为止;参见压缩对话。
OAR 在两个地方显示窗口有多满:一条沿输入区上边缘的细线,你随时都能看到;以及 🧠 上下文对话框,它会把这个数字拆开显示。
输入区上方的细线 #
这条线沿输入区的上边缘延伸。它让你一眼看出对话用掉了窗口的多少。它有两种显示模式,在 config. 中用 context 设置(参见 config.json):
| 模式 | 你会看到什么 |
|---|---|
default |
一条横跨整个宽度的线。窗口为空时为绿色,窗口满时为红色,颜色随之渐变。 |
bar |
同样的线,从左侧开始增长,长度对应窗口已用的比例。 |
当 OAR 没有该对话的数字时,这条线是中性的灰色。第一轮之前就是这样,不报告任何数据的提供商也是如此(参见按提供商)。
这条线在以下时刻更新:
- 你打开一个对话时;
- 你正在查看的对话中收到消息后不久;
- 一轮结束时。
在 Claude、DeepSeek、Claude Cloud、Cursor 和 Grok 上,这个数字在一轮结束时记录,因此这条线每轮变化一次。
🧠 上下文对话框 #
点击对话标题栏中的 🧠,它的提示文字为 Check current context(查看当前上下文)。对话框的标题是 Context usage(上下文用量)。它的副标题类似 Claude session 1a2b3c4d:提供商加上会话 id 的前八个字符(OpenAI 对话显示 Copilot,因为它们由 Copilot 智能体运行)。会话存在之前,副标题显示 Conversation 和对话 id 的前八个字符。没有打开的对话时,对话框显示 Open a conversation to see its context usage.(打开一个对话以查看其上下文用量。)
对话框从上到下显示:
- 模型,以及一行包含总量和窗口的标题。在 Claude 和 DeepSeek 上,标题类似
60.;模型上限在已知时显示。在其他提供商上,它类似9k used · compaction window 100. 0k · model limit 1 M 221.。3k / 1. 0 M tokens (22%) - 一个进度条,每个类别一段颜色。
- 一个表格,列为 Category(类别)、Tokens 和 Usage(用量)(占窗口的比例)。
- 进度条下方的说明:As of the last completed turn(截至上一轮完成时),后跟时间和模型,告诉你这些数字是何时采集的。其他说明会指出哪个数字是估算值(参见按提供商)。
- 在 Claude 上,还有自动压缩窗口滑块、思考控件和 Commit attribution(提交署名)一行。参见 Claude。从文件夹启动的 Claude Cloud 对话也显示署名一行。0.9.17 新增 DeepSeek 对话只显示滑块:DeepSeek 始终会思考,它的提交署名在它的设置子选项卡中设置。参见 DeepSeek。
- 0.9.16 新增 对于智能体启动的会话,无论哪个提供商,都有开关 Agents in this conversation may start sessions(允许此对话中的智能体启动会话)。参见让已启动的会话启动会话。
- 一个折叠的 Raw details(原始详情)区块,其中是运行时自己的文本(如果有的话)。
右上角的 Refresh(刷新)会重新读取这些数字。在 Claude、DeepSeek、Claude Cloud、Cursor 和 Grok 上,数字只在一轮结束时变化,因此它主要在对话框打开期间有一轮结束之后才有用。
类别 #
表格的行取决于提供商。在 Claude 和 DeepSeek 上(两者都由 Claude Code 运行),这些行就是 Claude Code 自己报告的类别,沿用它给出的名称,例如 System prompt(系统提示词)、System tools(系统工具)、Skills(技能)和 Messages(消息),会话中有的话还有 MCP tools(MCP 工具)、Memory files(记忆文件)和 Custom agents(自定义智能体)。另有两行描述窗口的其余部分:
| 行 | 含义 |
|---|---|
| Free space(剩余空间) | 窗口中尚未使用、对话还可以填充的部分。 |
| Auto-compact reserve(自动压缩预留) | 窗口中位于自动压缩阈值以上的部分。对话会在到达那里之前压缩,因此这部分永远不会被填满。只在自动压缩开启且阈值已知时显示。 |
Claude Code 列出但尚未加载的工具标记为 (deferred)(已延后)。它会显示在表格中,但不计入总量,并有一条说明指出这一点。因此各行加起来可能超过标题中的数字。
自动压缩窗口滑块 #
在 Claude 和 DeepSeek 上,对话框中有 Auto-compact window(自动压缩窗口)滑块。它设置对话在 Claude Code 压缩它之前最多可以积累多少 token 的上下文。这个设置属于对话,而不属于中继。其他提供商没有这样的控件。
滑块有七档:Auto(自动)、100k、150k、200k、300k、500k 和 1M。Auto 是默认值,把选择交给 Claude Code,由它挑选适合该模型的窗口。100k 是下限:Claude Code 会忽略任何更小的值。0.9.17 新增 在 DeepSeek 对话中,Auto 表示 400k token:除非你选择另一档,否则中继会把这个窗口交给 Claude Code,这样长的 DeepSeek 对话会在其 1M 窗口填满之前很早就压缩。压缩本身以及每一档的含义,见压缩对话。
对话框在滑块周围告诉你的信息:
- 滑块下方的一行以 Effective:(生效值:)开头,给出当前生效的阈值,例如
compacts at 967.。最后一部分说明它的来源:auto (model-tuned)(自动,按模型调整)、model default(模型默认值)、from settings(来自设置)(你的滑块)、from CLAUDE_CODE_AUTO_COMPACT_WINDOW(来自 CLAUDE_CODE_AUTO_COMPACT_WINDOW)或 from client data(来自客户端数据)。第一轮之前它显示 — (known after the first turn)(首轮之后可知)。该环境变量在环境变量中说明。0k of 1. 0 M tokens · auto (model- tuned) - 当 Claude Code 报告自动压缩已关闭时,会显示 Auto-compact is disabled for this session.(此会话已关闭自动压缩。)
- 一条说明指出新设置何时生效: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.(下一条消息时将压缩对话。)会提醒你。
移动滑块只会改变标签和说明。设置在你关闭对话框时保存(用 ×、Escape 或点击对话框外部),并有一条简短的提示确认,例如 Auto-compact window set to 200k tokens.(自动压缩窗口已设为 200k token。)选择 Auto 时,提示为 Auto-compact window back to the model default.(自动压缩窗口已恢复为模型默认值。)Claude Code 只在启动时读取窗口,因此会话会在你的下一条消息之前重启一次以应用它;参见压缩对话。
窗口的大小 #
窗口大小取决于模型。有些模型提供第二个更大的窗口,例如 1;你在发送之前用输入区的 Context window(上下文窗口)选择器选择它。参见上下文大小。
在 Claude 和 DeepSeek 上,标题显示两个数字:compaction window(压缩窗口),即对话将被压缩的位置;以及 model limit(模型上限),即模型最多能容纳的量。压缩窗口不能大于模型上限。在其他提供商上,标题显示模型的窗口。当提供商没有告诉 OAR 窗口大小时,OAR 使用内置的已知模型表,其中 DeepSeek 的模型为 1M;两处都没有的模型没有窗口数字。对于 Cursor 和 Grok,对话框此时只显示一个包含 token 计数的纯文本区块,没有进度条、表格或百分比。
按提供商 #
| 数字从何而来 | 对话框显示什么 | |
|---|---|---|
| GitHub Copilot 和 OpenAI,SDK 引擎与扩展引擎 | Copilot 运行时保存的会话记录。实测值。 | 较粗的划分:System/Tools(系统/工具)和 Messages,然后是 Free space,以及在运行时报告时的 Auto-compact reserve。 |
| Claude | Claude Code 在每轮之后报告明细。实测值。 | 精确的类别、窗口标题和滑块。 |
| DeepSeek | 与 Claude 相同:Claude Code 在每轮之后报告明细。实测值。 | 与 Claude 相同,但没有思考控件和署名一行。 |
| Claude Cloud | 云端会话在每轮之后报告已用和最大 token 数。 | 总量、窗口和百分比,没有类别。 |
| Cursor | 根据上一轮的 token 计数计算。 | 总量和占窗口的百分比,没有类别。 |
| Grok | 根据上一轮的 token 计数计算。 | 与 Cursor 相同:总量,以及在窗口已知时的百分比。 |
| OpenAI Image | 无。 | 没有上下文数据。 |
一些细节:
- Copilot。 如果运行时不再报告完整明细,OAR 只显示一个下限,取自模型到目前为止已写出的 token,标注为 Estimated lower bound — this runtime does not report a full breakdown.(估算的下限 — 此运行时不报告完整明细。)其中缺少提示词、系统、工具和缓存部分。
- Cursor。 一轮中的每次模型调用都会重新发送上下文,而 Cursor 报告的是总和。OAR 把提示词一侧除以调用次数,再加上输出。当一轮进行了不止一次调用时,对话框会说明这个数字是根据该轮的 token 用量总和估算的。
- Grok。 总量是上一轮的输入、缓存 token 和输出之和,不标记为估算值。只有在模型的窗口已知时才显示百分比。
- Claude Cloud。 数字在一轮结束后从会话中读取。如果会话没有报告用量,对话框就没有内容可显示。
在 Claude、DeepSeek、Claude Cloud、Cursor 或 Grok 对话的第一轮之前,对话框没有数字。它显示一个纯文本区块,其中模型为 unavailable(不可用),并有一行 Note(备注):No context data captured yet for this session; it is recorded when a turn completes.(此会话尚未采集到上下文数据;每轮完成时记录。)
窗口快满时 #
| 提供商 | 会发生什么 |
|---|---|
| Claude | Claude Code 在自动压缩阈值处压缩对话,默认接近模型的上限。 |
| DeepSeek | Claude Code 在自动压缩阈值处压缩对话:除非你选择另一个窗口,否则在 1M 窗口中的 400k token 处。 |
| Copilot 和 OpenAI,SDK 引擎 | 运行时在窗口的 80% 时在后台压缩,在 95% 时阻塞以等待压缩。 |
| Copilot 和 OpenAI,扩展引擎 | OAR 不做设置,也不显示任何内容。 |
| Claude Cloud | OAR 不做设置;当会话报告一次压缩时,对话记录中会显示一行。 |
| Cursor、Grok | OAR 不做设置,也不显示任何内容。 |