AI
RAG(検索拡張生成)の実装ガイド【2026年版】OSSで社内文書AIを構築

RAG(検索拡張生成)の実装ガイド【2026年版】OSSで社内文書AIを構築

オープンソースラボ編集部2026年6月13日

「社内ドキュメントに何でも答えてくれるAIチャットを作りたい」——これを実現するのが**RAG(Retrieval-Augmented Generation:検索拡張生成)**です。本記事でOSSを使った実装方法を解説します。

RAGとは

RAGは外部の知識(文書・DB)を検索してLLMの回答に組み込む手法です。

[ユーザーの質問]
       ↓
[Embedding変換] → [ベクトルDB検索] → [類似文書取得]
                                            ↓
                               [LLMに文書+質問を渡す]
                                            ↓
                               [根拠に基づいた回答]

LLMの学習データにない最新情報・社内情報にも回答できるようになります。

RAGのOSSスタック比較表

コンポーネントOSS選択肢役割
オーケストレーションLangChain / LlamaIndexパイプライン管理
EmbeddingOpenAI / nomic-embed-textベクトル変換
ベクトルDBpgvector / Chroma / Qdrant類似検索
LLMClaude / GPT-4 / Llama 3回答生成
UIフレームワークChainlit / StreamlitチャットUI

LangChainで実装する最小RAG

LangChain公式サイト)はRAGパイプラインを最も簡単に構築できるOSSフレームワークです:

from langchain_community.document_loaders import DirectoryLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_community.vectorstores import Chroma
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
from langchain.chains import RetrievalQA

# 1. 文書ロード
loader = DirectoryLoader('./docs', glob='**/*.pdf')
docs = loader.load()

# 2. チャンク分割
splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
chunks = splitter.split_documents(docs)

# 3. ベクトルDB構築
vectordb = Chroma.from_documents(chunks, OpenAIEmbeddings())

# 4. RAGチェーン
qa = RetrievalQA.from_chain_type(
    llm=ChatOpenAI(model="gpt-4o-mini"),
    retriever=vectordb.as_retriever(search_kwargs={"k": 5})
)

# 5. 質問
result = qa.invoke({"query": "有給休暇の申請方法は?"})
print(result["result"])

LlamaIndex:エンタープライズ向けRAG

LlamaIndex公式サイト)はより高度なRAG機能を提供します。階層的インデックス・ハイブリッド検索・評価ツールが充実しており、大規模な社内ドキュメントに向いています。

LLMツール関連はLLMツールカテゴリから。DevOps構成はDevOps関連OSSをDevOpsカテゴリから。

pgvectorでPostgreSQL上にRAGを構築

-- pgvector拡張の有効化
CREATE EXTENSION vector;

-- 文書チャンクのテーブル
CREATE TABLE documents (
  id SERIAL PRIMARY KEY,
  content TEXT,
  embedding vector(1536)
);

-- 類似検索
SELECT content, embedding <=> '[0.1, 0.2, ...]'::vector AS distance
FROM documents
ORDER BY distance
LIMIT 5;

Supabase上でpgvectorを使えばサーバーレスにRAGを構築できます(Supabase Vector公式ガイド参照)。

まとめ

RAGは「LLMに社内知識を与える」最もポピュラーな手法です。LangChain+pgvector+OpenAIで1日で動くプロトタイプが作れます。本番化にはLlamaIndexの評価ツールで精度を計測しながら改善しましょう。

よくある質問(FAQ)

Q. RAGとファインチューニングの違いは何ですか?

RAGは推論時に外部知識を検索して参照するのに対し、ファインチューニングはモデル自体を特定データで再学習します。最新情報への対応・プライバシー管理はRAGが優位です。

Q. 日本語文書のRAGは精度が出ますか?

Embeddingモデルにtext-embedding-3-small(OpenAI)やmultilingual-e5-large(多言語対応)を使えば日本語でも高精度なRAGが実現できます。

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

社内ドキュメント1,000ページのEmbedding生成はOpenAI APIで約$0.1〜$0.5。推論コストはクエリ数に依存します。Ollamaなどローカルモデルを使えばコストゼロも可能です。

関連リンク・公式情報

ここで紹介したツールの一次情報(公式サイト・ソースコード)と、オープンソースラボ内の関連ページをまとめました。導入検討の際にご活用ください。

公式サイト・ソースコード(外部リンク)

オープンソースラボの関連ページ(内部リンク)

この記事で紹介したOSS

他の記事も読む

Let's Build Together

OSS導入、自社だけで悩まない。

ツール選定から構築・運用・AI活用まで、オープンソースラボ運営元のClasslessが伴走します。初回のご相談は無料です。