メモリと外部知識(RAG)
レッスン2で「コンテキストウィンドウには上限がある」「LLMは誤ることがある」と学びました。結論から言うと、メモリと外部知識(RAG)は、この2つの弱点を補うための仕組みです。Lilian Weng もメモリをエージェントの中心要素のひとつに挙げています。
短期記憶と長期記憶
- 短期記憶: いま進行中の会話履歴や、思考の途中経過を書きためる「スクラッチパッド(下書き帳)」。コンテキストウィンドウの中に収まる範囲の記憶です。
- 長期記憶: ウィンドウに収まりきらない大量の情報を、外部に保存しておく記憶。必要なときだけ取り出してウィンドウに入れます。
人間でいえば、短期記憶は「いま頭に置いていること」、長期記憶は「ノートや本棚」に近いイメージです。
埋め込みとベクトル検索
長期記憶を実現する代表的な方法が埋め込み(embedding)とベクトル検索です。
- 埋め込み: 文章を「意味を表す数値の並び(ベクトル)」に変換すること。意味が近い文章どうしは、ベクトルとしても近くなります。
- ベクトル検索: 質問も埋め込みに変換し、保存済みの文章ベクトルの中から「意味的に近いもの」を探し出す検索です。キーワードが一致しなくても、意味が近ければ見つけられます。
RAG(検索拡張生成)
これらを使って外部知識を活かす代表的な手法が**RAG(Retrieval-Augmented Generation、検索拡張生成)**です。2020 年の論文「Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks」で提案されました。
仕組みは単純で、まず質問に関連する文書を検索して取り出し、その内容をプロンプトに添えてから回答を生成させるというものです。原論文では、モデル内部の知識(パラメトリック記憶)に、ウィキペディアのベクトル索引という外部記憶(非パラメトリック記憶)を組み合わせ、より事実に即した回答が得られるとされています。
質問 → 関連文書を検索 → 文書を添えてLLMに渡す → 根拠に基づいて回答
RAG の利点は2つあります。第一に、コンテキストの上限を超える大量知識でも、必要分だけ取り出して使えること。第二に、外部データを更新すれば知識の鮮度を保て、再学習なしに最新情報を反映できることです。
まとめ
メモリは短期(会話・スクラッチパッド)と長期(埋め込み+ベクトル検索)に分かれ、RAG は関連文書を検索して回答の根拠にする手法です。これらがコンテキスト制限と鮮度・正確さの問題を補います。次は、ここまでの部品をどう組み合わせるかという「設計パターン」に進みます。