Happy Web Engineer
Last updated on

【2026年版】エンジニアのためのRAG実装入門|社内ドキュメントQ&Aシステムを作る完全ガイド


はじめに:RAGがAIプロダクトの標準装備になった2026年

生成AI(LLM)の弱点として、「学習データに含まれない情報は答えられない」「古い情報しか返せない」というものがあります。これを解決するのが RAG(Retrieval Augmented Generation)です。社内ドキュメント・最新情報・プライベートデータをAIに参照させることで、AIが「自社の文脈」を持った回答を返せるようになります。

2026年現在、ChatGPT Enterprise・Claude Projects・Gemini Gems などの主要AIプラットフォームにもRAGは標準装備されており、「AIプロダクト開発では RAG実装が必須スキル」と言える状況です。

この記事では、現役SWEがPython + LangChain + Chromaで実際に動くRAGシステム(社内ドキュメントQ&A)を構築する手順を実例ベースで解説します。

  • RAGの仕組みを図解で理解
  • Python + LangChain + Chromaで実装
  • 検索精度を上げる4つのテクニック
  • 本番運用でのTips
  • 2026年のRAG最新トレンド

RAG とは? 仕組みを図解で理解

LLMだけでは解決できない問題

  • 最新情報(今日のニュース・最新バージョン情報)に対応できない
  • プライベート情報(社内ドキュメント・顧客データ)を知らない
  • ハルシネーション(自信満々に間違える)が起こる

RAGの基本フロー

RAGは2つの処理を組み合わせます:

  1. Retrieval(検索):ユーザー質問に関連するドキュメントをベクトルDBから検索
  2. Augmented Generation(拡張生成):検索結果をプロンプトに含めてLLMに回答させる

イメージ: 「社内規定を読んだうえで、質問に答えてください」とAIに指示する仕組みです。

RAGシステムの構成要素

  • Document Loader:PDF/Markdown/Webページを読み込む
  • Text Splitter:長文を適切なサイズに分割(チャンク化)
  • Embedding Model:テキストを数値ベクトルに変換
  • Vector Store:ベクトルを保存・検索(Chroma / Pinecone / pgvector 等)
  • Retriever:質問に関連する文書を検索
  • LLM:検索結果と質問を元に回答生成(GPT-5 / Claude 等)

環境準備

Python 3.10以上を前提に、必要パッケージをインストールします。

# 仮想環境作成
python3 -m venv venv
source venv/bin/activate

# 必要パッケージインストール
pip install langchain langchain-openai langchain-community chromadb pypdf unstructured

# OpenAI API キーを環境変数に設定
export OPENAI_API_KEY="sk-..."

OpenAI APIキーは OpenAI Platformで取得できます。従量課金ですが、個人検証なら月数百円で収まります。


ステップ1:ドキュメントを読み込む

対象のPDF/Markdownを読み込みます。

from langchain_community.document_loaders import PyPDFLoader, DirectoryLoader

# 単一PDF読み込み
loader = PyPDFLoader("./docs/company_policy.pdf")
documents = loader.load()

# ディレクトリ内の全PDF一括読み込み
loader = DirectoryLoader("./docs", glob="**/*.pdf", loader_cls=PyPDFLoader)
documents = loader.load()
print(f"読み込んだドキュメント数: {len(documents)}")

LangChainには Markdown・CSV・Web URL・Notion・Confluence など多数の DocumentLoader が用意されています。


ステップ2:テキストを適切に分割する(チャンク化)

長いドキュメントをそのままLLMに渡すのは効率が悪いため、適切なサイズに分割します。

from langchain.text_splitter import RecursiveCharacterTextSplitter

text_splitter = RecursiveCharacterTextSplitter(
    chunk_size=1000,       # 各チャンクのサイズ(文字数)
    chunk_overlap=200,      # チャンク間の重複(文脈つなぎ)
    separators=["\n\n", "\n", "。", "、", ""],  # 日本語を考慮
)

chunks = text_splitter.split_documents(documents)
print(f"チャンク数: {len(chunks)}")

チャンク化のコツ

  • chunk_size は 500〜1500 文字が目安(用途次第で調整)
  • chunk_overlap を 10〜20%設定し、文脈切れを防ぐ
  • 日本語なら ["\n\n", "\n", "。", "、", ""]のseparatorsを明示
  • HTMLは別のSplitterを使う(HTMLHeaderTextSplitter等)

ステップ3:ベクトル化して保存する

各チャンクを埋め込みモデルで数値ベクトルに変換し、Chromaに保存します。

from langchain_openai import OpenAIEmbeddings
from langchain_community.vectorstores import Chroma

embeddings = OpenAIEmbeddings(model="text-embedding-3-small")

vectorstore = Chroma.from_documents(
    documents=chunks,
    embedding=embeddings,
    persist_directory="./chroma_db"  # 永続化パス
)
print("ベクトルDB構築完了")

これで永続化されたベクトルDB(ChromaはSQLiteベース)が作成されます。次回起動時は Chroma(persist_directory="./chroma_db", embedding_function=embeddings)で読み込めます。


ステップ4:質問に対して検索&回答生成

Retriever と LLM を組み合わせて RAG チェーンを構築します。

from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnablePassthrough
from langchain_core.output_parsers import StrOutputParser

retriever = vectorstore.as_retriever(search_kwargs={"k": 4})

