第8部 外部知識とツールでLLMを拡張する

第32章ツール利用とファンクションコーリング

LLMは言葉を扱うのが得意ですが、正確な計算や最新情報の取得、外部システムの操作はそのままではできません。 こうした苦手を補うのが、ツール利用とファンクションコーリングです。この章では、LLMに外部の機能を 使わせるしくみを見ていきます。LLMの弱点を、確実に動く道具で補う考え方です。

32.1LLMだけではできないこと

LLMは、厳密な計算、最新情報の取得、外部システムへの操作などが苦手です。これらは、それぞれ専用の機能に任せるのが適しています。

これまで見てきたとおり、LLMは言葉を扱うことに長けています。しかし、桁の多い計算を正確に行うこと、 今この瞬間の情報を取得すること、社内システムやデータベースを操作することなどは、LLM単体ではできません。 第15章で見たとおり、LLMは「もっともらしい続き」を生成するしくみなので、計算の答えも「それらしい数」を 出してしまい、正確さは保証されないのです。

これらは、それぞれ専用の機能に任せたほうが確実です。計算は計算プログラムに、最新情報はその情報を持つ サービスに、システムの操作はそのシステムに任せる。そこで、LLMに「必要なときは外部の機能を呼び出して よい」という形を用意します。これがツール利用の考え方です。LLMを、何でも一人でこなす存在ではなく、 必要に応じて道具を使う存在として捉え直すわけです。

32.2ファンクションコーリングのしくみ

ファンクションコーリングは、使える機能をLLMにあらかじめ伝えておき、必要なときにLLMが「この機能をこの引数で呼びたい」と示すしくみです。

ファンクションコーリングは、LLMに外部の機能を使わせるための代表的なしくみです。まず、どんな機能が 使えるか、その機能が何をして、どんな情報を渡せばよいかを、あらかじめLLMに伝えておきます。すると LLMは、応答の途中で外部の機能が必要だと判断したときに、「この機能を、この引数で呼びたい」という 形を返します。実際にその機能を実行するのはプログラム側で、得られた結果を再びLLMに渡すと、LLMはそれを 踏まえて応答を続けます。次のコードは、使える機能を伝えるイメージです。

Python(イメージ)
# 使える機能をLLMに伝えておく
tools = [
  {
    "name": "get_weather",
    "description": "指定した都市の現在の天気を返す",
    "arguments": {"city": "都市名"},
  }
]
# LLMが必要と判断すると get_weather("東京") のように呼びたいと返す

ここで大切なのは、LLM自身が機能を実行するわけではない、という点です。LLMは「この機能をこう呼びたい」と 提案するだけで、実際に動かすのはプログラムです。呼ぶかどうかの判断はLLMが、実行と結果の受け渡しは プログラムが担う、という役割分担になっています。

32.3外部APIや計算との連携

ツールとして、天気の取得や計算、データベースの検索など、さまざまな外部機能を用意できます。これにより、LLMの弱点を確実な手段で補えます。

ツールとして用意できる機能に、決まった制限はありません。天気や株価などの最新情報を取得する機能、 正確な計算を行う機能、社内データベースを検索する機能、メールを送る機能など、目的に応じてさまざまな ものを用意できます。前章までで見たRAGの検索も、こうしたツールの一つとして組み込むことができます。

LLMが苦手な部分を、確実に動く外部の機能に任せることで、全体として信頼できる振る舞いに近づけられます。 たとえば、計算はツールに任せれば正確な答えが得られ、最新情報はツールで取ってくれば古い知識に頼らずに 済みます。LLMの「言葉を扱う力」と、外部機能の「正確さ・最新性」を組み合わせるわけです。

32.4ツール利用の流れ

利用者の依頼を受けたLLMが必要な機能を選び、プログラムがそれを実行し、結果をLLMに戻して応答を仕上げる。この往復でツール利用は進みます。

依頼利用者から LLM機能を選ぶ プログラムが機能を実行 結果をLLMへ戻す 結果を踏まえてLLMが応答を仕上げる
図32-1 ツール利用の往復。LLMが機能を選び、プログラムが実行し、結果を戻して応答を仕上げます。

ツール利用の一連の流れを整理すると、次のようになります。まず、利用者の依頼をLLMが受け取ります。LLMは、 応答のために外部の機能が必要かを判断し、必要なら呼び出したい機能と引数を示します。次に、プログラムが 実際にその機能を実行し、結果を得ます。その結果をLLMに戻すと、LLMは結果を踏まえて応答を仕上げます。 場合によっては、この往復が複数回繰り返されることもあります。

実務メモ:ツールには「できること」を絞って与える

ツールを用意するときは、LLMに何でも実行させるのではなく、必要な機能だけを、安全な範囲で与えるのが 基本です。とくに、データを書き換える・外部にメールを送るといった、影響の大きい操作をツールにする 場合は注意が要ります。LLMの判断は完璧ではないため、想定外の呼び出しに備えて、実行できる範囲を あらかじめ制限し、重要な操作は人の確認をはさむようにします。次章のエージェントでも、この「与える 権限を絞る」という考え方が重要になります。

この「LLMが判断し、必要な機能を呼び、結果を踏まえて次へ進む」という流れを、さらに自律的に繰り返す ようにしたものが、次章で扱うAIエージェントです。ツール利用は、その土台となる重要なしくみです。

この章の要点

  • LLMは、厳密な計算・最新情報の取得・外部システムの操作が苦手で、これらは外部機能に任せます。
  • ファンクションコーリングは、使える機能をLLMに伝えておき、必要なとき呼び出しを示させるしくみです。
  • 実行するのはプログラムで、LLMは呼び出しを提案するだけ、という役割分担になっています。
  • 依頼→機能の選択→実行→結果を戻す、という往復でツール利用は進みます。
  • ツールには必要な機能だけを安全な範囲で与え、影響の大きい操作は人の確認をはさみます。