ツールの使用と関数呼び出し
モデルから関数を呼び出す方法:リクエストループ、両形式、トークンを浪費する間違い。
ツールの使用により、モデルは関数の実行をユーザーに依頼し、その結果を使って処理を続けられます。これは、あらゆるコーディングエージェントの基盤となる仕組みです。
処理ループ
- 送信する内容:
messagesおよびtools。これにより、利用可能なものを説明します。 - モデルが応答で返すもの:
stop_reason: tool_useおよびtool_useブロック。ツール名とその引数が含まれます。 - ユーザーが それを実行します。ゲートウェイがユーザーのコードを実行することはありません。
- 履歴全体に次のものを追加して送り返します:
tool_resultブロック。 - モデルは最終的な回答を生成するか、別のツールの使用を依頼します。
ツールの定義(Messages形式)
{
"model": "claude-sonnet-4-6",
"max_tokens": 1024,
"tools": [{
"name": "get_weather",
"description": "Current weather for a city. Use when the user asks about weather.",
"input_schema": {
"type": "object",
"properties": {"city": {"type": "string", "description": "City name"}},
"required": ["city"]
}
}],
"messages": [{"role": "user", "content": "Weather in Paris?"}]
}
結果の返却
{
"role": "user",
"content": [{
"type": "tool_result",
"tool_use_id": "toolu_01ABC...",
"content": "18C, light rain"
}]
}
tool_result は、次のロールのメッセージに含めます: user、および tool_use_id は、モデルのリクエストに含まれるIDと完全に一致する必要があります。IDが一致しない場合、無効なリクエストとして拒否されます。OpenAI形式
この /v1/chat/completions エンドポイントでは、OpenAIの tools / tool_calls 形式を代わりに使用し、結果は次のロールのメッセージとして返されます: tool.
ツール使用にかかる費用
- 定義はターンごとに再送されます。 詳細なツールスキーマが20個あると、会話が始まる前から入力トークンの大部分を占めることがあります。
- 結果はコンテキストに追加されます。 ツールがJSONを200行返すと、そのすべてが次のリクエストと、それ以降のすべてのリクエストに含まれます。
- 往復の呼び出しごとに課金されます。 ツールを5回使うタスクには、少なくとも6回のリクエストが必要です。
- ツール出力の長さに上限を設け、返す前に要約してください。結果をモデルが実際に必要とする内容に絞ることは、ほとんどのエージェントループで最も効果の大きい改善です。
ツールスキーマはターン間で変わらないため、システムプロンプトとともに プロンプトキャッシュ の有力な候補になります。