随着对话的增长,您最终会接近上下文窗口的限制。对于长时间运行的对话和代理工作流,服务器端压缩是上下文管理的主要策略。
"Context window"(上下文窗口)是指语言模型在生成响应时可以参考的所有文本,包括响应本身。这与语言模型训练所用的大型数据语料库不同,而是代表模型的"工作记忆"。较大的上下文窗口允许模型处理更复杂和冗长的提示,但更多的上下文并不自动意味着更好。随着令牌数量的增长,准确性和召回率会下降,这种现象被称为上下文衰减(context rot)。这使得精心挑选上下文中的内容与可用空间的大小同样重要。
有关长上下文为何会退化以及如何围绕它进行工程设计的更多信息,请参阅有效的上下文工程。
下图说明了 API 请求的标准上下文窗口行为1:
1 诸如 claude.ai 之类的聊天界面也可以以滚动的"先进先出"方式管理上下文窗口。
请求中的所有内容都计入上下文窗口:系统提示、messages 中的每条消息(包括工具结果、图像和文档),以及您的工具定义。Claude 在该轮次生成的输出(包括其扩展思考)也计入其中。每个响应都会在其 usage 字段中报告该请求消耗的内容。如果您使用提示缓存,输入计数会被拆分为 input_tokens、cache_read_input_tokens 和 cache_creation_input_tokens,这三者都计入窗口。要在发送请求之前进行估算,请使用令牌计数 API。
Claude Opus 5、Claude Opus 4.8、Claude Opus 4.7、Claude Opus 4.6、Claude Sonnet 5 和 Claude Sonnet 4.6 在 Claude API、Amazon Bedrock、Google Cloud 和 Microsoft Foundry 上具有 1M 令牌的上下文窗口。Claude Mythos Preview 也具有 1M 令牌的上下文窗口。
Claude Fable 5 和 Claude Mythos 5(claude-fable-5 和 claude-mythos-5)也具有 1M 令牌的上下文窗口。对任何具有 1M 令牌上下文窗口的模型的单个请求最多可以生成 128k 个输出令牌(max_tokens)。其他 Claude 模型(包括 Claude Sonnet 4.5)具有 200k 令牌的上下文窗口。
对于每个具有 1M 令牌上下文窗口的模型,1M 是默认值:您不需要 beta 标头,并且长上下文请求按标准定价计费。
单个请求最多可以包含 600 张图像或 PDF 页面(对于具有 200k 令牌上下文窗口的模型为 100 张)。如果您发送许多图像或大型文档,您可能会在达到令牌限制之前达到请求大小限制。
请参阅模型比较表,了解各模型的上下文窗口大小列表。
使用思考时,所有输入和输出令牌(包括思考令牌)都计入上下文窗口限制,在多轮情况下有一些细微差别。
思考令牌是您的 max_tokens 参数的一个子集,按输出令牌计费,并计入速率限制。使用自适应思考时,Claude 会动态确定其思考分配,因此思考令牌的使用量会因请求而异。
先前助手轮次的思考块是否保留在上下文窗口中取决于模型。在 Claude Opus 4.5 及更高版本的 Opus 模型、Claude Sonnet 4.6 及更高版本的 Sonnet 模型、Claude Fable 5、Claude Mythos 5 和 Claude Mythos Preview 上,API 默认保留先前的思考块,它们像任何其他输入令牌一样计入上下文窗口。在较早的 Opus 和 Sonnet 模型以及所有 Haiku 模型上,当您将先前的思考块传回时,API 会自动从对话历史中剥离它们,从而为对话内容保留令牌容量。有关每个模型的默认值,请参阅各模型的思考块保留。要在任一方向上覆盖默认值,请使用思考块清除。
下图显示了在剥离先前思考块的模型上启用思考时如何管理令牌:
您可以在思考指南中阅读有关上下文窗口和思考的更多信息。
下图说明了在剥离先前思考块的模型上将思考与工具使用结合时如何管理令牌:
第一轮架构
工具结果处理(第 2 轮)
tool_result。您必须将思考块与相应的工具结果一起返回。这是您必须返回思考块的唯一情况。user 消息之前不会有额外的思考,除非启用了交错思考)。新用户轮次(第 3 轮)
user 轮次的地方。user 轮次,Claude 会生成一个新的思考块并从那里继续。assistant 轮次中的思考块也是如此。要减少工具定义本身消耗的上下文,请参阅管理工具上下文,或使用工具搜索工具延迟工具定义。
Claude Sonnet 5、Claude Sonnet 4.6、Claude Sonnet 4.5 和 Claude Haiku 4.5 具有上下文感知能力:这些模型在整个对话过程中跟踪其剩余的上下文窗口(即它们的"令牌预算")。这使模型能够根据剩余空间管理长时间运行的任务,而不是猜测还剩多少令牌。上下文感知是自动的:您无需启用任何内容,也永远不需要自己发送本节中显示的标签。API 会注入它们。
在每个请求的系统提示中,API 会向 Claude 提供其总上下文窗口:
<budget:token_budget>200000</budget:token_budget>该预算与您的请求可用的上下文窗口相匹配:Claude Sonnet 5 和 Claude Sonnet 4.6 为 1M 令牌,Claude Sonnet 4.5 和 Claude Haiku 4.5 为 200k 令牌。本节中的示例展示的是具有 200k 令牌上下文窗口的模型。
在每次工具调用之后,API 会向 Claude 提供其剩余容量的更新:
<system_warning>Token usage: 35000/200000; 165000 remaining</system_warning>图像令牌包含在这些预算中。
Claude Opus 4.7 及更高版本的 Opus 模型、Claude Fable 5 和 Claude Mythos 5 不会收到这些注入的标签。在 Claude Opus 4.7 及更高版本的 Opus 模型、Claude Fable 5 和 Claude Mythos 5 上,您可以使用任务预算(处于 beta 阶段)为模型提供明确的预算。
对于跨越多个会话的代理,请设计您的状态工件,以便在新会话开始时能够快速恢复上下文。记忆工具的多会话模式介绍了一种具体的方法。另请参阅长时间运行代理的有效框架。
有关使用上下文感知的提示指导,请参阅提示最佳实践。
如果您的对话经常接近上下文窗口限制,请使用服务器端压缩。压缩会在服务器上自动总结对话的较早部分,因此对话可以在超过上下文窗口限制后继续进行。它在 Claude 4.6 及更高版本的模型和 Claude Mythos Preview 上以 beta 形式提供。
对于更专门的需求,上下文编辑提供了额外的策略:
缓存的提示前缀仍然占用上下文窗口:提示缓存改变的是您为这些令牌支付的费用,而不是它们是否被计入。
如果仅输入就已经超过了模型的上下文窗口,API 会在每个模型上返回 400 invalid_request_error("prompt is too long")。
在 Claude 4.5 及更新的模型上,如果输入令牌加上 max_tokens 超过上下文窗口大小,API 会接受该请求。如果生成随后达到上下文窗口限制,它会以 stop_reason: "model_context_window_exceeded" 停止。在较早的模型上,API 会返回验证错误。要在这些模型上选择启用 model_context_window_exceeded 行为,请使用 model-context-window-exceeded-2025-08-26 beta 标头。有关详细信息,请参阅停止原因和回退。
要保持在上下文窗口限制内,请使用令牌计数 API 在向 Claude 发送消息之前估算令牌使用量。
服务器端上下文压缩,用于管理接近上下文窗口限制的长对话。
使用上下文编辑随着对话上下文的增长自动管理它。
查看模型比较表,了解各模型的上下文窗口大小和输入/输出令牌定价列表。
为 Claude 提供增强的推理能力以处理复杂任务,并控制思考内容的返回方式。
Was this page helpful?