2026年03月17日
こんにちは。新入社員のR.Kです。
近年、ChatGPT をはじめとする 大規模言語モデル(LLM) が急速に普及し、 さまざまな業務システムやサービスに導入されています。
しかし、LLM を実際の業務に利用する際には次のような課題があります。
これらの課題を解決するためのアーキテクチャとして注目されているのが RAG(Retrieval-Augmented Generation)です。
本記事では、RAG の基本的な仕組みと構成を初心者向けに解説します。
RAG(Retrieval-Augmented Generation)は、 情報検索(Retrieval)と文章生成(Generation)を組み合わせたAIアーキテクチャです。
通常の LLM は学習済みの知識だけを使って回答しますが、 RAG では 外部の知識ベースから情報を検索してから回答を生成します。
簡単に言えば、「LLM に検索機能を追加する仕組み」です。
これにより、以下のようなデータを参照した回答が可能になります。
LLM 単体での運用にはいくつかの問題があります。
LLM は訓練データに依存しているため、 最新情報や社内情報を直接知ることができません。
RAG では外部データを検索して回答に利用することで、 リアルタイムに近い情報や独自情報を扱えるようになります。
LLM は文法的に自然な文章を生成する能力が高い一方で、 実際には存在しない情報を生成することがあります。
RAG では、実際のドキュメントや検索結果を根拠として回答するため、 回答の信頼性向上が期待できます。
RAG のシステムは大きく以下のステップで構成されます。
ユーザー質問
↓
Embedding
↓
Vector Database検索
↓
関連ドキュメント取得
↓
LLMにコンテキストとして入力
↓
回答生成
この流れを詳しく見てみましょう。
まず、検索対象となるデータを準備します。
たとえば以下のようなものです。
これらを 小さなテキストチャンクに分割して保持します。これは LLM のトークン制限を考慮しつつ、検索精度を高めるためです。
次にテキストを Embedding モデルでベクトル化します。
Embedding とは、文章の意味を数値ベクトルで表現する技術です。たとえば意味の近い単語や文章は、近いベクトルとして表現されます。
"car"
"automobile"
この 2 つは表現が異なっていても意味が近いため、ベクトル空間上でも近い位置に配置されます。
生成したベクトルは Vector Database に保存します。
代表的なものとして、以下があります。
Vector Database は、意味的に似た文章を高速に検索できるデータベースです。
ユーザーが質問すると、その質問文も同様に Embedding されます。
「RAGとは何ですか?」
次に、質問ベクトルを使って Vector Database から 意味的に近いドキュメントを検索します。
たとえば、以下のような関連文書が取得されます。
「RAGはLLMの回答精度を向上させる仕組みです。」
検索した文章を LLM のプロンプトにコンテキストとして追加し、その情報を元に回答を生成します。
Context:
RAGはLLMの回答精度を向上させる仕組みです...
Question:
RAGとは何ですか?
Answer:
これが Retrieval-Augmented Generation の基本的な仕組みです。
以下は簡易的な 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 を業務に活用する際には、まず RAG の考え方を理解しておくことが重要です。