ツール使用(ツール使用、または関数呼び出しとも呼ばれる)は、大規模言語モデルが応答生成の一部として、外部の関数、API、プログラムを構造化された方法で呼び出すことを可能にする能力です。ツール使用を備えたモデルは、自然言語テキストのみを生成する代わりに、通常は名前付き引数を伴う関数呼び出しに似た形式の構造化リクエストを出力でき、それを周囲のアプリケーションがモデルの代わりに実行します。その結果はモデルに返され、多くの場合、コンテキストウィンドウに挿入され、モデルはその情報を最終回答に組み込むか、さらなる行動を決定できます。ツール使用は、AIエージェントが自身のテキスト生成以外のもの(データベース、計算機、検索エンジン、コード実行環境、その他のソフトウェアを含む)と相互作用するための基本メカニズムです。
開発
初期の言語モデルは平文テキストのみを生成できたため、外部システムとの相互作用は、自由形式の出力を解析して期待されるパターンに一致することを期待するしかなく、信頼性の低いアプローチでした。構造化された関数呼び出しは、2023年から主要な研究所によって一級のモデル機能として導入され、プロバイダーは、プロンプトで記述されたツールのセットに対する整形式の呼び出しを生成するようにモデルを特別に訓練し、呼び出しに含まれる引数を制約するスキーマも併せて提供しました。これにより、ツール使用は劇的に信頼性が高まり、2024年までにほぼすべてのフロンティアのチャットおよびAPIモデルで標準機能となり、2024年11月に導入されたAnthropicのモデルコンテキストプロトコルなど、異なるベンダーやアプリケーション間でツールの記述とモデルへの接続を標準化する広範な取り組みも並行して進められました。
実際の仕組み
典型的なツール使用のやり取りは3つの部分で構成されます。まず、呼び出し側アプリケーションが利用可能なツールをモデルに記述し、通常は関数名、説明、期待される引数タイプのリストとして、プロンプトに含めるか、その横に配置します。第二に、モデルがユーザーの要求に答えるために、自身では生成できない情報や行動(現在のデータの検索や正確な計算の実行など)が必要だと判断した場合、自然言語の回答ではなく、関連ツールへの構造化呼び出しを出力します。第三に、アプリケーションがモデルの外部でその呼び出しを実行し、結果が会話にフィードバックされ、その後モデルはそれを使用して最終回答を構成するか、別の呼び出しを発行できます。このループは単一のエージェントタスク内で何度も繰り返されることがあり、モデルは通常、ツール呼び出しが必要な場合と、自身の知識から直接回答できる場合を独立して判断するように訓練されます。
応用
ツール使用は幅広い実用的システムの基盤となっています。モデルには、最近の出来事に関する質問に答えるためのウェブ検索関数、計算や生成されたコードの実行と検証を行うコード実行ツール、特定のレコードを検索するデータベースクエリツール、メッセージ送信や外部システムのレコード更新などの行動を取るAPI呼び出しを与えることができます。また、検索拡張生成パイプライン(検索を呼び出し可能なツールとして公開する)や、コンピューター使用システム(「ツール」が狭いAPIではなくマウスやキーボードなどのグラフィカルインターフェースの制御である)の基盤でもあります。
信頼性と安全性
ツール使用は、平文テキスト生成にはない障害モードを導入します。モデルが誤ったツールを呼び出したり、不正形式や幻覚による引数を供給したり、ループ内で異常に多数のツール呼び出しを行ったりする可能性があるためです。ツール呼び出しには、メール送信から任意のコード実行まで、現実世界の副作用があるため、ツール使用はまた、敵対的なコンテンツによって利用可能なツールを悪用するようモデルが操作されるのを防ぐ方法など、独自の安全性の疑問を提起します。これはプロンプトインジェクションと密接に関連する攻撃パターンです。本番システムは通常、権限スコープ設定、重要アクションに対する人間の確認ステップ、コード実行や機密データにアクセスするツールのサンドボックス化によってこれに対処します。