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 ステップ)
- チャンキング: ドキュメントを 200〜1000 トークン程度の塊に分割
- Embedding: 各塊を密ベクトル(例: 1536 次元)に変換
- ベクトル DB に保存: Pinecone ・ Weaviate ・ pgvector など
- 検索: ユーザー質問を Embedding 化 → 類似ベクトルを Top-k 取得
- 生成: 取得した塊 + 質問を 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
関連記事
- 2026-04-30LLMAI エージェント 入門 ─ ReAct・Tool Use・Multi-AgentChatGPT に外部 API・コード実行・Web 検索を組み合わせる『AI エージェント』。ReAct パターン・ツール呼び出し・マルチエージェント協調を実装視点で解説します。
- 2026-04-30LLMLLM 入門 ─ ChatGPT は何を計算しているのかChatGPT・Claude・Gemini などの大規模言語モデル(LLM)が内部で何をしているかを、Transformer の数式と pre-training/fine-tuning の流れで整理します。
- 2026-04-30LLMプロンプトエンジニアリング基礎 ─ 出力を 10 倍良くする 7 つのコツChatGPT・Claude を使いこなすためのプロンプト設計の基礎。Few-shot・Chain-of-Thought・Role 指定など、現場で効くテクニックを 7 つ。