🤖
AI・機械学習

LangChainとPythonでRAGシステムを構築する手順:2026年最新ガイド

#RAG #LangChain #Python #LLM #ベクトルストア #AIシステム構築
AI

ヨミアゲAI編集部

AI音声・動画制作に関する情報をお届けします

RAG(Retrieval Augmented Generation)は、大規模言語モデル(LLM)が持つ知識を外部情報で補強し、より正確で最新の回答を生成するための強力なフレームワークです。2026年現在、LangChainとPythonを用いたRAGシステム構築は、その柔軟性と豊富な統合オプションにより、多くの開発者に採用されています。本記事では、LangChainとPythonによるRAG構築の具体的な手順と、2026年時点での考慮事項を解説します。

RAGの基本要素と2026年における進化

RAGシステムは、主に以下の3つのフェーズで構成されます。

  1. Retrieval(情報検索): ユーザーの質問に対し、関連性の高い情報を外部データソース(ナレッジベース、ドキュメントなど)から検索します。このフェーズでは、ドキュメントの分割(チャンキング)、埋め込み(Embedding)、ベクトルデータベースへの保存が中心となります。
  2. Augmentation(情報補強): 検索された情報をユーザーの質問とともにLLMへのプロンプトに組み込み、LLMが参照できるコンテキストを提供します。
  3. Generation(回答生成): 補強された情報に基づいて、LLMが最終的な回答を生成します。

2026年現在、RAGは初期のシンプルな検索・生成から大きく進化しています。特に注目すべきは、より高度なチャンキング戦略(セマンティックチャンキング、親子チャンキングなど)、高性能な埋め込みモデル(OpenAI text-embedding-3-large やCohere embed-english-v3.0 など)、そして検索結果の精度を高めるリランカー(Cohere Rerank、BGE Rerankerなど)の導入です。これにより、検索の関連性と回答の忠実性が飛躍的に向上しています。

LangChainとPythonによるRAG構築のステップバイステップ

ここでは、LangChain Expression Language (LCEL) を活用したRAG構築の手順を追っていきます。

ステップ1: 環境構築とライブラリのインストール

まず、必要なライブラリをインストールします。Python 3.10以降の環境を推奨します。

pip install -U langchain-openai langchain-chroma tiktoken pypdf

💡 ポイント: 使用するLLMプロバイダー(OpenAI, Anthropicなど)やベクトルストア(Chroma, Pineconeなど)に応じて、対応するLangChainインテグレーションパッケージを追加でインストールしてください。例えば、Anthropicを使用する場合は langchain-anthropic を、Pineconeを使用する場合は langchain-pinecone をインストールします。

ステップ2: ドキュメントの読み込みと分割(Loading & Splitting)

RAGの基盤となるドキュメントを読み込み、検索に適したチャンクに分割します。ここではPDFファイルを例に挙げますが、UnstructuredFileLoaderなど様々なローダーが利用可能です。

from langchain_community.document_loaders import PyPDFLoader
from langchain_text_splitters import RecursiveCharacterTextSplitter

# ドキュメントの読み込み
loader = PyPDFLoader("example.pdf") # 実際のファイルパスに置き換える
docs = loader.load()

# ドキュメントの分割
text_splitter = RecursiveCharacterTextSplitter(
    chunk_size=500,  # チャンクサイズを500文字に設定
    chunk_overlap=100, # オーバーラップを100文字に設定
    length_function=len,
    is_separator_regex=False,
)
splits = text_splitter.split_documents(docs)

print(f"オリジナルドキュメント数: {len(docs)}")
print(f"分割後のチャンク数: {len(splits)}")

⚠️ 注意: チャンクサイズとオーバーラップは、ドキュメントの内容や検索の粒度によって最適値が異なります。一般的に、チャンクサイズは200〜1000文字程度オーバーラップはチャンクサイズの10〜20%程度が推奨されますが、試行錯誤が必要です。

ステップ3: 埋め込みモデルとベクトルストアの選択(Embedding & Vector Store)

分割されたチャンクをベクトル化し、ベクトルストアに保存します。これにより、セマンティックな類似性に基づいて情報を検索できるようになります。

from langchain_openai import OpenAIEmbeddings
from langchain_chroma import Chroma

# 埋め込みモデルの初期化
# OpenAIのtext-embedding-3-smallは100万トークンあたり$0.02で利用可能 (2026年3月時点)
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")