template = """以下の社内ドキュメントの抜粋を元に、質問に答えてください。
ドキュメントにない情報は「分かりません」と答えてください。

社内ドキュメント:
{context}

質問: {question}

回答:"""
prompt = ChatPromptTemplate.from_template(template)

llm = ChatOpenAI(model="gpt-5", temperature=0)

rag_chain = (
    {"context": retriever, "question": RunnablePassthrough()}
    | prompt
    | llm
    | StrOutputParser()
)

# 使ってみる
answer = rag_chain.invoke("有給休暇の付与日数を教えて")
print(answer)

これで完動する RAG システムの完成です。合計 30〜40行のPythonで、社内ドキュメントQ&Aシステムが動きます。


検索精度を上げる4つのテクニック

1. チャンクサイズを調整する

検索精度が悪い場合、まず chunk_size を変えてみる。短めのチャンク(300〜500字)の方が精密検索しやすい反面、文脈不足になりがち。試行錯誤が必要。

2. より良い埋め込みモデルを使う

  • デフォルト text-embedding-3-small → 多言語対応 text-embedding-3-large に変更で精度向上
  • 日本語特化なら multilingual-e5-large(オープンソース)

3. ハイブリッド検索(ベクトル + キーワード)

ベクトル検索だけでなく、BM25のようなキーワード検索も併用。LangChainの EnsembleRetrieverで両者を組み合わせられる。

4. Rerankingで検索結果を再ランク付け

Retrieverで取得した上位20件を、CrossEncoder(Cohere Rerank APIなど)で再ランキングし、Top5だけLLMに渡す。精度が顕著に上がる。


本番運用でのTips

ベクトルDB選定

  • 個人・小規模:Chroma(ローカル・無料)
  • 本番(クラウド):Pinecone / Weaviate / Qdrant Cloud
  • 既存PostgreSQLがある:pgvector拡張

コスト管理

  • Embedding コスト: $0.02/1M tokens(text-embedding-3-small)
  • LLMコスト: GPT-5の場合 Input $5/1M, Output $20/1M 程度
  • 大規模データなら、埋め込みは1回計算して永続化、更新時のみ再計算

更新戦略

  • ドキュメント更新時のみ対応チャンクを再埋め込み(差分更新)
  • cron で定期更新(1日1回など)

観測・デバッグ

  • LangSmith でトレース(どのドキュメントが検索されたか可視化)
  • ユーザー評価収集(回答に👍👎を付けさせる)
  • 失敗回答のサンプルを定期レビュー

2026年のRAG最新トレンド

GraphRAG

単純なベクトル検索ではなく、知識グラフ(ナレッジグラフ)を構築してRAG。Microsoft GraphRAGが2024年秋リリースされ、複雑な関連性を扱える新手法として注目。

Agentic RAG

単発検索ではなく、AIが自ら「追加の検索が必要か」判断して再検索する動的RAG。LangGraphで実装可能。

マルチモーダルRAG

テキストだけでなく、画像・表・図を含むドキュメントもベクトル化。GPT-5 vision/Claude Opus Vision を活用。

Context Caching

Google Gemini・Anthropic Claude で プロンプト全体をキャッシュし、同じコンテキストで複数質問する際のコストを 90% 削減する手法が標準化。


よくある質問(FAQ)

Q. ファインチューニングと何が違う?

ファインチューニング=モデル自体を再訓練(重い・遅い・高コスト)。RAG=既存モデルに検索結果を渡すだけ(軽い・速い・低コスト)。99%の企業用途はRAGで十分です。

Q. 月額どのくらいコストかかりますか?

小規模検証なら 月数百〜数千円。10万回/月の問い合わせでも 月1〜3万円程度です。ベクトルDBをChromaローカル運用にすればインフラコストはゼロ。

Q. 社内の機密情報を扱って大丈夫?

重要な観点です。OpenAI/Anthropic Enterpriseプランなら学習にデータが使われない契約が可能。それでも心配なら、ローカルLLM(Llama 3 / Qwen等)+ Ollamaで完全オフライン運用も可能。

Q. リアルタイムに更新されるデータに対応できる?

できます。Webhookやイベントドリブンでドキュメント更新を検知し、該当チャンクのみ再埋め込みする設計が標準。LangChain + Pineconeなら数行で実装可能。

Q. Python以外でRAG作れますか?

可能です。TypeScript なら LangChain.jsまたは Vercel AI SDK + Pineconeで同等のRAG実装可能。詳しくは Vercel AI SDK vs LangChain 徹底比較をご覧ください。


まとめ:RAG実装は30行から始められる

RAGは「複雑そう」というイメージがありますが、Python 30行で動くのが実態です。小さく作って動かし、精度を観測しながら改善していくのが王道です。

  • まずローカルChromaで試作(週末プロジェクト)
  • 検索精度に満足したらPinecone等の本番ベクトルDBへ
  • LangSmith等の観測基盤を導入して改善サイクル
  • Agentic RAG・GraphRAG等の最新手法に挑戦

2026年のエンジニアにとって、RAG実装スキルは Webフレームワークと同等の必須スキルになりつつあります。今日から1日で動くRAGを作ってみましょう。


関連記事

👉 【2026年版】Vercel AI SDK vs LangChain 徹底比較
👉 【2026年版】ChatGPT活用の実務7パターン
👉 【2026年版】生成AI時代のエンジニアキャリア戦略
👉 【2026年版】Web APIとAPIキー・OAuth・REST/GraphQL 完全ガイド
👉 個人開発・副業に最適なサーバー完全ガイド