理解上下文窗口

“上下文窗口”指的是语言模型在生成新文本时能够回顾和引用的文本总量,加上它生成的新文本。这与语言模型训练时使用的大型数据语料库不同,而是代表模型的”工作记忆”。更大的上下文窗口允许模型理解和响应更复杂和冗长的提示,而较小的上下文窗口可能限制模型处理较长提示或在扩展对话中保持连贯性的能力。

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

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

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

扩展思考的上下文窗口

当使用扩展思考时,所有输入和输出令牌,包括用于思考的令牌,都计入上下文窗口限制,在多轮情况下有一些细微差别。

思考预算令牌是您的max_tokens参数的子集,按输出令牌计费,并计入速率限制。

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

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

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

这种架构是令牌高效的,允许广泛推理而不浪费令牌,因为思考块可能长度很大。

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

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

下图说明了结合扩展思考和工具使用时的上下文窗口令牌管理:

1

第一轮架构

  • 输入组件: 工具配置和用户消息
  • 输出组件: 扩展思考 + 文本响应 + 工具使用请求
  • 令牌计算: 所有输入和输出组件都计入上下文窗口,所有输出组件都按输出令牌计费。
2

工具结果处理(第2轮)

  • 输入组件: 第一轮中的每个块以及tool_result。扩展思考块必须与相应的工具结果一起返回。这是您必须返回思考块的唯一情况。
  • 输出组件: 工具结果传回给Claude后,Claude将仅响应文本(在下一个user消息之前不会有额外的扩展思考)。
  • 令牌计算: 所有输入和输出组件都计入上下文窗口,所有输出组件都按输出令牌计费。
3

第三步

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

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

Claude Sonnet 3.7不支持交错思考,因此在没有非tool_result用户轮次的情况下,扩展思考和工具调用之间没有交错。

有关将工具与扩展思考一起使用的更多信息,请参阅我们的扩展思考指南

1M令牌上下文窗口

Claude Sonnet 4支持100万令牌的上下文窗口。这个扩展的上下文窗口允许您处理更大的文档,维持更长的对话,并处理更广泛的代码库。

1M令牌上下文窗口目前对使用层级 4的组织和具有自定义速率限制的组织处于测试阶段。1M令牌上下文窗口仅适用于Claude Sonnet 4。

要使用1M令牌上下文窗口,请在您的API请求中包含context-1m-2025-08-07 测试版标头

from anthropic import Anthropic

client = Anthropic()

response = client.beta.messages.create(
    model="claude-sonnet-4-20250514",
    max_tokens=1024,
    messages=[
        {"role": "user", "content": "Process this large document..."}
    ],
    betas=["context-1m-2025-08-07"]
)

重要注意事项:

  • 测试版状态:这是一个可能会发生变化的测试版功能。功能和定价可能在未来版本中被修改或删除。
  • 使用层级要求:1M令牌上下文窗口适用于使用层级 4的组织和具有自定义速率限制的组织。较低层级的组织必须升级到使用层级4才能访问此功能。
  • 可用性:1M令牌上下文窗口目前在Anthropic API和Amazon Bedrock上可用。Google Vertex AI的支持将随后提供。
  • 定价:超过200K令牌的请求会自动按高级费率收费(2倍输入,1.5倍输出定价)。详情请参阅定价文档
  • 速率限制:长上下文请求有专门的速率限制。详情请参阅速率限制文档
  • 多模态注意事项:处理大量图像或PDF时,请注意文件的令牌使用量可能会有所不同。当将大型提示与大量图像配对时,您可能会遇到请求大小限制

较新Claude模型的上下文窗口管理

在较新的Claude模型中(从Claude Sonnet 3.7开始),如果提示令牌和输出令牌的总和超过模型的上下文窗口,系统将返回验证错误,而不是静默截断上下文。这种变化提供了更可预测的行为,但需要更仔细的令牌管理。

为了规划您的令牌使用并确保您保持在上下文窗口限制内,您可以使用令牌计数API在将消息发送给Claude之前估计您的消息将使用多少令牌。

请参阅我们的模型比较表格,了解按模型列出的上下文窗口大小。

下一步