関数呼び出しとツール:モデルをアクションにつなぐ
関数呼び出しは、モデルにあなたのコードを使うと判断させます——一度も実行せずに。実際に何が起きるのか、そしてどこで間違うのかを解説します。
それ単体では、言語モデルはテキストを生み出すことしかできません。今日の天気を調べたり、データベースに問い合わせたり、メールを送ったり、計算を確実にこなしたりはできません。関数呼び出し——ツール使用とも呼ばれます——は、その溝を橋渡しする仕組みであり、モデルがテキストを越えて実際のアクションやリアルタイムのデータに手を伸ばせるようにします。これはほぼすべてのAIエージェントの土台であり、ただ話すのではなく実際に何かをするアプリケーションを作るうえで最も重要な単一の能力です。とはいえその仕組みは人々を驚かせます。モデルは実際にはあなたのコードを一切実行しないからです。この解説では、実際に何が起きているのか、そしてどこで間違うのかを順を追って見ていきます。
関数呼び出しが埋める溝
言語モデルは、その核心においてテキスト生成器です。だからこそ言語には長けていますが、現在の情報や現実世界への作用を要するあらゆることには信頼できません。天気を尋ねれば、どの温度計にもつながっていないもっともらしいテキストを生み出します。正確な計算を頼めば、当て推量をするかもしれません。顧客の注文を取ってこいと言っても、調べる手段がありません。
関数呼び出しはこれを、モデルにツール——あなたが定義し制御する関数——へのアクセスを与えることで解決します。ツールはこれらをこなせます。APIを叩く、計算を実行する、データベースに問い合わせる、アクションを起動する。モデルの仕事は、ツールがいつ必要か、どんな入力で必要かを判断することです。実際に実行するのはあなたのコードの仕事です。この役割分担こそがすべての考え方であり、これを正しく整理することが、この先のすべてを理解する鍵です。
実際に何が起きるのか(人々が驚く部分)
最もよくある誤解は、モデルが関数を実行するというものです。実行しません。モデルは常にテキストを生み出すだけで——適切なときには、ツールを実行してほしいと述べる構造化されたリクエストを含みます。実行するのはあなたのアプリケーションです。流れはこうなります。
- 利用可能なツールをモデルに説明します——名前、何をするか、どんな入力を期待するか。
- ユーザーが何かを尋ねます。よく答えるためにツールが必要かをモデルが判断します。
- 必要なら、モデルは構造化されたメッセージを返します。「このツールをこの引数で呼べ」。モデルは何も実行しません。
- あなたのコードがそのリクエストを解析し、実際の関数を実行し、結果を得ます。
- その結果をモデルに送り返します。
- モデルはその結果を使って最終的な回答を組み立てます。
モデルは意思決定者、あなたのアプリケーションは手です。この境界を明確に保つことが不可欠です。なぜなら、セキュリティと信頼性に関するすべてが、実行を制御しているのはモデルではなくあなただと覚えていることにかかっているからです。
モデルがうまく使えるようツールを記述する
ツールの有用性は、その記述次第です。なぜならモデルは、あなたが伝えたことだけに基づいて、それを使うかどうか、どう使うかを判断するからです。ツールには明確な名前、何をしいつ使うかの説明、そして入力の仕様——どんな引数を取り、その型は何か、どれが必須か——が必要です。
これらの記述の質が振る舞いを直接左右します。曖昧に記述されたツールは、間違ったタイミングや不正な引数で使われます。明確に記述されたツールは適切に使われます。記述を、あなたが書いたものしか見えない有能なアシスタントへの指示だと考えると役立ちます——記述から人間がいつ使うべきか分からないなら、モデルにも分かりません。AnthropicとOpenAIのプロバイダー文書がツール宣言の正確なフォーマットを規定しており、それに正確に従うことが、あなたのコードが処理できる整った呼び出しをモデルに返させるのです。
なぜこれがエージェントを解き放つのか
関数呼び出しは、AIエージェントという発想全体の根底にある構成要素です。エージェントとは、おおまかに言えばループです。モデルにゴールと一連のツールが与えられ、モデルがアクションを判断し、あなたのコードがそれを実行し、結果がフィードバックされ、モデルが次のアクションを判断する——タスクが完了するまで繰り返します。
そのループの各ターンが1回の関数呼び出しです。モデルはツールを見渡し、1つを選び、あなたが実行し、その結果が次の判断を形づくります。これが、「最も安い航空券を見つけて予約して」のような曖昧なリクエストを、一連の具体的なツール使用——検索、比較、予約——に分解する仕組みであり、そのどれもモデル自身は実行せず、すべてをモデルが指揮します。エージェントとはループの中の関数呼び出しだと見えてしまえば、エージェント的システムの一見魔法のような振る舞いはずっと謎でなくなります。それは同じ6ステップの流れを、ゴールに向けて繰り返し走らせているだけなのです。
どこで間違うのか
関数呼び出しは、テキストのみの生成にはない失敗モードをもたらします。それらを予期することが、堅牢なシステムを作ることのほとんどです。
- モデルが間違ったツールや間違った引数を選ぶ。 モデルはあなたの記述に基づいて判断するので、貧弱な記述は貧弱な判断を生みます。曖昧だったり重複したりするツールがよくある原因です。
- ツールが失敗する。 APIがダウンしている、クエリがエラーになる、入力が無効。あなたのコードはツールの失敗を処理し、モデルに何を報告し返すかを決めなければなりません。何が悪かったかを伝えれば、モデルはしばしば優雅に立ち直れます。
- モデルが引数をでっち上げる。 必要な情報がすべて揃わないままツールを呼ぶよう求められると、モデルはもっともらしいが間違った値を埋めるかもしれません。処理する前に引数を検証し、決して鵜呑みにしないこと。
- ループが暴走する。 エージェントの設定では、モデルが収束しないままツールを呼び続けて行き詰まることがあります。ステップ数のガードレールが、混乱したエージェントが永遠に走り続けるのを防ぎます。
これらは珍しいエッジケースではありません——ツールを使った開発の通常の手触りであり、本番システムはそのすべてを処理しなければなりません。
飛ばせないセキュリティ境界
ツールが実際のアクションを取るため、関数呼び出しはセキュリティの面でもあります。そして不注意が最も高くつく唯一の場所です。指導原則は、モデルのツール呼び出しリクエストが信頼できない入力だということです。それはユーザーのプロンプトによって形づくられ、ユーザーはあなたが意図しない形でモデルにツールを呼ばせようと仕向けることができます。
つまり、信頼できないユーザーに任意の引数で起動させたくないツールを、モデルに決して与えないこと。処理する前にあらゆる引数を検証すること。各ツールができることを、仕事が許す限り狭く絞ること。自社システムへの他のあらゆる経路に適用するのと同じ認可とレート制限を適用すること。レコードを削除したりお金を使ったりするツールは、公開データフィードを読むだけのツールよりはるかに慎重さを要します。モデルが判断し、あなたのコードが実行前に検証しなければなりません。
まとめ
関数呼び出しは、テキスト生成器を実際にアクションを取るシステムへと変えるものです——モデルがあなたのどのツールをどんな入力で使うかを判断し、実際の実行はあなたのコードが行います。その境界こそが核心です。モデルは意思決定者、アプリケーションは手であり、実行の制御はあなたの手に残ります。有能なアシスタントが記述だけから使えるほど明確にツールを記述し、避けられない誤選択やツールの失敗を処理し、すべてのツール呼び出しを処理前に検証する信頼できない入力として扱いましょう。これを正しく行えば、関数呼び出しはエージェントの、そして実際の仕事をこなすあらゆるアプリケーションの土台となります——端から端まで筋道を追える、たった1つのシンプルな6ステップの流れの上に築かれて。
