はじめに
この記事では、Anthropic Claude 3.7 Sonnetから導入された拡張思考モードをPython SDKで実装する際のコードについて紹介します。
Anthropoc Caludeとは
Anthropic Claudeは、Anthropic社が開発した高度なAI言語モデルです。
このモデルは、自然言語処理タスクにおいて高い性能を発揮し、特に会話型AIやテキスト生成、分析などの用途に適しています。
Anthropic Claudeは、AWSやGoogle Cloudなどのクラウドプラットフォームを通じて利用可能であり、さまざまな業界で活用されています。
Anthropic Claude 3.7 Sonnetとは
2025年2月にAnthropicから提供されたClaude Sonnetシリーズの最新モデルです。
3.7 Sonnetから新たに拡張思考モード(Extended Thinking mode)が導入されています。
拡張思考モードとは
Claude 3.7 Sonnetは2つのモードで動作します。
- 標準モード:以前のClaudeモデルと同様に、内部の推論を表示せずに直接応答を提供
- 拡張思考モード:最終的な回答を提供する前にClaudeの推論プロセスを表示
拡張思考モードを使用した場合Reasoning model(推論モデル)として動作します。
Reasoning modelは、Chain of Thought(COT)という手法を活用することで、
問題解決や質問に対して、単に答えを返すのではなく、段階的に考えながら回答を導き出すAIモデルのことです。
モデルが推論の各ステップを明確に示すことができ、問題解決の過程を理解しやすくします。
拡張思考モード使用時の注意点
- リクエストヘッダにの
anthropic-beta
フィールドにoutput-128k-2025-02-19
を指定する必要がある
リクエストヘッダに以下のように、output-128k-2025-02-19
設定が必要です。
anthropic-beta: output-128k-2025-02-19
- リクエストボディにthinkingパラメータを使用して、推論に使用するトークン予算(
budget_tokens
)を設定する
拡張思考モード使用時は回答生成とは別に、CoTによる推論でトークンが使用されるため、推論用のトークン数の予算を設定する必要があります。
"thinking": {
"type": "enabled",
"budget_tokens": 32000
}
- 設定するトークン予算(
budget_tokens
)はmax_tokens
以下に設定する必要がある
budget_tokens
に設定している値がmax_tokens
(出力時の最大トークン)を超過している場合は推論だけでトークン上限に達してしまうため、budget_tokens
はmax_tokens
以下に設定する必要があります。
入力プロンプトトークン + max_tokens
がコンテキストウィンドウサイズを超えないようにする
Claude 3.7 Sonnet以前では、プロンプトトークンとmax_tokensの合計がモデルのコンテキストウィンドウを超えても、システムは自動的にmax_tokensを調整してコンテキスト制限内に収めていました。
しかし、Claude 3.7 Sonnetでは、入力プロンプトトークン + max_tokensがコンテキストウィンドウサイズを超える場合、システムはバリデーションエラーを返すようになっています。
temperature
は1に設定する必要がある
拡張思考モード使用時は、temperatute
は1に設定する必要があります。
1以外が設定されていると以下のエラーが発生します。
`temperature` may only be set to 1 when thinking is enabled.
top_p
は設定できない
拡張思考モード使用時は、top_p
を使用することはできません。
`top_p` must be unset when thinking is enabled.
SDKから拡張思考モードを使ってみる
Python SDKで実装する場合、以下のようなコードになります。
拡張思考モード使用時はclient.messagesではなく、client.beta.messagesを使用します。
また、client.beta.messagesはストリーミング非対応なので、ストリーミングは使用できません。
import anthropic
client = anthropic.Anthropic()
response = client.beta.messages.create(
model="claude-3-7-sonnet-20250219",
max_tokens=128000,
thinking={
"type": "enabled",
"budget_tokens": 32000
},
messages=[{
"role": "user",
"content": "Generate a comprehensive analysis of..."
}],
betas=["output-128k-2025-02-19"]
)
print(response)
レスポンスは以下のように出力されます。
拡張思考モード使用時はBetaMessageのcontent配列配下に、BetaThinkingBlockとBetaTextBlockの2つのオブジェクトが存在し、BetaThinkingBlock.thinkingに思考プロセスの内容が、BetaTextBlock.textに回答生成した内容がそれぞれ、設定されます。
BetaMessage(
id='msg_vrtx_hogehoge',
content=[
BetaThinkingBlock(
signature='xxxxx',
thinking="-----------------思考プロセス------------------------",
type='thinking'
),
BetaTextBlock(
citations=None,
text="--------------------回答内容-----------------------------",
type='text'
)
],
model='claude-3-7-sonnet-20250219',
role='assistant',
stop_reason='end_turn',
stop_sequence=None,
type='message',
usage=BetaUsage(
cache_creation_input_tokens=0,
cache_read_input_tokens=0,
input_tokens=423,
output_tokens=177
)
)
おわりに
この記事では、Anthropic Claudeの拡張思考モードをPython SDKから使用する場合のコードについて紹介しました。