# ツール呼び出しとは

LLMがデータの検索やシステムへの登録といった登録済みの機能から利用するものを選択し、実行の内容を指示する仕組みです。LLMに何を実行させるかは、登録する機能と、実行するアプリケーションや接続先のシステムの権限で決定されます。

## ツール呼び出しとは

ツール呼び出しはLLM（Large Language Model）が登録された機能の中から利用する機能を選択し、その実行の内容を指示する仕組みです。
英語では[Function CallingやTool Useと呼ばれ](https://platform.claude.com/docs/en/agents-and-tools/tool-use/overview)、登録する機能をツールと呼びます。
アプリケーションはツールの名前、用途の説明、入力の項目の定義をLLMに提供します。
LLMは依頼の内容とツールの説明から、ツールを呼び出すかどうかを決定し、呼び出すならツールの名前と入力の値を出力します。
自社で定義したツールはその出力に基づいてアプリケーションが実行し、結果をLLMに送信します。
LLMが社内のデータの参照やシステムの操作を応答の中で依頼できるようにする仕組みです。

たとえば社員が先月の東京の売上はいくらかと質問すると、LLMは売上の照会ツールを選択し、期間と地域を入力の値として出力します。
アプリケーションが売上のデータベースを照会して結果をLLMに送信すると、LLMはその数字を利用して回答を作成します。

![社員、アプリケーション、LLM、売上のデータベースのシーケンス図。アプリケーションが質問とツールの定義をLLMに送信し、LLMが出力したツールの名前と値で照会し、その結果からLLMが回答を作成する](https://media.marketing.kdotdev-tunnel.org/glossary-tool-use-47ee952a9ecd29d7b90b6d64b48ba65728ca98ec5957ad4a88bf74cc6afe8bcf.png)

社内の手続きに精通した担当者に、申請書の書式の一覧を配付して記入だけを依頼する形に近いものです。
担当者は該当する書式を選択して記入し、システムへの登録は書式を受理した窓口が行います。

例外は提供者のサーバーで実行されるツールです。
Web検索やコードの実行のように提供者のサーバーで実行されるツールは、[アプリケーションを経由せずに実行されます](https://platform.claude.com/docs/en/agents-and-tools/tool-use/overview)。
外部のMCPサーバーへの接続を[提供者に委任する方式](https://platform.claude.com/docs/en/agents-and-tools/mcp-connector)でも、実行の前にアプリケーションで値を検証できないことがあります。

ツール呼び出しを反復して、複数の手順を要する作業を処理するAIシステムがAIエージェントです。

ツールをアプリケーションの外部のサーバーから共通の方式で提供する場合はMCPを利用しますが、ツール呼び出し自体はMCPがなくても利用できます。

## LLMからシステムを操作する標準の手段がなかった問題

2023年6月に[OpenAIがFunction Callingを公開する](https://openai.com/index/function-calling-and-other-api-updates/)以前は、LLMのAPIに、社内のデータの参照やシステムの操作を指示させる標準の手段がありませんでした。
そのため多くの連携では、LLMに特定の書式で回答させ、その文章をプログラムで解析して処理を実行する必要がありました。
書式を逸脱した回答が混在すると解析に失敗し、どの機能を何の値で呼び出すかを安定して抽出できませんでした。

OpenAIは2023年6月に、モデルが関数の定義に従った値を出力する[Function Callingの機能を公開しました](https://openai.com/index/function-calling-and-other-api-updates/)。
現在は[AnthropicのClaude](https://platform.claude.com/docs/en/agents-and-tools/tool-use/overview)など、他の提供者のモデルにも同じ機能を備えたものがあります。
ツールの定義に厳密に従った値を出力させる設定もあり、書式の逸脱による解析の失敗を防止できるため、OpenAIは[常に有効にするよう推奨しています](https://developers.openai.com/api/docs/guides/function-calling)。

![以前は書式を指示した文章を解析し書式を逸脱すると失敗していたのに対し、ツール呼び出しでは定義に従った値を受信し、アプリケーションが検証して実行することを対比する図](https://media.marketing.kdotdev-tunnel.org/glossary-tool-use-cdad404ae17e5fb3458eb04f484931cc87d927cfb1985f8e1086e476a91707ba.png)

## ツール呼び出しの効果とコスト・リスク

### 効果

- 社内のデータベース、SaaS、検索を、LLMの回答の中で参照できる
- 最新の情報や社内に固有の情報を、学習のやり直しなしに回答へ反映できる
- 計算や照会をプログラムに委任すると、LLMの推測による数字の誤りを削減できる。ただしLLMがツールを利用せずに推測で回答することもあるため、照会した値を回答とともに表示する
- 登録や送信まで委任すると担当者の転記や入力の作業を削減できる

### コスト

- ツールの開発と保守。既存のAPI（Application Programming Interface）を呼び出す処理、入力の値の検証、誤りの処理を、ツールごとに実装し、接続先の変更に応じて改修する。工数は既存のAPIの有無、参照だけか書き込みもあるか、入力の値の検証の範囲で変動する
- 入力の増加。ツールの定義は毎回の入力に追加され、[入力のトークンとして課金される](https://developers.openai.com/api/docs/guides/function-calling)。ツールの実行の結果も次の入力に追加されるため、検索や照会の結果の行数が多い場合は、1回あたりの費用と待ち時間が増加する。出力する件数と項目を限定する
- 試験の工数。LLMが適切なツールを正確な値で選択するかを、実際の依頼の例で確認し、モデルやツールの説明を変更するたびに再確認する

### リスク

- ツールの選択と値の誤り。説明が類似したツールや多数のツールがあると、LLMが[利用すべきツールとは別のツールを選択することがある](https://www.anthropic.com/engineering/writing-tools-for-agents)。OpenAIは、最初に利用できるツールを目安として[20個未満にする](https://developers.openai.com/api/docs/guides/function-calling)よう勧めている
- 過剰な権限。OWASP（Open Worldwide Application Security Project）はLLMアプリケーションのリスク一覧で、AIへの過剰な権限付与である[Excessive Agencyの原因](https://genai.owasp.org/llmrisk/llm062025-excessive-agency/)を3つ列挙している。不要な機能、過大な権限、確認なしの実行である。誤作動や攻撃の原因に関係なく、付与する権限が広範なほど、誤実行の対象になる操作の範囲も拡大する
- プロンプトインジェクション。ツールで取得したメールやWebページに挿入された命令文で、[LLMの動作が変更される](https://genai.owasp.org/llmrisk/llm01-prompt-injection/)ことがある。その命令に従って、別のツールで送信や削除をさせられるおそれがある
- 二重の実行と繰り返し。誤りの後の再試行で同じ登録を二重に行うことや、ツールの呼び出しが停止せず、接続先のAPIの利用の上限を超えることがある
- データの送信。照会の結果はLLMに送信され、モデルの提供者のサービスで処理される。顧客情報や機密情報を出力するツールでは、提供者の契約で学習への利用と保管の条件を確認する

![効果は社内データの参照と転記の削減、コストは開発と保守、入力の増加、ツールの選択の動作の確認、リスクは選択の誤り、過剰な権限、外部の文章に挿入された命令、二重の実行、データの送信](https://media.marketing.kdotdev-tunnel.org/glossary-tool-use-9f37d610fb8161da982a0d2038d69ba1b5313beb8a1e3f9b06c6f888f255d66b.png)

## LLMに提供するツールと権限の決定方法

ツールは業務に必要な操作だけに限定し、権限はツールを実行するアプリケーションと接続先のシステムで判定します。
LLMの出力は依頼の文章や参照した文書によって変化するため、LLMが危険なツールを呼び出さないことを前提にした設計は成立しません。
呼び出されても問題のない範囲だけを、ツールとして登録します。

| 操作の種類 | 例 | 扱い |
|---|---|---|
| 参照 | 売上の照会、在庫の確認、社内文書の検索 | 依頼した社員が閲覧できる範囲に限定し、自動で実行する |
| 取り消し可能な書き込み | 下書きの保存、社内のタスクの登録 | 件数と金額の上限の範囲内なら、実行を記録して自動で実行する |
| 社外への影響や取り消しが困難な操作、上限を超える書き込み | メールの送信、支払い、データの削除、一括の更新 | 実行の直前に人が内容を確認して承認する |
| 業務に不要な操作 | 管理者の設定の変更、全件の出力 | ツールとして登録しない |

![操作の種類ごとの扱いの判断の図。業務に不要な操作は登録しない。参照は依頼者の閲覧範囲で自動実行する。上限内の取り消し可能な書き込みは記録して自動実行し、それ以外は実行の直前に人が承認する](https://media.marketing.kdotdev-tunnel.org/glossary-tool-use-ba4304c6b7a90fc13c0552f2c4d883ea1c1ed4639069f64fcdf5527b6dac2fe5.png)

上限は社内の決裁の権限で定めた金額や件数と同じにします。
1つの依頼で上限を分割して回避されないよう、同じ依頼で行う操作の金額と件数は合算して判定します。

承認の対象を過度に拡大すると、確認の件数が増加して担当者が内容を確認せずに承認するおそれがあります。
承認は表で人の承認とした操作に限定し、上限の範囲内の取り消し可能な書き込みにまで拡大しません。

権限の設計では次の4点を確認します。

- 誰の権限で実行するか。管理者の共有アカウントではなく、依頼した社員の権限か、業務ごとに作成した専用のアカウントで実行する
- 入力の値をどこで検証するか。金額の上限、対象の件数、操作できる顧客の範囲は、ツールの側のプログラムで検証し、範囲外なら実行しない
- 二重の実行と繰り返しをどう防止するか。同じ依頼を再度受信しても登録が重複しない設計にし、1件の依頼あたりの呼び出し回数に上限を設ける
- 何を記録するか。どの依頼で、どのツールを、どの値で実行し、どのような結果だったかを1件ごとに記録する。記録に含まれる個人情報の保存期間と閲覧者も決定する

前述の提供者のサーバーで実行されるツールや提供者に接続を委任した外部のサーバーは、この検証の対象外になることがあります。
その場合は接続先のシステムに付与する権限を参照だけに限定するか、提供者が実行の前の承認を設定できる場合はそれを利用します。
どちらもできない場合は書き込みや削除のツールを無効にします。

ツールの組み合わせでも確認します。
社内のデータを参照するツールと、メールやWebページなど外部の文章を取得するツールを同じLLMに提供すると、外部の文章に挿入された命令で社内のデータを外部に送信させられるおそれがあります。
外部のURLを指定して取得できるツールでは、URLに含めた社内のデータが、取得の要求とともに外部に送信されます。
ツールを追加するときはそのツール単体ではなく、同じLLMに提供しているツールの組み合わせで確認します。

### ツール呼び出しが不要な場合

次の場合はLLMにツールを選択させる必要はありません。

- 手順が毎回同じで、どのAPIをどの値で呼び出すかをプログラムで決定できる処理。LLMに選択させずに、プログラムから直接呼び出すほうが、結果を予測しやすく、LLMの利用料も発生しない
- 社内文書の内容に回答するだけの用途。検索の結果を入力に追加する構成で十分で、書き込みのツールは不要

## よくある誤解

### LLMがシステムを直接操作している

自社で定義したツールでLLMが出力するのは、呼び出すツールの名前と入力の値だけです。
実際にデータベースを照会し、メールを送信するのはアプリケーションのプログラムです。
そのため、権限の確認、入力の値の検証、人の承認は、アプリケーションの側で実装できます。
アプリケーションがLLMの出力を検証せずに実行すると、誤りを含む指示もそのまま実行されます。

### ツールの説明に禁止事項を記載すれば危険な操作は実行されない

ツールの説明やプロンプトに、削除は実行しないと記載しても、LLMがその指示に従う保証はありません。
プロンプトインジェクションや依頼の言い回しによって、LLMの判断は変化します。
実行させたくない操作はツールとして登録せず、実行の可否はツールの側の権限で判定します。
