LLM Frontline
開発・エージェント

LLMのTool Use(関数呼び出し)とは|仕組みと精度を上げるツール設計

ミナト開発・API担当
・ 約7分で読めます
LLMのTool Use(関数呼び出し)とは|仕組みと精度を上げるツール設計

LLMは文章を作るのは得意ですが、それだけでは今日の天気も、社内データベースの値も知りません。ここを埋めるのがTool Use(ツール使用)です。関数呼び出しやfunction callingとも呼ばれ、AIエージェントの土台になる仕組みです。この記事では、Tool Useが実際にどう動くのか、そして呼び出しの精度を上げるためにツールをどう定義すべきかを、実務目線で整理します。

Tool Useとは

Tool Useは、LLMにあらかじめ「使える道具の一覧」を渡しておき、ユーザーの要求に応じてモデルがその道具を呼び出せるようにする仕組みです。天気を調べる、社内APIを叩く、計算を実行する、といった、モデル単体ではできない処理を外部に委ねられます。

重要なのは、モデル自身が関数を実行するわけではない点です。モデルは「この関数を、この引数で呼びたい」という構造化された指示を返すだけで、実際の処理はあなたのアプリケーション(またはツールを提供する側)が行います。

基本の流れ

やり取りは、次のような往復で進みます。

  1. 1

    ツールを定義して渡す

    名前・説明・入力スキーマ(引数の形)を持つツールの一覧を、リクエストに含めて送ります。
  2. 2

    モデルがツール呼び出しを返す

    要求に対してツールが必要だと判断すると、モデルは実行を止め、どのツールをどんな引数で呼ぶかを示すブロック(tool_use)を返します。
  3. 3

    アプリ側が実行する

    返された指示に従って、あなたのコードが実際の関数やAPIを呼び出し、結果を得ます。
  4. 4

    結果を返して続きを生成させる

    実行結果(tool_result)をモデルに返すと、モデルはそれを踏まえて回答の続きを生成します。必要ならこの往復を繰り返します。

この「呼び出し -> 実行 -> 結果を戻す」の繰り返しが、AIエージェントが動く基本のループです。

あわせて読みたい

AIエージェントとは何か|従来の自動化との違いと任せてよい仕事

クライアントツールとサーバーツール

ツールは、コードがどこで実行されるかで大きく2種類に分かれます。

種類実行される場所
クライアントツールあなたのアプリ側自分で定義した関数、社内API呼び出し、ファイル操作など
サーバーツールモデル提供者のインフラ側Web検索やコード実行など、提供者が実行まで担うもの

クライアントツールでは、モデルが呼び出しを返し、あなたのコードが実行して結果を戻します。サーバーツールでは実行まで提供者側が行い、結果が直接返ってきます。自作の業務ロジックはクライアントツール、汎用的な検索などはサーバーツール、という住み分けになります。

いつツールを呼ぶか

多くのAPIでは、既定でモデルが「ツールを呼ぶか、そのまま答えるか」を毎回判断します。要求がツールの説明する能力に合致し、答えがまだ手元にない場合に呼び、安定した知識や雑談には直接答える、という切り分けです。

この挙動はシステムプロンプトで調整できます。ツールを呼んでほしいのに呼ばないなら「回答の前にツールで調べること」と促し、逆に呼びすぎるなら判断を控えめにする指示を添えます。特定の場面で必ず呼ばせたいときは、ツール呼び出しを強制する設定も使えます。相談役の上位モデルを呼ぶadvisorのようなツールも、この枠組みの上に成り立っています。

あわせて読みたい

Claudeのadvisorツールとは|速い実行役に賢い相談役を組み合わせる

精度を上げるツール定義

