# 上下文窗口

---

<Note>
此功能符合[零数据保留（ZDR）](/docs/en/build-with-claude/api-and-data-retention)条件。当您的组织拥有 ZDR 协议时，通过此功能发送的数据在 API 响应返回后不会被存储。
</Note>

随着对话的增长，您最终会接近上下文窗口限制。本指南解释了上下文窗口的工作原理，并介绍了有效管理上下文的策略。

对于长时间运行的对话和智能体工作流，[服务端压缩](/docs/en/build-with-claude/compaction)是上下文管理的主要策略。对于更特殊的需求，[上下文编辑](/docs/en/build-with-claude/context-editing)提供了额外的策略，如工具结果清除和思维块清除。

## 理解上下文窗口

"上下文窗口"指的是语言模型在生成响应时可以参考的所有文本，包括响应本身。这与语言模型训练时使用的大型数据语料库不同，它代表了模型的"工作记忆"。更大的上下文窗口允许模型处理更复杂和更长的提示，但更多的上下文并不自动意味着更好。随着 token 数量的增长，准确性和召回率会下降，这种现象称为*上下文衰减*。因此，管理上下文中的内容与可用空间的大小同样重要。

Claude 在长上下文检索基准测试（如 [MRCR](https://arxiv.org/abs/2501.03276) 和 [GraphWalks](https://arxiv.org/abs/2412.04360)）上取得了最先进的成果，但这些成果取决于上下文中的内容，而不仅仅是能容纳多少内容。

<Tip>
要深入了解长上下文为何会退化以及如何通过工程手段解决，请参阅[有效的上下文工程](https://www.anthropic.com/engineering/effective-context-engineering-for-ai-agents)。
</Tip>

下图展示了 API 请求的标准上下文窗口行为<sup>1</sup>：

![上下文窗口图](/docs/images/context-window.svg)

_<sup>1</sup>对于聊天界面，例如 [claude.ai](https://claude.ai/)，上下文窗口也可以设置为滚动的"先进先出"系统。_

* **渐进式 token 累积：** 随着对话轮次的推进，每条用户消息和助手响应都会累积在上下文窗口中。之前的轮次被完整保留。
* **线性增长模式：** 上下文使用量随每个轮次线性增长，之前的轮次被完整保留。
* **上下文窗口容量：** 总可用上下文窗口（最多 100 万 token）代表了存储对话历史和从 Claude 生成新输出的最大容量。
* **输入-输出流：** 每个轮次由以下部分组成：
  - **输入阶段：** 包含所有之前的对话历史加上当前用户消息
  - **输出阶段：** 生成文本响应，该响应将成为未来输入的一部分

## 使用扩展思考时的上下文窗口

使用[扩展思考](/docs/en/build-with-claude/extended-thinking)时，所有输入和输出 token（包括用于思考的 token）都计入上下文窗口限制，在多轮对话中有一些细微差别。

思考预算 token 是 `max_tokens` 参数的子集，作为输出 token 计费，并计入速率限制。使用[自适应思考](/docs/en/build-with-claude/adaptive-thinking)时，Claude 动态决定其思考分配，因此实际的思考 token 使用量可能因请求而异。

但是，之前的思考块会被 Claude API 从上下文窗口计算中自动剥离，不属于模型在后续轮次中"看到"的对话历史的一部分，从而为实际对话内容保留 token 容量。

下图展示了启用扩展思考时的专门 token 管理：

![使用扩展思考时的上下文窗口图](/docs/images/context-window-thinking.svg)

* **剥离扩展思考：** 扩展思考块（深灰色显示）在每个轮次的输出阶段生成，**但不会作为后续轮次的输入 token 传递**。您无需自行剥离思考块。如果您将它们传回，Claude API 会自动为您完成此操作。
* **技术实现细节：**
  - 当您将思考块作为对话历史的一部分传回时，API 会自动排除之前轮次的思考块。
  - 扩展思考 token 仅在其生成时作为输出 token 计费一次。
  - 有效的上下文窗口计算变为：`context_window = (input_tokens - previous_thinking_tokens) + current_turn_tokens`。
  - 思考 token 包括 `thinking` 块。

此架构具有 token 效率，允许进行大量推理而不会浪费 token，因为思考块可能相当长。

<Note>
您可以在[扩展思考指南](/docs/en/build-with-claude/extended-thinking)中阅读更多关于上下文窗口和扩展思考的内容。
</Note>

## 使用扩展思考和工具时的上下文窗口

下图展示了结合扩展思考和工具使用时的上下文窗口 token 管理：

![使用扩展思考和工具时的上下文窗口图](/docs/images/context-window-thinking-tools.svg)

<Steps>
  <Step title="第一个轮次的架构">
    - **输入组件：** 工具配置和用户消息
    - **输出组件：** 扩展思考 + 文本响应 + 工具使用请求
    - **Token 计算：** 所有输入和输出组件都计入上下文窗口，所有输出组件都作为输出 token 计费。
  </Step>
  <Step title="工具结果处理（第 2 轮）">
    - **输入组件：** 第一个轮次中的每个块和 `tool_result`。扩展思考块**必须**与相应的工具结果一起返回。这是唯一一种您**必须**返回思考块的情况。
    - **输出组件：** 将工具结果传回 Claude 后，Claude 仅以文本形式响应（除非启用了[交错思考](/docs/en/build-with-claude/extended-thinking#interleaved-thinking)，否则在下一个 `user` 消息之前不会有额外的扩展思考）。
    - **Token 计算：** 所有输入和输出组件都计入上下文窗口，所有输出组件都作为输出 token 计费。
  </Step>
  <Step title="新的用户轮次（第 3 轮）">
    - **输入组件：** 之前的所有输入和输出都会被携带传递，但思考块除外，因为 Claude 已经完成了整个工具使用周期，现在可以丢弃思考块。如果您将思考块传回，API 会自动为您剥离它，或者您也可以在此阶段自行剥离。这也是您添加下一个 `user` 轮次的位置。
    - **输出组件：** 因为在工具使用周期之外有一个新的 `user` 轮次，Claude 会生成一个新的扩展思考块并从那里继续。
    - **Token 计算：** 之前的思考 token 会从上下文窗口计算中自动剥离。所有其他之前的块仍然作为 token 窗口的一部分计算，当前 `assistant` 轮次中的思考块作为上下文窗口的一部分计算。
  </Step>
</Steps>

* **使用扩展思考进行工具使用的注意事项：**
  - 发布工具结果时，必须包含伴随该特定工具请求的完整未修改思考块（包括签名部分）。
  - 使用扩展思考进行工具使用的有效上下文窗口计算变为：`context_window = input_tokens + current_turn_tokens`。
  - 系统使用加密签名来验证思考块的真实性。在工具使用期间未能保留思考块可能会破坏 Claude 的推理连续性。因此，如果您修改思考块，API 会返回错误。

<Note>
Claude 4 模型支持[交错思考](/docs/en/build-with-claude/extended-thinking#interleaved-thinking)，这使 Claude 能够在工具调用之间进行思考，并在接收工具结果后进行更复杂的推理。

有关使用扩展思考和工具的更多信息，请参阅[扩展思考指南](/docs/en/build-with-claude/extended-thinking#extended-thinking-with-tool-use)。
</Note>

[Claude Mythos Preview](https://anthropic.com/glasswing)、Claude Opus 4.7、Claude Opus 4.6 和 Claude Sonnet 4.6 具有 100 万 token 的上下文窗口。其他 Claude 模型（包括 Claude Sonnet 4.5 和 Sonnet 4（已弃用））具有 20 万 token 的上下文窗口。

单个请求最多可包含 600 张图片或 PDF 页面（对于具有 20 万 token 上下文窗口的模型为 100 张）。当发送大量图片或大型文档时，您可能会在达到 token 限制之前先达到[请求大小限制](/docs/en/api/overview#request-size-limits)。

## Claude Sonnet 4.6、Sonnet 4.5 和 Haiku 4.5 中的上下文感知

Claude Sonnet 4.6、Claude Sonnet 4.5 和 Claude Haiku 4.5 具有**上下文感知**功能。此功能让这些模型能够在对话过程中跟踪其剩余的上下文窗口（即"token 预算"）。这使 Claude 能够更有效地执行任务和管理上下文，因为它能了解自己有多少空间可以使用。Claude 被训练为精确使用上下文，持续执行任务直到最后，而不是猜测剩余多少 token。对于模型来说，缺乏上下文感知就像在没有时钟的情况下参加烹饪比赛。上下文感知模型通过显式接收有关剩余上下文的信息来改变这一点，从而充分利用可用的 token。

**工作原理：**

在对话开始时，Claude 会收到有关其总上下文窗口的信息：

```xml
<budget:token_budget>1000000</budget:token_budget>
```

预算设置为 100 万 token（对于具有较小上下文窗口的模型为 20 万）。

每次工具调用后，Claude 会收到剩余容量的更新：

```xml
<system_warning>Token usage: 35000/1000000; 965000 remaining</system_warning>
```

此感知能力帮助 Claude 确定剩余多少工作容量，并在长时间运行的任务中实现更有效的执行。图片 token 也包含在这些预算中。

**优势：**

上下文感知对以下场景特别有价值：
- 需要持续专注的长时间运行智能体会话
- 状态转换很重要的多上下文窗口工作流
- 需要仔细 token 管理的复杂任务

<Tip>
对于跨多个会话的智能体，设计您的状态工件，以便在新会话开始时快速恢复上下文。[记忆工具的多会话模式](/docs/en/agents-and-tools/tool-use/memory-tool#multi-session-software-development-pattern)展示了一种具体的方法。另请参阅[长时间运行智能体的有效框架](https://www.anthropic.com/engineering/effective-harnesses-for-long-running-agents)。
</Tip>

有关利用上下文感知的提示指导，请参阅[提示最佳实践指南](/docs/en/build-with-claude/prompt-engineering/claude-prompting-best-practices#context-awareness-and-multi-window-workflows)。

## 使用压缩管理上下文

如果您的对话经常接近上下文窗口限制，[服务端压缩](/docs/en/build-with-claude/compaction)是推荐的方法。压缩提供服务端摘要，自动压缩对话的早期部分，以最少的集成工作实现超出上下文限制的长时间对话。目前以测试版形式提供，适用于 Claude Mythos Preview、Claude Opus 4.7、Claude Opus 4.6 和 Claude Sonnet 4.6。

对于更特殊的需求，[上下文编辑](/docs/en/build-with-claude/context-editing)提供了额外的策略：
- **工具结果清除** - 清除智能体工作流中的旧工具结果
- **思维块清除** - 使用扩展思考管理思维块

## 上下文窗口溢出行为

在 Claude 4.5 及更新模型上，如果输入 token 加上 `max_tokens` 超过上下文窗口大小，API 会接受请求。如果生成随后达到上下文窗口限制，它将以 `stop_reason: "model_context_window_exceeded"` 停止。在早期模型上，API 会返回验证错误；使用 `model-context-window-exceeded-2025-08-26` beta 头来启用此行为。请参阅[处理停止原因](/docs/en/build-with-claude/handling-stop-reasons)了解详情。

要保持在上下文窗口限制内，请使用[token 计数 API](/docs/en/build-with-claude/token-counting)在向 Claude 发送消息之前估算 token 使用量。

请参阅[模型比较](/docs/en/about-claude/models/overview#latest-models-comparison)表，了解各模型的上下文窗口大小列表。

## 后续步骤
<CardGroup cols={2}>
  <Card title="压缩" icon="compress" href="/docs/en/build-with-claude/compaction">
    管理长时间对话中上下文的推荐策略。
  </Card>
  <Card title="上下文编辑" icon="pen" href="/docs/en/build-with-claude/context-editing">
    细粒度策略，如工具结果清除和思维块清除。
  </Card>
  <Card title="模型比较表" icon="scales" href="/docs/en/about-claude/models/overview#latest-models-comparison">
    查看模型比较表，了解各模型的上下文窗口大小和输入/输出 token 定价。
  </Card>
  <Card title="扩展思考概述" icon="settings" href="/docs/en/build-with-claude/extended-thinking">
    了解更多关于扩展思考的工作原理以及如何将其与其他功能（如工具使用和提示缓存）一起实现。
  </Card>
</CardGroup>
