解説

さらに詳しく解説
RAG(検索拡張生成)とは
RAG(Retrieval-Augmented Generation)は、外部知識ベースから関連情報を検索し、LLMの生成に活用する技術です。最新情報や専門知識を回答に反映できます。
基本アーキテクチャ
RAGの処理フロー:
1. ユーザーの質問
↓
2. クエリのベクトル化
↓
3. ベクトルDBから類似文書検索
↓
4. 関連文書を取得
↓
5. 質問 + 文書をLLMに入力
↓
6. 文書を参照した回答生成RAGのメリット
| メリット | 説明 |
|---|---|
| 最新情報 | 学習カットオフ後の情報も利用可能 |
| ハルシネーション低減 | 事実に基づいた回答 |
| 出典明示 | 参照元を示せる |
| ドメイン特化 | 専門知識の活用 |
| コスト削減 | ファインチューニング不要 |
構成要素
| コンポーネント | 役割 | 例 |
|---|---|---|
| Embedding | テキストをベクトル化 | OpenAI Ada、Cohere |
| Vector DB | ベクトルを保存・検索 | Pinecone、Weaviate |
| Retriever | 類似文書を取得 | コサイン類似度検索 |
| LLM | 回答を生成 | GPT-4、Claude |
ベクトルデータベース
| DB | 特徴 |
|---|---|
| Pinecone | フルマネージド、高速 |
| Weaviate | オープンソース、多機能 |
| Chroma | 軽量、ローカル実行 |
| Qdrant | Rust製、高性能 |
| pgvector | PostgreSQL拡張 |
実装例(LangChain)
python
from langchain.vectorstores import Chroma
from langchain.embeddings import OpenAIEmbeddings
from langchain.chains import RetrievalQA
from langchain.llms import OpenAI
# ベクトルストア構築
embeddings = OpenAIEmbeddings()
vectorstore = Chroma.from_documents(
documents, embeddings
)
# RAGチェーン作成
qa = RetrievalQA.from_chain_type(
llm=OpenAI(),
retriever=vectorstore.as_retriever()
)
# 質問応答
result = qa.run("質問内容")RAGの改善テクニック
高度なRAG手法:
├── チャンク[最適化](/glossary/optimization)
│ └── 適切なサイズで文書分割
├── ハイブリッド検索
│ └── ベクトル+キーワード検索
├── リランキング
│ └── 検索結果の再順位付け
├── クエリ変換
│ └── 質問を検索に適した形に
└── 自己評価
└── 回答の妥当性チェック