生成AIとツール連携の進化史:RAG・ReAct・Function Callingと「M×N問題」

生成AIはここ数年で急速に普及しましたが、実務で使おうとすると「ツールが多すぎて、結局どう設計すればいいのか分からない」という混乱が起きやすい分野でもあります。
本記事では、生成AIが外部ツールと連携しながら精度を上げていく流れを、時系列で分かりやすく整理します。
1. ツール乱立による混乱の歴史がある
生成AIは自然な文章を生成できますが、業務で求められるのは「それっぽい文章」ではなく、正しい答えや根拠のある説明です。
しかし生成AIには、もっともらしく誤ったことを言ってしまう「ハルシネーション」という弱点があります。
この弱点を補うために、
- 検索と組み合わせる
- 外部ツールを使わせる
- 手順を分解して考えさせる
といった方法が次々に提案されました。
その結果、手法やツールが増えすぎて全体像が分かりにくくなる、という状況も生まれました。
2. 2020〜2022年:RAG(検索拡張生成)の普及
生成AIと検索を組み合わせる代表的な手法が RAG(Retrieval Augmented Generation:検索拡張生成) です。
RAGの考え方はシンプルです。
- まず検索を実行する(社内文書・DB・Webなど)
- 見つかった情報を生成AIに渡す
- その情報を根拠に回答させる
これにより、生成AIが「知らないことを適当に作る」リスクを下げられます。
RAGは2020年頃から研究として存在し、2022年以降に実装・普及が加速しました。
3. 2022年:ReAct(推論と行動の反復)
次に注目されたのが ReAct(Reasoning and Action) です。
これは、生成AIが次の流れを繰り返すことで精度を高めるという考え方です。
- 推論する(Reasoning)
- ツールを呼び出す(Action)
- 結果を観察する(Observation)
- さらに推論する
つまり、生成AIが「一発で答えを作る」のではなく、
人間のように途中で調べたり確認したりしながら答えに近づく方式です。
4. 初期のツール連携は「プロンプトでJSONを作らせる」方式だった
Function Callingが普及する前のツール連携は、プロンプトで次のように実装されることが多くありました。
- ツール呼び出し用のJSON形式をプロンプト内で指定する
- 生成AIがJSONを返す
- アプリ側がJSONをパースしてツールを呼ぶ
しかし、この方式には実務上の課題が多くありました。
- JSONが壊れる(カンマ抜け、括弧不足など)
- JSONの前後に余計な説明文が混ざる
- 引数名が勝手に変わる
- そもそもJSONを返さず文章で返す
つまり、ツール連携の入口が不安定で、運用が難しかったのです。
5. 2023年:Function Callingの登場
この問題を大きく改善したのが Function Calling です。
これは「生成AIがツールを呼び出す方法」を、システムとして正式に規定する仕組みです。
Function Callingでは、開発者が次の情報を明確に定義できます。
- ツール名
- ツールの説明
- 引数の型(文字列、数値など)
- 必須/任意の区別
そして生成AIは、文章ではなく
構造化された形式でツール呼び出し情報を返すようになります。
これにより、
- JSONが壊れる
- 説明文が混ざる
- 引数が揺れる
といった課題が大きく減り、ツール連携が実用レベルになりました。
6. モデルとツールが増えるほど「M×N問題」が顕在化する
Function Callingによってツール連携が実装しやすくなると、次に現場で問題になるのが M×N問題 です。
これは次の意味です。
- 生成AIモデルが M 個ある
- ツール(Functions / API)が N 個ある
- すると「モデル×ツール」の接続・検証が M×N の組み合わせで必要になる
つまり、あるツールを追加しただけでも、
- どのモデルで期待通り呼べるか
- 引数生成の癖はないか
- エラー時の挙動はどうなるか
- セキュリティ上の制約を守れるか
といった検証が、モデルの数だけ増えていきます。
また逆に、モデルを追加した場合も、
- 既存の全ツールとの互換性
- ツール選択の精度
- 出力形式の安定性
を改めて確認する必要があります。
このように、生成AIが実務の基盤に入り始めると、
単に「ツールを増やせば便利になる」だけではなく、
接続・検証・保守の負担が爆発的に増えるという問題が顕在化します。
7. まとめ:生成AIは「文章生成」から「処理の司令塔」へ進化した
ここまでの流れをまとめると、生成AIの進化は次のように整理できます。
- RAGにより「検索して根拠を持つ」方式が普及した
- ReActにより「推論しながら行動する」方式が広まった
- Function Callingにより「ツール連携が安定して実装できる」ようになった
- その結果、モデルとツールが増え、M×N問題が顕在化した
つまり生成AIは、単なる文章生成AIではなく、
**複数のツールを動かして答えを作る“司令塔”**へと進化していると言えます。
