本文へスキップ
統計ロードマップ
2026-05-02·生成 AI·⏱ 約 6

RAG (検索拡張生成) を1から理解する ─ ハルシネーション対策の本命

ChatGPT 系の課題「もっともらしい嘘」を解決する RAG パターン。ベクトル DB・埋め込みモデル・プロンプト設計の実装フローを G 検定対策と実装の両面で解説。

ChatGPT の登場以来、生成 AI 最大の課題は ハルシネーション(もっともらしい嘘の生成)でした。RAG は、これを 外部知識をプロンプトに動的に取り込む ことで解決する設計パターン。G 検定でも頻出のキーワードであり、企業の生成 AI 導入で最も使われている方式です。

なぜ RAG が必要か

  • 学習データの古さ: GPT-4 系の知識カットオフは 2023〜2024 年で、それ以降のニュースは知らない
  • 社内文書の不在: 公開 LLM は当然、自社の社内ドキュメント・契約書・議事録を学習していない
  • ハルシネーション: 知らないことを聞かれると LLM は『それっぽい嘘』を作る傾向
  • 根拠の不在: 答えの出典が示せないため、信頼性のある業務利用には不適

RAG の基本フロー

  1. 事前準備: 社内文書を分割(チャンク化)し、埋め込みモデル(text-embedding-3-large など)でベクトル化、ベクトル DB(Pinecone・Weaviate・pgvector・Chroma)に保存
  2. ユーザーが質問: 例「就業規則で在宅勤務日数の上限は?」
  3. 質問を埋め込み化: 質問文も同じ埋め込みモデルでベクトル化
  4. ベクトル DB で近傍検索: 質問ベクトルとコサイン類似度が高い文書チャンクを top-k(例: 5)取得
  5. プロンプト合成: 「以下の社内文書を参考に質問に答えてください。文書: ... 質問: ...」
  6. LLM が回答: 関連文書を踏まえた回答を生成。可能なら出典(文書名・ページ)を付与

シンプル実装(LangChain ベース)

最小 RAG の構造
# pip install langchain-openai langchain-community chromadb
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
from langchain_community.vectorstores import Chroma
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain.chains import RetrievalQA

# 1. 文書を分割
with open('handbook.md') as f:
    text = f.read()
splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
chunks = splitter.create_documents([text])

# 2. 埋め込み + ベクトル DB に保存
embed = OpenAIEmbeddings(model='text-embedding-3-large')
vecdb = Chroma.from_documents(chunks, embed, persist_directory='./db')

# 3. RAG チェーン
llm = ChatOpenAI(model='gpt-4o-mini')
qa = RetrievalQA.from_chain_type(
    llm=llm,
    retriever=vecdb.as_retriever(search_kwargs={'k': 5}),
    return_source_documents=True,
)

# 4. 質問
result = qa.invoke({'query': '在宅勤務日数の上限は?'})
print(result['result'])
for doc in result['source_documents']:
    print('出典:', doc.metadata)

精度を左右する 3 つのチューニングポイント

  • チャンクサイズ: 200〜500 トークンが目安。大きすぎると関連性が薄まり、小さすぎると文脈が切れる
  • 埋め込みモデル: OpenAI の text-embedding-3-large が高精度、Cohere・Voyage AI も日本語に強い。BGE-M3 などオープンモデルも実用的
  • Re-ranking: 検索 top-k の中から、Cross-Encoder(Cohere Rerank・bge-reranker)で本当に関連度が高いものに並べ替える 2 段検索が効果大

ハイブリッド検索 ─ ベクトル + キーワード

「意味」だけでは取りこぼす

ベクトル検索は意味的近さを捉えられますが、固有名詞(製品コード・法令名・人名)は文字列一致が重要。BM25 などのキーワード検索とベクトル検索を組み合わせる ハイブリッド検索 が実務で標準になりつつあります。Elasticsearch・Qdrant・Weaviate などの主要ベクトル DB が標準サポート。

RAG の限界と対策

  • 文書間の関係を捉えづらい: 「A と B の違いは?」のように複数文書をまたぐ質問が苦手 → GraphRAG・Multi-hop RAG で対処
  • 最新性のラグ: ベクトル DB の更新頻度がボトルネック → リアルタイム更新可能な DB を選択
  • 評価が難しい: 質問と理想回答のペアを用意して RAGAS・LangSmith で精度を測定

G 検定での出題傾向

  • 「ハルシネーション対策の代表的な手法は?」 → RAG
  • 「RAG で使うベクトル DB の例は?」 → Pinecone、Weaviate、Chroma、pgvector
  • 「埋め込みモデルの目的は?」 → 文書をベクトル化して類似度検索可能にする
  • 「Chain-of-Thought との違いは?」 → CoT は推論手法、RAG は外部知識参照手法

まとめ

  • RAG = 外部知識を動的にプロンプトに取り込む手法
  • ハルシネーション抑制・社内文書活用・最新情報反映に有効
  • 実装は埋め込み → ベクトル DB → 検索 → プロンプト合成の 4 段
  • 精度向上には Re-ranking・ハイブリッド検索・適切なチャンクサイズが鍵

関連リンク

  • [G 検定教科書 第 7 章 生成 AI](/certs/g-test/textbook#ch7)
  • [ディープラーニング基礎ミニ教科書](/deep-learning-basics)
Sponsored / Recommended

本気で AI エンジニアを目指すなら ─ 関連スクール

以下は当サイトと提携しているスクールの紹介です。リンク経由でのお申込で運営費を支援できます(読者の皆様の追加負担はありません)。

Related Articles

関連記事