SNSなどを見ていると、RAG(Retrieval Augmented Generation)を盲信している人が未だに多いと感じます。これはRAGの仕組みを全く理解していないか、完璧に制御しているつもりかのどちらかであると考えられます。今回は、なぜRAGを盲信すべきではないのかを深掘りしていきましょう。
1. RAGの原理:関連スコアの罠と取り込み割合の現実
RAGの仕組みはシンプルです。まず、あなたの質問は意味ベクトルに変換されます。 そのベクトルを使って、LLMはベクトルデータベースから最も関連性の高いドキュメントのチャンク(断片)を検索し、それらのチャンクをLLMへの入力に組み込み、回答を生成します。
ここで重要なのは、この「関連性」がベクトルデータベースにおける関連スコアによって判断されるという点です。これは人間が「この情報が必要だ」と直感的に考えるのとは全く異なります。たとえば、ドキュメント全体で言及されている重要なルールであっても、クエリとの関連スコアが低ければ、検索結果として取得されず、AIには伝わりません。
さらに、RAGは文書全体を網羅的に取り込むことを目的としていません。 例えば、500トークンの文書を与えたとしても、その全体がAIに渡されるわけではないのです。一般的なRAGシステムでは、文書の約10%〜50%程度が取り込まれることが多く、100%になることは期待できません。これは、RAGが文書をより小さなチャンクに分割し、クエリと関連性が高い順に上位K個のチャンクのみをLLMに渡すという仕組みによるものです。RAGは質問に最も関連する部分をピンポイントで抽出することに特化しており、この特性が、プロンプトで文書全体を直接与えた場合とは異なる振る舞いを引き起こすのです。
2. プロンプトの原理:コンテキストウインドウの確実性
一方、プロンプトに直接情報を書き込む場合はどうでしょうか。プロンプトは、LLMのコンテキストウインドウという限られたメモリ空間に直接送られます。このコンテキストウインドウという限られたスペースに収まる限り、あなたが書いた情報は100%確実にAIに渡されます。
プロンプトは、ドキュメント全体や複雑なルールセットを、あなたが意図した通りにAIに伝えるための現状においては唯一の確実な手段です。RAGが「もしかしたら必要な情報が伝わらないかもしれない」という不確実性をはらんでいるのに対し、プロンプトは情報を確実に伝達する決定論的な方法と言えます。
この点がRAGとは決定的に異なる点であり、確実に実行してもらいたいルールほどRAGでなくプロンプトで与えるべきであることを理解するために必要な最初のチェックポイントとなります。
3. 「AIはルールを守ってくれない」の正体
多くの人が「AIはルールを守らない」と感じるのは、RAGとプロンプトの原理の違いを理解していないからに他なりません。あなたが「このルールを守って回答してほしい」と考えているとき、RAGは必要な情報全体ではなく、関連スコアの高い部分的な情報しか取得しません。この情報の欠落が、AIが期待外れの行動をとる根本原因です。
ましてや、専門的な文書や規約など、細かなルールが重要な場面では、プロンプトに比べて情報の欠落がより深刻な問題となります。
注意すべきは、たとえプロンプトで直接与えた情報であっても、デコーダの確率的な性質により、ルールが完全に遵守されない可能性があることです。
つまり、RAGを使う場合、 「必要な情報がそもそもコンテキストに乗らない」 という問題に加えて、 「載った情報にAIが従わない可能性がある」 という二重の不確実性が加わります。プロンプトの場合も同様に、コンテキストウインドウの制限という情報の欠落リスクに加え、デコーダの不確実性が存在しますが、RAGと比較すれば安定していることは確かです。
もう一つ無視出来ないものとして、ルールの前提条件がチャンクAに、具体的な内容がチャンクBにある場合、どちらか一方しか検索されなければ、ルール全体がAIに伝わらないということが挙げられます。あなたが言ったつもりでもAIは常に関係ないと判断すれば聞き逃すというだけです。
入力時と出力時の二つの不確実性が組み合わさることで、AIがルールから逸脱する可能性はさらに高まります。RAGが提供する断片的な情報と、デコーダの不確実性が相互に作用し、AIの振る舞いをより予測不能なものにすることを知れば、RAGを用いてルールを伝えることが如何に危険であるかに気付くことが出来ます。
結論:目的に応じたコンテキストエンジニアリングの使い分け
RAGの振る舞いは、使用するモデルによっても異なります。これは、各モデルがRAGを処理する内部的なアルゴリズムや、確率的生成の傾向が異なるためです。GeminiやClaudeといった特定のモデルの振る舞いを通じて、本当に守って欲しいルールはプロンプトで伝えるべきという重要な示唆が得られます。これは、AIの活用においてルールを知ることが如何に重要であるかという気づきにつながるはずです。
RAGは、一時的な情報検索や幅広い知識を必要とする単発のプロンプトには非常に有効なツールです。しかし、厳密なルール遵守や再現性が求められるエンジニアリングのワークフローにおいては、その不確実性が致命的になることもあります。
真に高品質で安定したAIシステムを構築するためには、闇雲にRAGに頼るべきではありません。むしろ、エンジニアが責任を持って厳選し、構造化した最小限かつ十分な情報をプロンプトとしてAIに与えるアプローチこそが重要です。RAGを盲信しないことはプロンプトエンジニアリング/コンテキストエンジニアリングの双方で役に立つテクニックであり、現状においてはモデルを選ばない有用な知識です。
一方で調べ物の様なケースにおいてRAGが有効であることは以前の記事でも触れています。RAGをどの様に利用するかという使い分けも非常に重要な判断になります。