「zero data retention」(ゼロデータ保持)、すなわちZDRがこの機能にどのように適用されるかについては、APIとデータ保持を参照してください。
このページでは、思考を有効にした完全な2ターンのツール使用ラウンドトリップを順を追って説明します。Claudeが思考し、ツール呼び出しを要求し、結果を受け取り、回答を完成させる流れの中で、各ステップで思考ブロックが正しく処理されます。完全なルールは思考ページのツール使用での思考と思考ブロックの保持に記載されています。このページでは、それらのルールを実行可能なコードに適用した例を示します。
各リンクは思考ページの完全な説明につながっています:
autoまたはnoneに制限する:ツール使用を強制するtool_choiceオプションは、手動の拡張思考(thinking: {type: "enabled"})ではエラーを返します。適応思考は強制的なツール使用をサポートします。redacted_thinkingブロックをフィルタリングしたりすると、400エラーが発生します。サンプルは適応思考を使用しています。拡張思考のみをサポートするモデルでは、thinking: {type: "enabled", budget_tokens: N}に置き換えてください。ラウンドトリップのルールは同一です。
この例では、get_weatherツールを定義し、Claudeに思考させてツール呼び出しを要求させ、その後、思考ブロックを含めて受け取ったとおりに正確にエコーバックしたアシスタントターンとともにツール結果を返します。
ツールを利用可能にして最初のリクエストを行う
適応思考を有効にし、ツールを定義したリクエストを送信します。thinkingパラメータを除けば、これは標準的なツール使用リクエストです:
client = anthropic.Anthropic()
weather_tool = {
"name": "get_weather",
"description": "Get current weather for a location",
"input_schema": {
"type": "object",
"properties": {"location": {"type": "string", "description": "City name"}},
"required": ["location"],
},
}
# 最初のリクエスト - Claudeが思考とツールリクエストで応答します
response = client.messages.create(
model="claude-opus-4-8",
max_tokens=16000,
thinking={"type": "adaptive"},
tools=[weather_tool],
messages=[{"role": "user", "content": "What's the weather in Paris?"}],
)
print(response)エコーバックするためにcontent配列を取得する
Claudeが思考することを選択した実行では、レスポンスのcontentにthinking、text、tool_useブロックが表示されるはずです(より単純なリクエストでは、適応モードは思考ブロックをスキップする場合があります)。このcontent配列をそのまま保持してください。次のステップでこれをそのまま送り返します。
この出力のような思考テキストを表示するには、リクエストにdisplay: "summarized"を追加してください。claude-opus-4-8を含む、displayのデフォルトがomittedであるモデルでは、それ以外の場合、thinkingフィールドは空文字列として返され、signatureのみが設定されます。いずれの場合も、content配列は変更せずにエコーバックしてください。詳細は思考表示の制御を参照してください。
{
"content": [
{
"type": "thinking",
"thinking": "The user wants to know the current weather in Paris. I have access to a function `get_weather`...",
"signature": "BDaL4VrbR2Oj0hO4XpJxT28J5T...."
},
{
"type": "text",
"text": "I can help you get the current weather information for Paris. Let me check that for you"
},
{
"type": "tool_use",
"id": "toolu_01CswdEQBMshySk6Y9DFKrfq",
"name": "get_weather",
"input": {
"location": "Paris"
}
}
]
}アシスタントターンをそのままエコーバックしてツール結果を返す
自分の側でツールを実行し、会話に2つのメッセージを追加する2番目のリクエストを送信します。1つ目は、受け取ったとおりに正確にエコーバックされたアシスタントのcontentで、これにより思考ブロックがtool_useブロックとともに変更されずに保持されます。2つ目はtool_resultを含むユーザーメッセージです。
各サンプルは自己完結型のスクリプトです。最初のリクエストを繰り返し、その直後に受け取ったレスポンスを使用してフォローアップを送信します。
client = anthropic.Anthropic()
weather_tool = {
"name": "get_weather",
"description": "Get current weather for a location",
"input_schema": {
"type": "object",
"properties": {"location": {"type": "string", "description": "City name"}},
"required": ["location"],
},
}
response = client.messages.create(
model="claude-opus-4-8",
max_tokens=16000,
thinking={"type": "adaptive"},
tools=[weather_tool],
messages=[{"role": "user", "content": "What's the weather in Paris?"}],
)
# tool_useブロックを抽出し、tool_result用のIDを取得します
tool_use_block = next(block for block in response.content if block.type == "tool_use")
# 実際の天気APIを呼び出します。ここに実際のAPI呼び出しを記述します
# これが返ってきたと仮定しましょう
weather_data = {"temperature": 88}
# 2回目のリクエスト - アシスタントのターンとtool_resultを含めます
continuation = client.messages.create(
model="claude-opus-4-8",
max_tokens=16000,
thinking={"type": "adaptive"},
tools=[weather_tool],
messages=[
{"role": "user", "content": "What's the weather in Paris?"},
# 受け取ったアシスタントのコンテンツをそのまま返します。thinking
# ブロックがある場合は、tool_useブロックと一緒に含める必要があります。
{"role": "assistant", "content": response.content},
{
"role": "user",
"content": [
{
"type": "tool_result",
"tool_use_id": tool_use_block.id,
"content": f"Current temperature: {weather_data['temperature']}°F",
}
],
},
],
)
print(continuation)最終レスポンスを読む
Claudeがテキストでターンを完了するのが確認できるはずです。適応モードではインターリーブ思考が自動的に行われるため、継続部分は最終テキストの前に新しい思考ブロックで始まることもあります:
{
"content": [
{
"type": "text",
"text": "Currently in Paris, the temperature is 88°F (31°C)"
}
]
}インターリーブ思考により、Claudeはツール呼び出しの間に思考し、各ツール結果に基づいて行動する前にそれについて推論できます。この概念とモデルごとの利用可否については、思考ページのインターリーブ思考で説明されています。インターリーブは思考ブロックが現れる場所を変えるものであり、ツール呼び出しを連鎖できるかどうかを変えるものではありません。以下の比較は、2つのツールを使うワークフローでインターリーブ思考が何を変えるかを示しています:
概要:思考を有効にし、思考出力を読み、ツール使用、キャッシング、ストリーミングに関する完全なルールを確認します。
努力レベルとプロンプトベースのガイダンスで、Claudeが思考する頻度と深さを制御します。
旧モデルでの手動思考バジェット:budget_tokensの仕組みと適応思考への移行。
Was this page helpful?