RAG — LLMに「カンニングペーパー」を渡す
賢いLLMでも、答えられないことがあります。たとえば「あなたの会社の返品ルール」や「昨日公開されたばかりのニュース」。学習した時点で世の中に無かった情報や、社内だけの非公開情報は、知りようがないからです。知らないのに無理に答えると、それらしい嘘(ハルシネーション)が出てきます。
RAG(検索拡張生成)は、この弱点を埋める発想です。質問が来たら、まず関係しそうな資料を検索し、見つけた文章を質問と一緒にプロンプトへ詰め込んで(=カンニングペーパーを渡して)から答えさせます。下の図1で、質問を選び、RAGのON/OFFを切り替えて答えがどう変わるか試してください。
検索して、詰め込んで、答える
RAGの中身は3ステップだけです。①検索: 質問に近い資料を資料庫から探す(図1では言葉の重なりで点数化していますが、実務では「意味の近さ」をベクトルで測ります)。②詰め込み: 見つけた文章を質問と一緒にプロンプトへ入れる。③生成: LLMは渡された資料を根拠に答える。モデル自身を再学習させなくても、資料庫を差し替えるだけで知識を最新化できるのが大きな利点です。
RAGをOFFにすると、同じ質問でもLLMは記憶だけで推測し、もっともらしいが当てにならない答えを返します。ONにすると、回答が渡した資料に根拠を持つようになります。だからRAGの精度は「①検索でどれだけ的確な資料を拾えるか」にかかっています。ピント外れの資料を渡せば、LLMはその外れた資料に引きずられてしまうのです。
- RAG
- 検索拡張生成。外部の資料を検索し、プロンプトに足してから回答させる手法。
- ハルシネーション
- LLMが事実でないことを、もっともらしく答えてしまう現象。
- 検索(Retrieval)
- 質問に関連する文書を資料庫から取り出す工程。意味の近さ(ベクトル)で測ることが多い。
- グラウンディング
- 回答を、渡した資料という「根拠」に結びつけること。出典を示しやすくなる。
まとめ
RAGは「LLMにカンニングペーパーを渡してから答えさせる」仕組みです。モデルを訓練し直さなくても、資料庫を用意するだけで、社内情報や最新情報にも正確に答えられるようになります。図1でRAGをON/OFFして、同じ質問なのに答えの確かさがまるで変わるのを体験してください。鍵は「検索でどれだけ良い資料を拾えるか」 —— 渡す資料の質が、答えの質を決めます。