RAG(検索拡張生成)とは
RAG(Retrieval-Augmented Generation、検索拡張生成)とは、LLM(大規模言語モデル)の弱点を補う技術です。ChatGPTなどのLLMは、学習データの知識しか持たないため、最新情報や社内ドキュメントには答えられません。
RAGは、外部データベースから関連情報を検索し、それをLLMに渡すことで、正確で最新の回答を生成する仕組みです。
RAGの基本的な流れ
ユーザーの質問
↓
①ベクトル化(Embedding)
↓
②関連情報を検索(Retrieval)
↓
③検索結果をLLMに渡す
↓
④LLMが回答生成(Generation)
従来のLLMとの違い
| 項目 | 従来のLLM | RAG活用 |
|---|---|---|
| 情報源 | 学習データのみ | 学習データ + 外部データベース |
| 最新情報 | 対応できない | 対応可能 |
| 社内情報 | 対応できない | 対応可能 |
| ハルシネーション | 発生しやすい | 大幅に減少 |
| コスト | 低い | 中程度(ベクトルDB費用) |
RAGが必要な理由
LLMの3つの限界
1. 学習データの期限
ChatGPT-3.5の学習データは2021年9月まで。それ以降の情報には答えられません。
例:
– ユーザー: 「2024年の東京オリンピックの結果は?」
– ChatGPT: 「申し訳ございませんが、私の学習データは2021年9月までです」
RAGを使えば、最新ニュースデータベースから情報を取得して回答できます。
2. 社内・非公開情報への非対応
LLMは公開データで学習されるため、社内マニュアルや社内FAQには答えられません。
例:
– ユーザー: 「経費精算の申請方法は?」
– ChatGPT: 「一般的な方法は…」(自社の手順ではない)
RAGを使えば、社内ドキュメントから情報を取得して回答できます。
3. ハルシネーション(幻覚)
LLMは知らない情報について、もっともらしい嘘を生成することがあります。
RAGを使えば、検索結果に基づいて回答するため、ハルシネーションを大幅に減らせます。
RAGの仕組み(技術的な詳細)
ステップ1: データの準備とベクトル化
1-1. ドキュメントの分割
長いドキュメントを適切なサイズ(チャンク)に分割します。
# LangChainの例
from langchain.text_splitter import RecursiveCharacterTextSplitter
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=1000, # 1チャンク1000文字
chunk_overlap=200 # 前後で200文字重複
)
chunks = text_splitter.split_documents(documents)
1-2. ベクトル化(Embedding)
各チャンクを数値ベクトルに変換します。
from langchain.embeddings import OpenAIEmbeddings
embeddings = OpenAIEmbeddings()
vectors = embeddings.embed_documents([chunk.page_content for chunk in chunks])
ステップ2: ベクトルデータベースに保存
ベクトル化したデータをベクトルデータベースに保存します。
| ベクトルDB | 特徴 |
|---|---|
| Pinecone | クラウド・高速・有料 |
| Chroma | オープンソース・無料・ローカル |
| Weaviate | オープンソース・高機能 |
| FAISS | Meta製・ローカル・軽量 |
from langchain.vectorstores import Chroma
vectorstore = Chroma.from_documents(
documents=chunks,
embedding=embeddings
)
ステップ3: 類似検索(Retrieval)
ユーザーの質問をベクトル化し、類似度の高いチャンクを検索します。
# ユーザーの質問
query = "経費精算の申請方法は?"
# 類似度の高い上位3件を取得
docs = vectorstore.similarity_search(query, k=3)
ステップ4: LLMで回答生成(Generation)
検索結果をLLMに渡し、回答を生成します。
from langchain.chains import RetrievalQA
from langchain.chat_models import ChatOpenAI
llm = ChatOpenAI(model="gpt-3.5-turbo")
qa_chain = RetrievalQA.from_chain_type(
llm=llm,
retriever=vectorstore.as_retriever()
)
answer = qa_chain.run(query)
RAGの活用事例
1. 社内ナレッジベース検索
課題: 社内マニュアルが膨大で、必要な情報を探すのに時間がかかる
RAG活用:
– 社内マニュアル・FAQ・社内wikiをベクトル化
– 社員が自然言語で質問すると、関連情報を検索して回答
効果:
– 検索時間70%削減
– 問い合わせ対応50%削減
2. カスタマーサポートチャットボット
課題: FAQは充実しているが、ユーザーが自分で探すのが面倒
RAG活用:
– FAQ・製品マニュアルをベクトル化
– チャットボットがユーザーの質問に応じて、関連FAQを検索して回答
効果:
– 問い合わせ対応時間50%削減
– 顧客満足度20%向上
3. 企業レポート・論文検索
課題: 膨大な論文・レポートから必要な情報を探すのが困難
RAG活用:
– 論文・レポートをベクトル化
– 研究者が自然言語で質問すると、関連論文を検索して要約
効果:
– 文献調査時間80%削減
– 関連研究の発見率向上
4. 法律・規制情報検索
課題: 法律文書は膨大で、該当条文を探すのが困難
RAG活用:
– 法律条文・判例をベクトル化
– 弁護士が質問すると、関連条文を検索して提示
効果:
– リサーチ時間60%削減
– 見落としリスク減少
RAGを導入する方法
ノーコードツール(プログラミング不要)
| ツール | 難易度 | 料金 | 特徴 |
|---|---|---|---|
| Dify | ★☆☆ | 無料〜$59/月 | ノーコードでRAG構築可能 |
| Notion AI | ★☆☆ | $10/月 | Notionデータを検索対象に |
| ChatGPT Plus(Code Interpreter) | ★☆☆ | $20/月 | PDFアップロードで簡易RAG |
ローコード(LangChain活用)
必要なスキル
- Python基礎
- API連携の基本知識
最小構成のコード
from langchain.document_loaders import DirectoryLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Chroma
from langchain.chains import RetrievalQA
from langchain.chat_models import ChatOpenAI
# 1. ドキュメント読み込み
loader = DirectoryLoader("./docs", glob="**/*.txt")
documents = loader.load()
# 2. チャンクに分割
text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
chunks = text_splitter.split_documents(documents)
# 3. ベクトル化&保存
embeddings = OpenAIEmbeddings()
vectorstore = Chroma.from_documents(chunks, embeddings)
# 4. RAGチェーン構築
llm = ChatOpenAI(model="gpt-3.5-turbo")
qa_chain = RetrievalQA.from_chain_type(
llm=llm,
retriever=vectorstore.as_retriever()
)
# 5. 質問
answer = qa_chain.run("経費精算の方法は?")
print(answer)
フルスタック開発(本格運用)
技術スタック例
フロントエンド: React
バックエンド: Python + FastAPI + LangChain
ベクトルDB: Pinecone
LLM: ChatGPT API / Claude API
デプロイ: Vercel(フロント)+ Render(バックエンド)
RAGのコスト
月間コスト例(中小企業向け)
| 項目 | サービス | 月額費用 |
|---|---|---|
| LLM API | OpenAI GPT-3.5 | $10〜100 |
| Embedding API | OpenAI Embeddings | $5〜20 |
| ベクトルDB | Pinecone | $70〜 |
| 合計 | – | $85〜200 |
コスト削減のポイント
- ローカルベクトルDB: Chroma、FAISSなら無料
- キャッシュ活用: 同じ質問には過去の回答を再利用
- チャンクサイズ最適化: 大きすぎるとコスト増、小さすぎると精度低下
RAGの課題と対策
課題1: 検索精度の問題
問題: 関連性の低い情報が検索されることがある
対策:
– ハイブリッド検索(ベクトル検索 + キーワード検索)
– メタデータフィルタリング(日付、カテゴリで絞り込み)
– リランキング(検索結果を再評価)
課題2: チャンクサイズの最適化
問題: チャンクが大きすぎると関連性が低下、小さすぎると文脈が失われる
対策:
– 文書の種類に応じてチャンクサイズを調整
– 一般的には500〜1500文字が推奨
課題3: コスト増加
問題: ベクトルDB・API費用が増加する
対策:
– ローカルベクトルDB(Chroma、FAISS)を使用
– キャッシュ活用で重複リクエストを削減
よくある質問
Q1. RAGとファインチューニングの違いは?
RAG: 外部データを検索してLLMに渡す。データ更新が容易。
ファインチューニング: LLMのモデル自体を再学習。データ更新には再学習が必要。
一般的には、RAGのほうがコストが低く、柔軟性が高いため推奨されます。
Q2. RAGは日本語に対応している?
はい、対応しています。OpenAI EmbeddingsやCohereなど、日本語対応のEmbeddingモデルを使えばOKです。
Q3. RAGの精度を上げるには?
以下の方法が有効です。
– ハイブリッド検索(ベクトル + キーワード)
– リランキング(検索結果を再評価)
– メタデータ活用(日付、カテゴリでフィルタリング)
Q4. ノーコードでRAGを構築できる?
はい、Difyなどのノーコードツールを使えば、プログラミング不要でRAGを構築できます。
関連記事
- ChatGPT APIの使い方入門|Python実装からコスト管理まで
- LLM(大規模言語モデル)とは?ChatGPT・Claudeの基盤技術を解説
- エンベディング(Embedding)とは?ベクトル表現でAIが意味を理解する仕組み
- Dify完全ガイド|ノーコードAIワークフロー
まとめ:RAGでLLMの可能性が広がる
RAG(検索拡張生成)は、LLMの弱点を補う重要な技術です。
- 最新情報に対応: 学習データの期限を超えた情報も提供可能
- 社内情報に対応: 社内マニュアル・FAQをLLMで活用
- ハルシネーション削減: 検索結果に基づく回答で正確性向上
ノーコードツール(Dify)なら、プログラミング不要で今すぐRAGを試せます。まずは無料で始めてみませんか?
【PR】
AIスキルを本格的に学びたい方には、以下のスクールがおすすめです。
DMM WEBCAMP
- 転職成功率98.8%、転職できなければ全額返金
- 給付金活用で実質18万円〜で受講可能
- RAG・LangChainを含む実践カリキュラム
デイトラ
- 業界最安級の99,800円〜
- 1日1題の明確なカリキュラムで迷わず学習
- 副業と並行して学べる
出典:
– LangChain公式ドキュメント
– OpenAI Embeddings API
– Pinecone公式サイト
– Dify公式サイト


コメント