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ってなに?AIが「嘘をつかなくなる」仕組みをゼロからやさしく解説

0
Posted at

「RAG」という単語、エンジニア界隈でよく目にするようになりましたよね。

でも「なんとなく知ってるけど、ちゃんとは説明できない」という方も多いはず。この記事では、RAGの仕組みを図解感覚でやさしく解説します。コードは最後に少しだけ出てきますが、基本は読むだけでOKです。


そもそも、なぜRAGが必要なの?

まず、RAGが生まれた背景を理解するために、LLM(大規模言語モデル)の弱点から話しましょう。

ChatGPTやClaudeなどのLLMは、大量のテキストデータを学習しています。しかし、この学習には 学習データの締め切り(カットオフ) があります。

「2026年の最新ニュースを教えて」

→ LLMは学習していないので、正確には答えられない

さらに困るのが 「ハルシネーション」 と呼ばれる現象です。LLMは知らないことを聞かれたとき、「知らない」と正直に言わずに、もっともらしい嘘をでっちあげて答えることがあります。

社内ドキュメントや自社製品の情報など、学習データに含まれていない情報を扱いたい場面では、この問題は特に深刻です。

RAGはこの2つの問題を同時に解決するための技術です。


RAG(検索拡張生成)とは?

RAG(Retrieval-Augmented Generation:検索拡張生成) とは、LLMが回答を生成する前に、外部の信頼できる情報源から関連する情報を「検索して取ってくる」仕組みです。

もとは2020年にFacebook AI Research(現Meta AI)の研究チームが発表した論文で提唱された概念で、現在はAI活用の現場で最も広く使われるアーキテクチャのひとつになっています。

一言でいうと、「カンニングOKの試験」をAIに受けさせる仕組み です。

  • 通常のLLM → 自分の記憶(学習データ)だけで答える
  • RAG搭載のLLM → 答える前に参考資料を検索して確認してから答える

RAGの仕組みを図で理解しよう

RAGは大きく 「準備フェーズ」「回答フェーズ」 の2段階に分かれます。

🗂️ 準備フェーズ(一度だけ実行)

社内ドキュメント・PDF・Webページなど
        ↓
  ① チャンキング(文章を小さく分割)
        ↓
  ② エンベッディング(テキストを数値ベクトルに変換)
        ↓
  ③ ベクトルDBに保存

🔍 回答フェーズ(質問のたびに実行)

ユーザーの質問
        ↓
  ④ 質問もベクトルに変換
        ↓
  ⑤ ベクトルDBから類似する情報を検索・取得
        ↓
  ⑥ 取得した情報 + 質問をLLMに渡す
        ↓
  ⑦ LLMが根拠ある回答を生成
        ↓
回答(ハルシネーションが大幅に減る)

3つのキーワードを押さえよう

① チャンキング(Chunking)

ドキュメントをそのままLLMに渡すと、長すぎて処理できません。そこでまず、文章を小さな「チャンク(塊)」に分割します。

一般的には 200〜1000トークン程度 の単位に分割します。チャンクが小さすぎると文脈が失われ、大きすぎると検索精度が落ちるため、バランスが重要です。

② エンベッディング(Embedding)

テキストを ベクトル(数値の配列) に変換する処理です。

「犬」と「猫」は意味が似ているので、ベクトル空間でも近い場所に配置されます。「犬」と「自動車」は意味が遠いので、ベクトル空間でも遠い場所に配置されます。このベクトル同士の距離(類似度)を使って、質問に関連する情報を探し出します。

③ ベクトルDB(Vector Database)

エンベッディングで変換した大量のベクトルを保存・検索するための専用データベースです。代表的なものとしては、ローカルで手軽に使える ChromaFAISS、クラウドサービスの Pinecone などがあります。


ファインチューニングとの違いは?

RAGとよく比較される技術に 「ファインチューニング」 があります。両者の違いを整理しましょう。

RAG ファインチューニング
何をするか 検索して情報を補強 モデル自体を再学習
情報の更新 容易(DBを更新するだけ) 困難(再学習が必要)
コスト 比較的低い 高い(GPU必要)
根拠の提示 しやすい(出典を返せる) 難しい
向いている場面 社内ドキュメント、最新情報 特定のスタイル・タスク習得

「最新の社内情報に基づいて答えてほしい」という場面では、RAGのほうが圧倒的に向いています。


実際のコードイメージ(Python)

全体の流れを最もシンプルに書くと、このようになります。

from langchain_community.vectorstores import Chroma
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
from langchain.text_splitter import RecursiveCharacterTextSplitter

# ① ドキュメントをチャンクに分割
splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
chunks = splitter.split_text(your_document_text)

# ② ベクトルDBにエンベッディングして保存
vectordb = Chroma.from_texts(chunks, embedding=OpenAIEmbeddings())

# ③ 質問に関連するチャンクを検索
retriever = vectordb.as_retriever()
relevant_docs = retriever.invoke("社内の有給申請の方法は?")

# ④ LLMに渡して回答を生成
llm = ChatOpenAI(model="gpt-4o")
context = "\n".join([doc.page_content for doc in relevant_docs])
answer = llm.invoke(f"以下の情報を元に答えてください:\n{context}\n\n質問:{question}")

ライブラリの細かい使い方よりも、「検索 → 取得 → 生成」という3ステップの流れをつかむことが大切です。


まとめ

キーワード 一言で言うと
RAG 検索してから答えるAIの仕組み
ハルシネーション AIが嘘をつく現象。RAGで軽減できる
チャンキング ドキュメントを小さく分割すること
エンベッディング テキストを数値に変換すること
ベクトルDB 数値ベクトルを保存・検索するDB

RAGは「社内AIチャットボット」「ドキュメント検索」「カスタマーサポートの自動化」など、実務への応用が非常に広い技術です。2026年現在も進化が続いており、精度を上げるための手法(RAG Fusion、Agentic RAGなど)も続々と登場しています。

まずはシンプルなRAGを一度自分で動かしてみることをおすすめします!


参考:

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?