0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

RAG(検索拡張生成)とは — LLMの「知識の壁」を突破するアーキテクチャ

0
Last updated at Posted at 2026-08-21

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)
  1. ドキュメントの読み込み — PDF、HTML、Markdown等の文書を取り込む
  2. チャンク分割 — 長い文書を検索可能な単位に分割する
  3. Embedding — 各チャンクをベクトル表現に変換する
  4. ベクトルストアに保存 — 検索可能な形式で格納する

フェーズ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)
  1. クエリのベクトル化 — ユーザーの質問をEmbedding
  2. 類似検索 — ベクトルストアから最も関連性の高いチャンクを取得
  3. プロンプト構築 — 検索結果をコンテキストとして組み込む
  4. 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対応)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?