RAG(検索拡張生成)開発入門|社内データをAIで活用する仕組みと習得ロードマップ
RAG(検索拡張生成)とは:なぜ必要か
RAG(Retrieval-Augmented Generation:検索拡張生成)とは、LLMが回答を生成する前に外部データベースから関連情報を「検索(Retrieve)」し、その情報を文脈として組み込んで回答する技術です。
通常のLLMは学習データの知識しか持たず、最新情報や社内固有の情報(社内規程・製品仕様・顧客データ等)を知りません。RAGを使うと、LLMの外に置かれた任意のデータソースからリアルタイムに情報を取得して回答に組み込めます。
■ RAGが解決する問題
- ハルシネーション(LLMが事実と異なる情報を生成する)の削減
- 学習データのカットオフ日以降の最新情報への対応
- 社内ドキュメント・製品カタログ・規程集等のプライベートデータ活用
- 回答の根拠(ソース)の明示
■ 活用事例
- 社内FAQ・ナレッジベースの自動回答
- 法律・医療分野の根拠付き情報提供
- カスタマーサポートの製品仕様回答
- 技術ドキュメントの検索・要約
RAGの技術アーキテクチャ
RAGシステムは主に「インデクシングパイプライン」と「クエリパイプライン」の2つで構成されます。
■ インデクシングパイプライン(事前準備)
1. **Document Loading**: PDF・Word・Web・CSVなど多様な形式のドキュメントを読み込む
2. **Text Splitting**: 長文を適切な大きさのチャンク(断片)に分割(例:500〜1000トークン)
3. **Embedding**: テキストを数値ベクトルに変換(OpenAI text-embedding-3-small等を使用)
4. **Vector Store**: ベクトルをデータベースに保存
■ クエリパイプライン(回答生成)
1. **クエリのEmbedding**: ユーザーの質問もベクトルに変換
2. **Similarity Search**: ベクトルDBで類似ドキュメントを上位k件検索
3. **Context Construction**: 検索結果をプロンプトのコンテキストとして組み立て
4. **LLM Generation**: コンテキスト付きでLLMに回答を生成させる
■ 主要コンポーネント
- Embedding Model: OpenAI text-embedding-3-small(低コスト)/ 3-large(高精度)
- Vector DB: pgvector(PostgreSQL拡張)・Chroma(軽量ローカル)・Pinecone(クラウド)・Weaviate
- Orchestration: LangChain / LlamaIndex
技術スタック詳解:LangChain・pgvector・Chroma
RAG開発の主要技術スタックを具体的なコード例と共に解説します。
■ LangChain RAG実装の基本パターン
```python
from langchain.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
from langchain_chroma import Chroma
from langchain.chains import RetrievalQA
# 1. ドキュメント読み込み
loader = PyPDFLoader("company_manual.pdf")
docs = loader.load()
# 2. チャンク分割
splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
chunks = splitter.split_documents(docs)
# 3. Vectorstore作成
vectorstore = Chroma.from_documents(chunks, OpenAIEmbeddings())
# 4. RAGチェーン構築
qa_chain = RetrievalQA.from_chain_type(
llm=ChatOpenAI(model="gpt-4o-mini"),
retriever=vectorstore.as_retriever(search_kwargs={"k": 5})
)
```
■ pgvector(本番PostgreSQL環境向け)
PostgreSQLの拡張機能として動作。既存インフラに追加しやすく、SQL操作との統合が自然。`CREATE EXTENSION vector;` から始めて `HNSW` インデックスを作成することで高速検索が実現します。
■ Chroma(開発・小規模向け)
ローカルで動くPython製の軽量ベクトルDB。永続化も `PersistentClient` で簡単に実装でき、プロトタイプ開発に最適です。
ビジネスユースケースと実装パターン
RAGが最も価値を発揮するビジネスシーンを整理します。
■ 社内ナレッジベース検索
最も典型的なユースケース。社内規程・マニュアル・過去の提案書をRAG化し、従業員が日本語で質問すれば根拠付きで回答が得られます。構築コスト:エンジニア1〜2名×1〜3ヶ月。
■ 製品サポートボット
製品仕様書・FAQ・過去のサポートチケットをRAG化。Zendeskや社内チャットと連携し、問い合わせの70〜80%を自動化する事例が増えています。
■ 契約書・法的文書の質問応答
大量の契約書から特定条項の有無や内容を即座に検索。法務チームの業務効率を大幅に改善。この領域では回答の根拠(引用箇所)表示が必須要件となります。
■ コードベース検索・解説
GitHub上のコードベースをRAG化し、「この関数は何をするか」「認証ロジックはどこにあるか」をAIに質問できる社内ツール。GitHub Copilot Enterpriseが同様の機能を提供しています。
■ 技術的な改善ポイント
- **チャンクサイズの最適化**: 短すぎると文脈不足、長すぎるとノイズ増加。500〜1000トークンが初期値
- **Reranking**: 検索結果の再順位付け(Cohere Rerank等)でクオリティ向上
- **Hybrid Search**: ベクトル検索+キーワード検索(BM25)の組み合わせで精度改善
習得ロードマップ(3〜4ヶ月)
RAG開発を習得するための実践的なロードマップです。
【第1ヶ月:前提知識】
- Python中級(非同期処理・型ヒント・パッケージ管理)
- LLM API基礎(OpenAI/Anthropic APIの直接呼び出し)
- ベクトルとコサイン類似度の概念理解(数学は不要、直感的理解で可)
【第2ヶ月:LangChain基礎RAG】
- LangChain公式チュートリアル「RAG Tutorial」を完全実装
- ChromaDBを使ったローカルRAGの構築
- 自分の興味あるPDFドキュメントでRAG検索ツールを作る
【第3ヶ月:本格実装】
- pgvectorをDockerで立ち上げてLangChainと接続
- LangSmithによるRAGの評価・デバッグ(Recall・Precision測定)
- Streamlit/GradioでWebUIを作成しチームに使ってもらう
【第4ヶ月:応用・本番化】
- Advanced RAG技術(HyDE・Multi-query・Parent Document Retriever)
- FastAPIによるAPIサーバー化
- AWS/GCPへのデプロイ
費用目安:API費用のみなら月3,000〜15,000円。スクール利用で補助制度を活用できる場合があります。
よくある質問
- RAGとファインチューニングはどう使い分けますか?
- 基本的にRAGを先に試すことを推奨します。RAGはデータ更新が容易でコストが低く、根拠の明示が可能です。ファインチューニングは「特定のスタイル・語調」「ドメイン固有の推論パターン」を覚えさせたい場合に使います。現場では「RAGで7割の問題を解決し、残りをファインチューニングで補う」組み合わせが多いです。
- 日本語でのRAG精度はどうですか?
- Embedding ModelはOpenAIのtext-embedding-3-small/largeが日本語でも高精度です。チャンクサイズは日本語の場合やや短め(200〜500トークン)が有効な場合があります。また形態素解析(MeCab・sudachi)を前処理に加えることでキーワード検索精度が上がります。
- RAG構築に必要なデータ量はどのくらいですか?
- データ量の下限はありません。10件のPDFでも機能します。ただし検索精度はデータの質と量に依存するため、実運用では数百〜数千のチャンク(100ドキュメント以上)があると安定します。
- セキュリティ面での考慮事項はありますか?
- 社内機密データをクラウドのEmbedding APIに送信することのリスク評価が必要です。機密度が高いデータには、オープンソースのEmbeddingモデル(intfloat/multilingual-e5等)をセルフホストする選択肢があります。また、ユーザーごとのアクセス制御(Row-Level Security)の設計も忘れずに。
まとめ
RAGは「LLMに社内・固有データを持たせる」最も実用的かつコスパの高い手法です。ファインチューニングより低コスト・高速で、データ更新にも柔軟に対応できます。
LangChainとChromaを使ったシンプルなRAGなら、Pythonの基礎知識があれば1〜2週間で動くプロトタイプを作れます。社内に「検索するのが面倒なドキュメント」があれば、それが最初のRAGプロジェクトの起点になります。
中級〜上級エンジニアにとってはRAGスキルが、AIエージェント開発・MLOps・LLMOpsへのキャリアシフトの重要な入口となります。