扩展思考是Claude的高级推理功能,它让模型在生成响应之前有时间思考复杂问题。启用后,Claude会产生一个可见的思考过程,用户可以查看该过程以了解模型是如何处理其查询的。

此功能显著提高了Claude处理复杂任务的准确性,但它也伴随着重要的权衡。您将为思考阶段生成的所有令牌付费,并且额外的处理时间会增加响应延迟。关键在于判断何时提升的智能水平能够证明额外成本和等待时间是值得的。
何时使用扩展思考
是否启用扩展思考的决定应该由您的提示评估来驱动。以下是推荐的方法:
- 首先编写并测试不使用扩展思考的提示
- 运行评估以衡量准确性
- 如果在提示优化工作之后结果仍未达到您的标准
- 那么考虑启用扩展思考作为解决方案
扩展思考如何改变响应
如果不使用扩展思考,Claude的响应流程很简单——您发送一条包含文本块的用户消息,并收到一条包含文本块的助手消息作为回复。

启用扩展思考后,响应结构会发生显著变化。您将收到一条包含两个不同块的助手消息:

- 一个包含Claude推理过程的
thinking块 - 一个包含最终响应的
text块
签名系统
每个思考块都包含一个加密签名,该签名具有重要的安全用途。此签名确保当您在未来的对话轮次中包含该消息时,思考文本没有被修改。

Claude在生成响应时高度依赖思考内容,因此防止篡改对于维护安全和一致的行为至关重要。如果您修改了思考文本,签名验证将会失败。
经过编辑的思考
有时Claude的思考过程会被内部安全系统标记。发生这种情况时,您将收到一个经过编辑的思考块,而不是原始的思考文本。

经过编辑的内容以加密形式包含实际的思考文本。虽然您无法读取它,但您仍然可以在未来的对话轮次中包含此块,以便Claude不会丢失其先前推理的上下文。
实现
要在您的代码中启用扩展思考,您需要使用两个新参数修改您的聊天函数:
def chat(
messages,
system=None,
temperature=1.0,
stop_sequences=[],
tools=None,
thinking=False,
thinking_budget=1024
):思考预算代表Claude可用于推理的最大令牌数。允许的最小值为1024个令牌。重要的是,您的max_tokens参数必须超过您的思考预算——如果您设置的思考预算为1024,则max_tokens必须至少为1025。
在实践中,您会希望有更大的缓冲空间。例如,当思考预算为1024且max_tokens为4000时,Claude最多可以使用1024个令牌进行思考,并最多使用2976个令牌用于实际响应。
当该功能启用时,将思考配置添加到您的API参数中:
if thinking:
params["thinking"] = {
"type": "enabled",
"budget_tokens": thinking_budget
}测试经过编辑的响应
在开发过程中,您可能想要测试您的应用程序如何处理经过编辑的思考块。您可以通过在消息中包含这个特殊的触发字符串来强制Claude返回经过编辑的响应:
TRIGGER_REDACTED_THINKING_46C9A13E193C177646C7398A98432ECCCE4C1253D5E2D82641AC0E52CC2876CB这确保了在生产环境中遇到经过编辑的内容时,您的错误处理能够正常工作。