Tool Useでつまずく原因の多くは、モデルの賢さより、ツール定義の曖昧さにあります。次の点を押さえると、呼び出しの精度が安定します。

  1. 1

    説明を具体的に書く

    ツールの説明は、モデルにとっての取扱説明書です。何をするツールで、いつ使い、引数に何を入れるべきかを、曖昧さなく書きます。ここが最も効きます。
  2. 2

    入力スキーマを厳密に

    引数は型を明示し、選択肢が決まっているものはenum(取りうる値の列挙)で縛ります。自由記述の文字列より、値を限定するほうが誤りが減ります。
  3. 3

    名前で役割を分ける

    search一つに種別引数を持たせるより、search_productsとsearch_ordersのように役割ごとに分けたほうが、モデルは選びやすくなります。
  4. 4

    ツールを増やしすぎない

    数が多いほど選択を誤りやすくなります。関連するものをまとめる、あるいは必要なツールだけを段階的に渡す設計で、選択肢を絞ります。

ヒント

ツール定義の改善は、プロンプトの工夫と同じくらい効果があります。呼び出しが不安定なときは、モデルを変える前に、まず説明文とスキーマを見直してください。スキーマを厳密にすると、より小さなモデルでも安定して呼べるようになることがあります。

つまずきやすい点

引数が足りないとき、モデルはユーザーに聞き返すこともあれば、それらしい値を勝手に推測して埋めることもあります(モデルや曖昧さの程度によります)。必須の引数が本当に埋まっているかは、実行前にアプリ側で検証するのが安全です。また、ツールの実行が失敗したときにモデルへどうエラーを返すか(エラー内容を伝えて再試行させるか、打ち切るか)も、あらかじめ設計しておきます。

よくある質問

Tool Useと関数呼び出し(function calling)は違うものですか
ほぼ同じ意味で使われます。OpenAIのfunction callingとして広まった機能で、提供各社が同様の仕組みを持ちます。呼び方の違いで、LLMが外部の関数やAPIを構造化して呼び出す点は共通です。
モデルがツールを実行してくれるのですか
いいえ。モデルは『どのツールをどう呼ぶか』を返すだけで、実際の実行はあなたのアプリ側が行います(サーバーツールは提供者側が実行します)。返された引数を検証し、実行し、結果を戻すのは呼び出し側の責任です。
ツールはいくつまで登録できますか
仕組み上は多数登録できますが、増えるほどモデルが選択を誤りやすくなる傾向があります。役割ごとに分けて命名し、必要なものだけを渡す、あるいはグループ化するなどして、実際に使う範囲を絞るのが安定します。
呼び出しが安定しないときはどうすればよいですか
まずツールの説明文と入力スキーマを見直してください。説明を具体的にし、選択肢はenumで縛るだけで精度が上がることがよくあります。それでも不安定なら、ツールの分割や、呼び出しの強制設定を検討します。

まとめ

Tool Use設計のチェックリスト

  • 各ツールの説明に、何をする・いつ使う・引数に何を入れるかを明記した
  • 入力スキーマで型を明示し、選択肢はenumで限定した
  • ツールの名前が役割ごとに明確に分かれている
  • ツール数を絞り、必要なものだけ渡す設計にした
  • 引数の検証と、ツール実行失敗時のエラー処理を用意した

Tool Useは、LLMを「賢い文章生成器」から「実際に動くエージェント」へ引き上げる土台です。仕組みそのものはシンプルな往復ですが、品質を左右するのはツール定義の質です。モデル選びに悩む前に、まず手元のツールの説明とスキーマを丁寧に書くことから始めてみてください。そのうえで、渡すコンテキスト全体を設計する視点を重ねると、エージェントの安定度はさらに上がります。

出典・参考

この記事をシェア

関連する記事

開発・エージェント

マルチエージェント構成をいつ選ぶか|単一エージェントで足りる線引きと、分割するときの設計判断

エージェントを複数に分けるべきかを実務の判断基準として整理します。既定は「分けない」であること、分けてよい条件と分けてはいけない条件、コンテキストの受け渡しと出力契約、コストの見積り、段階的な移行順序までを一次情報で裏取りしてまとめます。