Blog
ブログ

2026年03月17日

【1月技術ブログ】RAG入門 :仕組みと基本構成

はじめに

こんにちは。新入社員のR.Kです。

近年、ChatGPT をはじめとする 大規模言語モデル(LLM) が急速に普及し、 さまざまな業務システムやサービスに導入されています。

しかし、LLM を実際の業務に利用する際には次のような課題があります。

  • モデルが古い情報を元に回答してしまう
  • 社内ドキュメントなどの独自データを参照できない
  • 誤った情報(ハルシネーション)を生成してしまう

これらの課題を解決するためのアーキテクチャとして注目されているのが RAG(Retrieval-Augmented Generation)です。

本記事では、RAG の基本的な仕組みと構成を初心者向けに解説します。

RAGとは?

RAG(Retrieval-Augmented Generation)は、 情報検索(Retrieval)と文章生成(Generation)を組み合わせたAIアーキテクチャです。

通常の LLM は学習済みの知識だけを使って回答しますが、 RAG では 外部の知識ベースから情報を検索してから回答を生成します。

簡単に言えば、「LLM に検索機能を追加する仕組み」です。

これにより、以下のようなデータを参照した回答が可能になります。

  • 社内ドキュメント
  • FAQ
  • PDF
  • データベース

なぜRAGが必要なのか?

LLM 単体での運用にはいくつかの問題があります。

① 学習データが固定されている

LLM は訓練データに依存しているため、 最新情報や社内情報を直接知ることができません。

RAG では外部データを検索して回答に利用することで、 リアルタイムに近い情報や独自情報を扱えるようになります。

② ハルシネーション(誤情報)

LLM は文法的に自然な文章を生成する能力が高い一方で、 実際には存在しない情報を生成することがあります。

RAG では、実際のドキュメントや検索結果を根拠として回答するため、 回答の信頼性向上が期待できます。

RAGの基本構成

RAG のシステムは大きく以下のステップで構成されます。

 

ユーザー質問
   ↓
Embedding
   ↓
Vector Database検索
   ↓
関連ドキュメント取得
   ↓
LLMにコンテキストとして入力
   ↓
回答生成

 

この流れを詳しく見てみましょう。

 

① ドキュメントの準備(Ingestion)

まず、検索対象となるデータを準備します。

たとえば以下のようなものです。

  • 社内マニュアル
  • FAQ
  • Wiki
  • PDF
  • Webページ

これらを 小さなテキストチャンクに分割して保持します。これは LLM のトークン制限を考慮しつつ、検索精度を高めるためです。

② Embedding(ベクトル化)

次にテキストを Embedding モデルでベクトル化します。

Embedding とは、文章の意味を数値ベクトルで表現する技術です。たとえば意味の近い単語や文章は、近いベクトルとして表現されます。

"car"
"automobile"

この 2 つは表現が異なっていても意味が近いため、ベクトル空間上でも近い位置に配置されます。

③ Vector Database

生成したベクトルは Vector Database に保存します。

代表的なものとして、以下があります。

  • Pinecone
  • Weaviate
  • Chroma

Vector Database は、意味的に似た文章を高速に検索できるデータベースです。

④ QueryのEmbedding

ユーザーが質問すると、その質問文も同様に Embedding されます。

「RAGとは何ですか?」

⑤ 類似検索(Retrieval)

次に、質問ベクトルを使って Vector Database から 意味的に近いドキュメントを検索します。

たとえば、以下のような関連文書が取得されます。

「RAGはLLMの回答精度を向上させる仕組みです。」

⑥ LLMによる回答生成(Generation)

検索した文章を LLM のプロンプトにコンテキストとして追加し、その情報を元に回答を生成します。

Context:
RAGはLLMの回答精度を向上させる仕組みです...

Question:
RAGとは何ですか?

Answer:

 

これが Retrieval-Augmented Generation の基本的な仕組みです。

簡単なRAG構成例(Python)

以下は簡易的な RAG の例です。

from langchain.vectorstores import Chroma
from langchain.embeddings import OpenAIEmbeddings
from langchain.llms import OpenAI

# Vector Database を読み込む
vectorstore = Chroma(
    persist_directory="db",
    embedding_function=OpenAIEmbeddings()
)

# Retriever を作成する
retriever = vectorstore.as_retriever()

# ユーザーからの質問
question = "RAGとは?"

# ① 検索:質問に関連するドキュメントを取得する
docs = retriever.get_relevant_documents(question)

# ② 文脈追加:取得したドキュメントを LLM に渡すためのプロンプトを作成する
context = "\n\n".join([doc.page_content for doc in docs])

prompt = f"""
以下の参考情報をもとに、質問に回答してください。

参考情報:
{context}

質問:
{question}

回答:
"""

# ③ 生成:LLM が最終的な回答を生成する
llm = OpenAI()
response = llm(prompt)

print(response)

このように、RAG は大きく 検索 → 文脈追加 → 生成 という流れで動作します。

まとめ

本記事では、RAG の基本について紹介しました。

ポイントをまとめると、以下の通りです。

  • RAG は 検索 + 生成 を組み合わせたAIアーキテクチャ
  • 外部データを参照することで LLM の回答精度向上が期待できる
  • 主な構成要素は Embedding / Vector Database / Retrieval / Generation

現在、RAG は企業向け AI アプリケーションの代表的な構成の一つとなりつつあります。

LLM を業務に活用する際には、まず RAG の考え方を理解しておくことが重要です。

このページの先頭へ