はじめに
近年、LLM(大規模言語モデル)に外部知識を活用させる手法が次々と登場しています。
調べていて「RAG」「MCP(Model Context Protocol)」「Function calling」といった手法がありますが、何が違うの?と疑問に思いました。
この記事では、これら3つの技術の違いを、仕組み・フロー・活用シーンの観点から整理して解説します。
1. RAG(Retrieval-Augmented Generation)
「回答を生成する前に、関連情報を探してくる」仕組み
RAGは、ユーザーの質問に対して、LLMに渡す「コンテキスト」を事前に検索して拡張する技術です。
仕組み
ユーザーのクエリに基づき、ベクトルデータベース等から関連文書を検索し、その内容をプロンプトに含めてLLMに渡します。
特徴
-
タイミング
LLMを呼び出す前に検索が行われます。 -
データ
大量の静的なドキュメント(社内Wiki、PDF、FAQなど)の扱いに長けています。 -
主導権
アプリケーション側が検索プロセスを制御します。
フロー
検索は LLM呼び出し前に行い、主導権はアプリ側にあります
2. Function Calling
「LLMの判断をもとに、アプリの機能を実行する」仕組み
Function Callingは、LLMが「この関数をこの引数で実行すべきだ」と判断し、その判断をもとにアプリケーションが処理を実行する形態です。
LLM自身が関数を実行するわけではなく、
どの処理を行うかの判断のみを担い、実行は常にアプリケーション側で行われます。
仕組み
LLMは関数のパラメータを生成します。
アプリケーションはその内容を受け取り、対応する関数を実行し、
その結果を再度LLMに渡して最終的な回答を生成します。
特徴
-
役割分担
LLMは「どの処理が必要か」を判断し、アプリケーションが実行を担います。 -
実装
関数定義や実行後の処理フローは、アプリケーションごとに個別実装が必要です。 -
実行対象
アプリケーション内部に用意された関数・APIを実行します。
フロー
LLMは処理内容を判断し、実行はアプリケーション側で行われます。
3. MCP(Model Context Protocol)
「LLMの判断に応じて、外部ツールを利用する」仕組み
MCPは、AIモデルと外部ソースを連携させるための共通プロトコルです。
LLMは回答生成の途中で「追加の情報や処理が必要だ」と判断し、その判断をもとにアプリケーションがMCPサーバー上のツールを利用します。
仕組み
MCPでは以下の要素が関与します。
- ユーザー
- アプリケーション(MCP Host)
- LLM
- MCPサーバー(ツール提供者)
LLMは推論の途中でツール利用の必要性を判断しますが、
実際にMCPサーバーへリクエストを送るのはアプリケーション側です。
特徴
-
取得タイミング
回答生成中に、LLMの判断に応じて必要な情報や処理結果を取得します。 -
再利用性
ツールの定義・実行方法が共通プロトコルで標準化されており、複数のアプリやLLMから再利用できます。 -
実行対象
アプリケーション外部にあるMCPサーバー上のツールを実行します。
フロー
LLMが「どのツールを使うべきか」を判断し、
その判断を受けてアプリケーションがMCPサーバー上のツールを実行します。
4. 比較まとめ
それぞれの違いを以下の表にまとめました。
| 比較項目 | RAG | Function Calling | MCP |
|---|---|---|---|
| 情報・処理の判断タイミング | 生成前 | 生成中 | 生成中 |
| 判断主体 | アプリケーション | LLM | LLM |
| 実行主体 | アプリケーション | アプリケーション | アプリケーション |
| 主な対象 | 事前インデックス化した文書 | アプリ内部の関数・API | 外部ツール(MCPサーバー) |
| 再利用性 | データベース依存 | 低い(アプリ固有) | 高い(共通プロトコル) |
| 実行場所 | アプリ内 | アプリ内 | アプリ外(MCPサーバー) |
5. MCPで起きていることもFunction Calling的な動作
MCPでも結局は、LLMが「この関数(ツール)を使いたい」と判断して、その関数が実行されて結果がLLMに返る。これは Function Calling と同じ構造です。
最も重要な違いは、標準化されているかどうか。
MCPは、関数の定義・発見・実行をアプリの外に切り出し、複数のアプリやLLMから再利用できる形で標準化した点が決定的に異なります。
6. RAGとMCPは「両立」できる
これらは対立する技術ではなく、補完的な関係にあります。
-
MCPの中でRAGを実行する
MCPサーバーがベクトルデータベースを検索し、その結果をLLMに返す構成も可能です。 -
使い分け
大規模な静的ドキュメント検索は「RAG」、最新のAPI連携や複雑な業務エージェントとしての動きは「MCP」といった使い分けが効果的です。
おわりに
RAGは「知識を渡す方法」、Function Callingは「処理を実行させる方法」、MCPは「それらをLLMから使うための標準化された基盤」 と言えるでしょう。
それぞれのプロトコルやフローの違いを理解することで、より高度で実用的なAIサービスを構築したいですね。