# ベクトルストアの初期化とチャンクの追加
# ローカルで動作するChromaDBを使用
vectorstore = Chroma.from_documents(documents=splits, embedding=embeddings)

# リトリーバーの作成
retriever = vectorstore.as_retriever()

主要なベクトルストアの比較(2026年3月時点):

ベクトルストア タイプ 主な特徴 無料枠/料金体系例
Chroma ローカル/OSS 軽量でローカル環境での開発に最適。Pythonで完結。 無料 (OSS)
Pinecone マネージド 大規模データに対応。スケーラビリティとパフォーマンスが特徴。 Developerプランあり (最大1インデックス、100Kベクトルまで無料)
Qdrant ローカル/マネージド 高速な検索と豊富なフィルタリング機能。OSS版とクラウド版。 OSS版無料、クラウド版は利用量に応じた従量課金
Weaviate ローカル/マネージド グラフベースの検索や多言語対応。OSS版とクラウド版。 OSS版無料、クラウド版は利用量に応じた従量課金

ステップ4: LLMの選択とRetrieval Chainの構築

最後に、LLMを設定し、リトリーバーと組み合わせたRAGチェインを構築します。LCELを使うことで、モジュールを柔軟に組み合わせてチェインを作成できます。

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

# LLMの初期化
# GPT-4oは入力100万トークンあたり$5.00、出力100万トークンあたり$15.00 (2026年3月時点)
llm = ChatOpenAI(model="gpt-4o", temperature=0)

# プロンプトテンプレートの定義
template = """あなたは質問応答システムです。提供されたコンテキストのみに基づいて、ユーザーの質問に正確に答えてください。
もしコンテキストに情報がない場合は、「提供された情報からは答えられません。」と答えてください。

質問: {question}

コンテキスト: {context}
"""
prompt = ChatPromptTemplate.from_template(template)

# RAGチェインの構築 (LCELを使用)
rag_chain = (
    {"context": retriever, "question": RunnablePassthrough()}
    | prompt
    | llm
    | StrOutputParser()
)

# 質問の実行
question = "このドキュメントの主な目的は何ですか?"
response = rag_chain.invoke(question)
print(response)

💡 ポイント: リランカー(例: Cohere Rerank)を導入することで、リトリーバーが返す初期検索結果の関連性をさらに向上させることができます。リトリーバーとLLMの間にリランカーを組み込むことで、より質の高いコンテキストをLLMに提供できます。

RAGシステムの評価と最適化

RAGシステムは構築して終わりではありません。実際の運用環境でその性能を評価し、継続的に最適化していくことが重要です。

  • 評価指標:
    • 関連性 (Relevance): 検索された情報が質問にどれだけ関連しているか。
    • 忠実性 (Faithfulness): 生成された回答が、提供されたコンテキストにどれだけ忠実か。幻覚(hallucination)の有無。
    • 回答の質 (Answer Quality): 回答が正確で、包括的かつ自然か。
  • 評価ツール: LangChainが提供するLangSmithは、RAGチェインのデバッグ、テスト、監視、評価を統合的に行うためのプラットフォームです。2026年現在、LangSmithは初期の利用に対しては無料枠(例: 初回100万トークンまたは一定期間)を提供しており、開発者がRAGシステムのボトルネックを特定し、改善策を講じるのに役立ちます。
  • 最適化戦略:
    • チャンキング戦略の見直し: ドキュメントの内容に合わせた最適なチャンクサイズ、オーバーラップ、またはセマンティックチャンキングの導入。
    • 埋め込みモデルの変更: より高性能な埋め込みモデルへの切り替え、または特定のドメインに特化したファインチューニング済みモデルの利用。
    • リランカーの導入: 検索結果の精度を高めるために、リトリーバーの後にリランカーを組み込む。
    • プロンプトエンジニアリング: LLMへの指示(システムプロンプト)を改善し、より望ましい回答を生成させる。
    • データ品質の向上: 参照元となるドキュメント自体の品質を向上させる。

RAGシステムは、単一の静的なソリューションではなく、継続的なフィードバックと改善によってその真価を発揮します。LangChainとPythonを駆使し、これらのステップを繰り返すことで、ユーザーにとって価値のある高精度な情報検索・生成システムを構築できるでしょう。

AI音声でナレーションを作ってみませんか?

ヨミアゲAIを試す(無料)