上下文窗口


Note

此功能符合零数据保留(ZDR)条件。当您的组织拥有 ZDR 协议时,通过此功能发送的数据在 API 响应返回后不会被存储。

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

对于长时间运行的对话和智能体工作流,服务端压缩是上下文管理的主要策略。对于更特殊的需求,上下文编辑提供了额外的策略,如工具结果清除和思维块清除。

理解上下文窗口

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

Claude 在长上下文检索基准测试(如 MRCRGraphWalks)上取得了最先进的成果,但这些成果取决于上下文中的内容,而不仅仅是能容纳多少内容。

Tip

要深入了解长上下文为何会退化以及如何通过工程手段解决,请参阅有效的上下文工程

下图展示了 API 请求的标准上下文窗口行为1

上下文窗口图

1对于聊天界面,例如 claude.ai,上下文窗口也可以设置为滚动的"先进先出"系统。

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

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

使用扩展思考时,所有输入和输出 token(包括用于思考的 token)都计入上下文窗口限制,在多轮对话中有一些细微差别。

思考预算 token 是 max_tokens 参数的子集,作为输出 token 计费,并计入速率限制。使用自适应思考时,Claude 动态决定其思考分配,因此实际的思考 token 使用量可能因请求而异。

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

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

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

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

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

Note

您可以在扩展思考指南中阅读更多关于上下文窗口和扩展思考的内容。

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

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

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

  1. 第一个轮次的架构

    • 输入组件: 工具配置和用户消息
    • 输出组件: 扩展思考 + 文本响应 + 工具使用请求
    • Token 计算: 所有输入和输出组件都计入上下文窗口,所有输出组件都作为输出 token 计费。
  2. 工具结果处理(第 2 轮)

    • 输入组件: 第一个轮次中的每个块和 tool_result。扩展思考块必须与相应的工具结果一起返回。这是唯一一种您必须返回思考块的情况。
    • 输出组件: 将工具结果传回 Claude 后,Claude 仅以文本形式响应(除非启用了交错思考,否则在下一个 user 消息之前不会有额外的扩展思考)。
    • Token 计算: 所有输入和输出组件都计入上下文窗口,所有输出组件都作为输出 token 计费。
  3. 新的用户轮次(第 3 轮)

    • 输入组件: 之前的所有输入和输出都会被携带传递,但思考块除外,因为 Claude 已经完成了整个工具使用周期,现在可以丢弃思考块。如果您将思考块传回,API 会自动为您剥离它,或者您也可以在此阶段自行剥离。这也是您添加下一个 user 轮次的位置。
    • 输出组件: 因为在工具使用周期之外有一个新的 user 轮次,Claude 会生成一个新的扩展思考块并从那里继续。
    • Token 计算: 之前的思考 token 会从上下文窗口计算中自动剥离。所有其他之前的块仍然作为 token 窗口的一部分计算,当前 assistant 轮次中的思考块作为上下文窗口的一部分计算。
  • 使用扩展思考进行工具使用的注意事项:
    • 发布工具结果时,必须包含伴随该特定工具请求的完整未修改思考块(包括签名部分)。
    • 使用扩展思考进行工具使用的有效上下文窗口计算变为:context_window = input_tokens + current_turn_tokens
    • 系统使用加密签名来验证思考块的真实性。在工具使用期间未能保留思考块可能会破坏 Claude 的推理连续性。因此,如果您修改思考块,API 会返回错误。
Note

Claude 4 模型支持交错思考,这使 Claude 能够在工具调用之间进行思考,并在接收工具结果后进行更复杂的推理。

有关使用扩展思考和工具的更多信息,请参阅扩展思考指南

Claude Mythos Preview、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 限制之前先达到请求大小限制

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 会收到有关其总上下文窗口的信息:

<budget:token_budget>1000000</budget:token_budget>

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

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

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

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

优势:

上下文感知对以下场景特别有价值:

  • 需要持续专注的长时间运行智能体会话
  • 状态转换很重要的多上下文窗口工作流
  • 需要仔细 token 管理的复杂任务
Tip

对于跨多个会话的智能体,设计您的状态工件,以便在新会话开始时快速恢复上下文。记忆工具的多会话模式展示了一种具体的方法。另请参阅长时间运行智能体的有效框架

有关利用上下文感知的提示指导,请参阅提示最佳实践指南

使用压缩管理上下文

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

对于更特殊的需求,上下文编辑提供了额外的策略:

  • 工具结果清除 - 清除智能体工作流中的旧工具结果
  • 思维块清除 - 使用扩展思考管理思维块

上下文窗口溢出行为

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

要保持在上下文窗口限制内,请使用token 计数 API在向 Claude 发送消息之前估算 token 使用量。

请参阅模型比较表,了解各模型的上下文窗口大小列表。

后续步骤