了解 Claude
上下文窗口
理解上下文窗口
“上下文窗口”指的是语言模型在生成新文本时可以回顾和参考的文本总量,加上它生成的新文本。这与语言模型训练所用的大型语料库不同,而是代表了模型的”工作记忆”。较大的上下文窗口允许模型理解并回应更复杂和更长的提示,而较小的上下文窗口可能会限制模型处理更长提示或在延长对话中保持连贯性的能力。
下图说明了API请求的标准上下文窗口行为1:
1对于聊天界面,例如claude.ai,上下文窗口也可以设置为”先进先出”的滚动系统。
- 渐进式令牌累积: 随着对话通过回合推进,每个用户消息和助手响应都在上下文窗口内累积。之前的回合完全保留。
- 线性增长模式: 上下文使用量随着每个回合线性增长,之前的回合完全保留。
- 20万令牌容量: 可用的总上下文窗口(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
工具结果处理(第二回合)
- 输入组件: 第一回合中的每个块以及
tool_result
。扩展思考块必须与相应的工具结果一起返回。这是您必须返回思考块的唯一情况。 - 输出组件: 在工具结果被传回Claude后,Claude将只用文本响应(在下一个
user
消息之前没有额外的扩展思考)。 - 令牌计算: 所有输入和输出组件都计入上下文窗口,所有输出组件都作为输出令牌计费。
3
第三步
- 输入组件: 除了思考块外,所有输入和上一回合的输出都被带入,思考块可以在Claude完成整个工具使用周期后被丢弃。如果您将思考块传回,API将自动为您剔除它,或者您可以在此阶段自行剔除它。这也是您添加下一个
User
回合的地方。 - 输出组件: 由于在工具使用周期之外有一个新的
User
回合,Claude将生成一个新的扩展思考块并从那里继续。 - 令牌计算: 之前的思考令牌会自动从上下文窗口计算中剔除。所有其他之前的块仍然计入令牌窗口,当前
Assistant
回合中的思考块计入上下文窗口。
- 工具使用与扩展思考的考虑事项:
- 在发布工具结果时,必须包含伴随该特定工具请求的整个未修改的思考块(包括签名/编辑部分)。
- 带有工具使用的扩展思考的有效上下文窗口计算变为:
context_window = input_tokens + current_turn_tokens
。 - 系统使用加密签名来验证思考块的真实性。在工具使用过程中未能保留思考块可能会破坏Claude的推理连续性。因此,如果您修改思考块,API将返回错误。
较新Claude模型的上下文窗口管理
在较新的Claude模型(从Claude Sonnet 3.7开始),如果提示令牌和输出令牌的总和超过模型的上下文窗口,系统将返回验证错误,而不是静默截断上下文。这一变化提供了更可预测的行为,但需要更仔细的令牌管理。
要规划您的令牌使用并确保您保持在上下文窗口限制内,您可以使用令牌计数API在将消息发送给Claude之前估计您的消息将使用多少令牌。
请参阅我们的模型比较表,了解按模型列出的上下文窗口大小。