LLMは「知らないこと」を知らない
2023年、ChatGPTの登場は世界を席巻しました。自然な対話、コードの生成、文章の要約——大規模言語モデル(LLM)は、人間とコミュニケーションできる「知能」として、あらゆる分野に衝撃を与えました。
しかし、LLMを実際の業務に組み込もうとした開発者たちは、すぐに一つの壁にぶつかりました。
LLMは「知らないこと」を知らない。
LLMは膨大なテキストで訓練されていますが、その知識には明確な限界があります。
第一に、訓練データ以降の新しい情報を知りません。第二に、自社の社内文書、顧客データ、専門分野の知識という「プライベートな知識」を持ちません。そして第三に、知らないことを聞かれたとき、もっともらしい嘘をつく「ハルシネーション」という問題を抱えています。
この壁を突破する技術が**RAG(Retrieval-Augmented Generation、検索拡張生成)**です。
RAGというアプローチ
RAGの発想はシンプルです。LLMに質問が来たら、まず外部の知識ベースから関連情報を検索し、その情報をプロンプトに追加してからLLMに回答を生成させる。これだけのことです。
ユーザー質問 → [関連文書を検索] → 検索結果 + 質問をプロンプトに統合 → LLMが回答生成
しかし、この「これだけのこと」の中に、多くの技術的な挑戦が詰まっています。ドキュメントをどう分割するか、ベクトル化をどう行うか、検索の精度をどう上げるか、検索結果をどうプロンプトに組み込むか、回答の根拠をどう示すか。RAGの実装は、一見シンプルですが、実は多数の設計判断の積み重ねで成り立っています。
LLMの知識の3つの限界
1. 訓練データ以降の新しい情報を知らない
LLMの知識は、訓練データの収集時点で凍結されます。2024年に訓練されたモデルは、2025年の出来事を知りません。これが「知識のカットオフ」問題です。
2. プライベートな知識を持たない
社内文書、顧客データ、専門分野の知識——これらはインターネット上に公開されていないため、LLMの訓練データに含まれていません。業務で使うには致命的な制約です。
3. ハルシネーション — もっともらしい嘘
LLMは「知らない」と素直に言うのではなく、もっともらしい嘘をつくことがあります。これはLLMが確率的に「もっともらしい」テキストを生成する仕組みに起因します。
RAGは、これら3つの問題に対して「外部の知識ベースから正しい情報を検索し、それをLLMに渡す」ことで対処します。
RAGの基本的な処理フロー
RAGシステムは大きく2つのフェーズで構成されます。
フェーズ1: インデックス構築(事前準備)
# 疑似コードで示すRAGのインデックス構築
documents = load_documents("社内Wiki/", "PDF資料/")
chunks = split_into_chunks(documents, chunk_size=512)
embeddings = embedding_model.encode(chunks)
vector_store.add(embeddings, chunks)
- ドキュメントの読み込み — PDF、HTML、Markdown等の文書を取り込む
- チャンク分割 — 長い文書を検索可能な単位に分割する
- Embedding — 各チャンクをベクトル表現に変換する
- ベクトルストアに保存 — 検索可能な形式で格納する
フェーズ2: 検索と生成(クエリ時)
# 疑似コードで示すRAGの検索〜回答生成
query = "去年の売上データを教えて"
query_embedding = embedding_model.encode(query)
relevant_chunks = vector_store.search(query_embedding, top_k=3)
prompt = f"""
以下の情報を参考にして質問に答えてください。
{format_context(relevant_chunks)}
質問: {query}
"""
answer = llm.generate(prompt)
- クエリのベクトル化 — ユーザーの質問をEmbedding
- 類似検索 — ベクトルストアから最も関連性の高いチャンクを取得
- プロンプト構築 — 検索結果をコンテキストとして組み込む
- LLM生成 — コンテキストを参照しながら回答を生成
RAG設計の主要な判断ポイント
RAGを構築する際、以下の設計判断が精度を大きく左右します。
- チャンクサイズ — 128/256/512/1024トークン。小さすぎると文脈欠落、大きすぎるとノイズ増加
- Embeddingモデル — OpenAI/BGE/E5等。日本語精度に差が出る
- 検索方式 — ベクトル検索/BM25/ハイブリッド。ハイブリッドが最も精度が高い傾向
- リランキング — あり/なし。検索精度をさらに向上させる
- top_k — 3/5/10/20。多すぎるとプロンプトが長くなる
- コンテキスト構築 — 順序保持/圧縮。LLMが参照しやすい構造にする
RAGをさらに学ぶために
RAGは一見シンプルですが、各コンポーネントの設計判断がシステム全体の精度を左右します。より深く学びたい方に、以下の書籍を紹介します。
RAG構築入門 — 自社データでAIを賢くする(著者: 葉山悠希)
全10章30節でRAG構築の全工程をコード付きで網羅。Embedding、ベクトルDB、チャンク分割、ハイブリッド検索、リランキング、評価手法まで実装レベルで解説。
Amazonで購入する(Kindle Unlimited対応)