上下文窗口
理解上下文窗口
“上下文窗口”指的是语言模型在生成新文本时可以回顾和参考的全部文本量,以及它所生成的新文本。这与语言模型训练时使用的大型语料库不同,而是代表了模型的”工作记忆”。较大的上下文窗口允许模型理解和响应更复杂和更长的提示,而较小的上下文窗口可能会限制模型处理较长提示或在延展对话中保持连贯性的能力。
下图说明了API请求的标准上下文窗口行为1:
1对于聊天界面,例如claude.ai,上下文窗口也可以设置为”先进先出”的滚动系统。
- 渐进式token累积: 随着对话轮次的推进,每个用户消息和助手响应都会在上下文窗口内累积。之前的轮次会被完整保留。
- 线性增长模式: 上下文使用量随每个轮次线性增长,之前的轮次被完整保留。
- 20万token容量: 总可用上下文窗口(200,000个token)代表了存储对话历史和从Claude生成新输出的最大容量。
- 输入-输出流程: 每个轮次包括:
- 输入阶段: 包含所有之前的对话历史加上当前用户消息
- 输出阶段: 生成文本响应,成为未来输入的一部分
带有扩展思考的上下文窗口
当使用扩展思考时,所有输入和输出token,包括用于思考的token,都计入上下文窗口限制,在多轮情况下有一些细微差别。
思考预算token是您的max_tokens
参数的子集,按输出token计费,并计入速率限制。
然而,之前的思考块会被Anthropic API自动从上下文窗口计算中剔除,不作为后续轮次模型”看到”的对话历史的一部分,为实际对话内容保留token容量。
下图展示了启用扩展思考时的专门token管理:
- 剔除扩展思考: 扩展思考块(显示为深灰色)在每个轮次的输出阶段生成,但不会作为后续轮次的输入token被带入。您不需要自己剔除思考块。如果您将它们传回,Anthropic API会自动完成这项工作。
- 技术实现细节:
- 当您将对话历史的一部分传回时,API会自动排除之前轮次的思考块。
- 扩展思考token仅在生成时作为输出token计费一次。
- 有效的上下文窗口计算变为:
context_window = (input_tokens - previous_thinking_tokens) + current_turn_tokens
。 - 思考token包括
thinking
块和redacted_thinking
块。
这种架构在token使用上很高效,允许进行大量推理而不浪费token,因为思考块可能会相当长。
您可以在我们的扩展思考指南中了解更多关于上下文窗口和扩展思考的信息。
带有扩展思考和工具使用的上下文窗口
下图说明了在结合扩展思考和工具使用时的上下文窗口token管理:
第一轮架构
- 输入组件: 工具配置和用户消息
- 输出组件: 扩展思考 + 文本响应 + 工具使用请求
- Token计算: 所有输入和输出组件都计入上下文窗口,所有输出组件都按输出token计费。
工具结果处理(第二轮)
- 输入组件: 第一轮的每个块以及
tool_result
。扩展思考块必须与相应的工具结果一起返回。这是您必须返回思考块的唯一情况。 - 输出组件: 在工具结果被传回Claude后,Claude将只用文本响应(在下一个
user
消息之前不会有额外的扩展思考)。 - Token计算: 所有输入和输出组件都计入上下文窗口,所有输出组件都按输出token计费。
第三步
- 输入组件: 除了思考块之外,所有输入和前一轮的输出都会被带入,现在Claude已完成整个工具使用周期,思考块可以被删除。如果您将思考块传回,API会自动剔除它,或者在此阶段您可以自行剔除。这也是您添加下一个
User
轮次的地方。 - 输出组件: 由于在工具使用周期之外有一个新的
User
轮次,Claude将生成一个新的扩展思考块并从那里继续。 - Token计算: 之前的思考token会自动从上下文窗口计算中剔除。所有其他之前的块仍然计入token窗口,当前
Assistant
轮次中的思考块计入上下文窗口。
- 工具使用与扩展思考的注意事项:
- 在提交工具结果时,必须包含伴随该特定工具请求的整个未修改的思考块(包括签名/编辑部分)。
- 系统使用加密签名来验证思考块的真实性。在工具使用过程中未能保留思考块可能会破坏Claude的推理连续性。因此,如果您修改思考块,API将返回错误。
扩展思考和工具调用之间没有交错 - 在没有非tool_result
用户轮次的情况下,您不会看到扩展思考,然后是工具调用,然后是更多扩展思考。此外,目前不支持在扩展思考块本身内进行工具使用,尽管Claude可能会在思考块内推理它应该使用什么工具以及如何调用它们。
您可以在我们的扩展思考指南中了解更多关于带工具使用的扩展思考的信息
新版Claude模型的上下文窗口管理
在较新的Claude模型中(从Claude 3.7 Sonnet开始),如果提示token和输出token的总和超过模型的上下文窗口,系统将返回验证错误,而不是静默截断上下文。这一变化提供了更可预测的行为,但需要更谨慎的token管理。
要规划您的token使用并确保保持在上下文窗口限制内,您可以使用token计数API在将消息发送给Claude之前估算您的消息将使用多少token。
请参阅我们的模型比较表,了解各个模型的上下文窗口大小。