統計ロードマップ
2026-04-30·LLM·⏱ 約 5

RAG 入門 ─ LLM に外部知識を持たせる仕組み

Retrieval Augmented Generation(RAG)の仕組みを、Embedding・ベクトル DB・検索・生成の 4 要素に分解。社内文書 Bot を作る最短ルートを示します。

RAG(Retrieval Augmented Generation) は LLM に外部知識を持たせる最も実用的な手法。社内文書 Q&A・カスタマーサポート・コードアシスタントの定番パターンです。

なぜ必要か

LLM 単体の限界:

  • 学習時点の情報しか持たない ─ 最新ニュース ・ 社内文書は知らない
  • 幻覚(Hallucination) ─ もっともらしい嘘を作る
  • 根拠を示せない ─ なぜそう答えたか不明
  • コンテキスト長の限界 ─ 全文書を毎回投げられない

→ RAG で 必要な部分だけ を毎回取得して LLM に渡す。

RAG の流れ(5 ステップ)

  1. チャンキング: ドキュメントを 200〜1000 トークン程度の塊に分割
  2. Embedding: 各塊を密ベクトル(例: 1536 次元)に変換
  3. ベクトル DB に保存: Pinecone ・ Weaviate ・ pgvector など
  4. 検索: ユーザー質問を Embedding 化 → 類似ベクトルを Top-k 取得
  5. 生成: 取得した塊 + 質問を LLM に渡して回答生成

Python での最小実装

OpenAI + ChromaDB
import chromadb
from openai import OpenAI

client = OpenAI()
db = chromadb.Client()
coll = db.create_collection('docs')

# Step 1-3: ドキュメント追加
docs = [
    '統計検定 2 級は CBT 形式で 90 分。',
    '統計検定 2 級の合格率は約 40〜50%。',
    '受験料は一般 7,000 円・学割 5,000 円。',
]
embs = [
    client.embeddings.create(input=d, model='text-embedding-3-small').data[0].embedding
    for d in docs
]
coll.add(ids=[f'd{i}' for i in range(len(docs))], documents=docs, embeddings=embs)

# Step 4: 検索
query = '統計検定 2 級は何分?'
q_emb = client.embeddings.create(input=query, model='text-embedding-3-small').data[0].embedding
results = coll.query(query_embeddings=[q_emb], n_results=2)
context = '\n'.join(results['documents'][0])

# Step 5: 生成
resp = client.chat.completions.create(
    model='gpt-4o-mini',
    messages=[
        {'role': 'system', 'content': '次の文書のみを根拠に答えてください。'},
        {'role': 'user', 'content': f'文書:\n{context}\n\n質問: {query}'},
    ],
)
print(resp.choices[0].message.content)

重要な設計判断

チャンキング戦略

  • 固定長: シンプル、文の途中で切れることも
  • 段落単位: 自然だが長さがバラつく
  • Sliding window: オーバーラップで文脈をつなぐ
  • LangChain RecursiveCharacterTextSplitter: 再帰的に区切る

Embedding モデルの選択

  • OpenAI text-embedding-3-small: 安価 ・ 多言語
  • OpenAI text-embedding-3-large: 高精度
  • Voyage / Cohere: 専門タスクに強い
  • SentenceTransformers: ローカルで動かせるオープンソース

ベクトル DB の選択

  • Pinecone / Weaviate: マネージド、スケール大
  • ChromaDB / Faiss: ローカル / プロトタイプ向き
  • pgvector: PostgreSQL の拡張、既存 DB と統合
  • Qdrant: 自前ホスト + 高性能

高度な RAG パターン

  • Hybrid Search: BM25(キーワード) + ベクトル検索の組合せ
  • Re-ranking: 一次検索の結果をクロスエンコーダで再順位付け
  • HyDE: 仮想回答を生成してから検索 → 精度向上
  • Multi-hop: 複数回検索して推論を組み立てる

評価指標

  • Recall@k: 関連文書が Top-k に入っているか
  • Faithfulness: 出力が文書に忠実か
  • Answer Relevance: 質問への回答度合い
  • Context Precision: 取得した文書の関連度

次のステップ

  • [LLM 入門](/blog/llm-introduction)
  • [プロンプトエンジニアリング基礎](/blog/prompt-engineering-basics)
  • [ベイズ最適化](/blog/bayesian-optimization)
  • [線形代数を AI 視点で](/blog/linear-algebra-for-ai)
Related Articles

関連記事