3行でいうと

  • 道具を実行するのはAIではなく、自分のアプリです。AIは「この道具をこの引数で呼びたい」という依頼を返すだけです。
  • 3社とも流れは同じです。道具の定義を渡す、依頼が返る、アプリが実行する、結果を呼び出しのIDで結びつけて返す、最終の答えが返る。
  • Anthropicは、道具を使うだけで入力トークンが増えます(Opus 5.5で286トークンなど)。道具の定義文も入力に数えられます。

この記事は、実際に使って確かめた記録ではありません。この記事は公式の文書を読んでまとめたものです。数字は2026年10月8日に確認しました。変わることがあります。

先に結論

前提:何の話か

APIは、アプリの中からAIを呼び出す開発者向けの窓口です。ツール呼び出し(function calling、関数呼び出し)は、AIが外の機能(天気の取得、データベースの検索、ファイル操作など)を使えるようにする仕組みです。

AI自身は、文章を生成するだけで、インターネットに出たり、データベースに触ったりはできません。そこで、「こういう道具があります」という説明書を事前に渡し、必要だとAIが判断したら、その道具の呼び出し方を文章(実際には構造化されたデータ)で返してもらいます。実際に動かすのは、アプリ側です。

用語を整理します。

往復の手順

3社の文書に共通する流れを、順番に書きます。

  1. 道具の定義を付けて送る。ユーザーの質問と一緒に、使える道具の一覧を渡します。
  2. AIが、道具を呼びたいと返す。通常の文章の代わりに(または文章と一緒に)、道具の名前と引数、呼び出しのIDが返ります。
  3. アプリが道具を実行する。AIは何も実行していません。アプリが引数を取り出して、自分の関数を動かします。
  4. 結果を、IDつきで返す。2回目のリクエストに、元の会話と、道具の結果を加えて送ります。
  5. 最終の答えが返る。AIが結果を使って答えます。まだ道具が必要なら、2に戻ります。

見立てです。この流れから分かるのは、AIは道具の結果を「次の入力」として読むだけだ、という点です。道具の結果に何が入っても、それは次のリクエストの入力トークンとして数えられ、AIに読まれます。道具が外から取ってくる文章に、AIへの指示のような文が混ざっていた場合の扱いは、読んだ文書には書かれていません。結果を渡す前に、アプリ側で検査する設計が無難だと思います。

各社の形

Anthropic(Claude) OpenAI Google(Gemini)
道具の定義 tools配列。各要素にname、description、input_schema 各関数にtype: "function"、name、description、parameters、strict 関数宣言(function declarations)をtoolsに入れる
呼びたいという依頼 応答にtool_useブロック(id、name、input)。stop_reasonは"tool_use" 応答のoutput配列にfunction_callの項目(call_id、name、JSON文字列のarguments) functionCall(名前、引数、id)。Interactions APIではfunction_callの「ステップ」
結果を返す ユーザー役のメッセージにtool_resultブロック(tool_use_idとcontent) 入力にfunction_call_output(call_idとoutput)を足す functionResponseに同じidを入れて返す。Interactions APIではfunction_resultのステップ(call_id)
選択の指定 tool_choice:auto、any、tool、none 読んだ文書では未確認 auto、any、none、validated(Interactions API)。generateContentでは大文字のAUTOなど

各社の中身

Anthropic

公式のツール使用の文書によると、次の通りです。

公式文書の呼び出しの例です(この記事では実行していません)。

{
  "type": "tool_use",
  "id": "toolu_01A09q90qw90lq917835lq9",
  "name": "get_weather",
  "input": { "location": "New York, NY", "unit": "fahrenheit" }
}

OpenAI

公式の関数呼び出しの文書によると、次の通りです。

Google(Gemini)

公式の関数呼び出しの文書によると、次の通りです。

道具を使うと、入力トークンはどれだけ増えるか(Anthropic)

Anthropicの文書によると、道具を使うときは、toolsパラメータに入れた分を含む入力トークン全体が料金の対象です。さらに、toolsを使うと、API側が道具の使用を可能にする専用のシステム指示を自動で加えます。その分のトークン数が、モデルごとに表で公開されています(道具が1つ以上あるとき)。

モデル auto、noneのとき any、toolのとき
Claude Opus 5.5 286 406
Claude Sonnet 5 354 474
Claude Opus 4.7 675 804
Claude Sonnet 4.6 497 589
Claude Haiku 4.5 496 588

道具を渡さずtool_choiceをnoneにするときは、追加は0トークンです。これらは、ふつうの入力・出力トークンに足されます。

この数字は、道具の定義文(名前、説明、スキーマ)そのものの量は含みません。定義文は入力に数えられるので、説明を長く書くほど、毎回の入力が増えます。Anthropicの文書は、説明は「3〜4文以上、複雑なら、もっと」詳しく書くことを勧めています(性能に最も効く要素と書かれています)。つまり、説明を詳しくする効果と、入力の増加は、釣り合いを考える必要があります。

同じ道具の定義を毎回付けるなら、同じ前置きを安く読み直すプロンプトキャッシュと相性が良いと思います(見立てです)。Anthropicの文書では、道具の定義を変えるとキャッシュが全部無効になると書かれているので、道具の定義は、途中で変えない設計が向いています。

選び方・判断の基準

見立てです。ここまで読んだ範囲で、設計の基準は次の通りです。

よくある失敗・つまずき

気をつけること

出典

更新履歴