🤖
AI・機械学習

RAG構築手順 LangChain Python: 2026年最新ガイドと最適化

#RAG #LangChain #Python #LLM #ベクトルストア #AI
AI

ヨミアゲAI編集部

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

2026年3月現在、Retrieval-Augmented Generation (RAG) は、大規模言語モデル (LLM) が持つ幻覚 (hallucination) の問題を克服し、最新かつ信頼性の高い情報を基に回答を生成するためのデファクトスタンダードとなっています。特にPython製のフレームワークであるLangChainは、RAGシステム構築の複雑さを抽象化し、開発者が迅速にプロトタイプから本番環境への移行を可能にする強力なツールとして進化を続けています。本記事では、LangChainとPythonを用いたRAGシステム構築の具体的な手順と、2026年時点での最新の考慮事項を解説します。

2026年におけるRAGとLangChainの進化

2026年のRAGシステムは、単一のドキュメント検索に留まらず、マルチモーダル情報の統合、より高度なリトリーバル戦略、そしてエージェント機能との連携が一般的になっています。LangChainもこの進化に対応し、コアライブラリはlangchain-core、各種統合はlangchain-community、そして高レベルな抽象化とオーケストレーションはlangchainという形でモジュール化が進み、より柔軟かつ効率的な開発が可能です。特に、リトリーバーは単なるキーワードマッチングやセマンティック検索だけでなく、ユーザーの意図を深く理解し、複数の情報源から最適な情報を組み合わせる能力が強化されています。

💡 ポイント: 2026年3月時点でのLangChainの最新安定版はv0.9.xシリーズであり、エージェント機能やストリーミング処理の最適化が図られています。

LangChainとPythonによるRAG構築手順

LangChainとPythonを用いてRAGシステムを構築する基本的なステップは以下の通りです。

1. 環境構築と必要なライブラリのインストール

まず、Python環境をセットアップし、LangChainおよび関連ライブラリをインストールします。

pip install langchain langchain-openai langchain-community chromadb tiktoken pypdf
  • langchain: LangChainのコアライブラリ
  • langchain-openai: OpenAIモデルとの連携用
  • langchain-community: ドキュメントローダーやベクトルストアなど、コミュニティ製の統合
  • chromadb: 軽量なローカルベクトルデータベース
  • tiktoken: トークン計算用
  • pypdf: PDFドキュメントローダー用

2. ドキュメントのロードとチャンキング

RAGシステムは、大規模なドキュメントを小さな意味のある塊(チャンク)に分割し、検索効率を高めます。

from langchain_community.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter

# ドキュメントのロード (例: PDFファイル)
loader = PyPDFLoader("your_document.pdf")
documents = loader.load()

# テキストのチャンキング
text_splitter = RecursiveCharacterTextSplitter(
    chunk_size=1000,  # 各チャンクの最大文字数
    chunk_overlap=200, # チャンク間の重複文字数
    add_start_index=True
)
chunks = text_splitter.split_documents(documents)

print(f"元のドキュメント数: {len(documents)}")
print(f"分割後のチャンク数: {len(chunks)}")
print(f"最初のチャンクの文字数: {len(chunks[0].page_content)}")

⚠️ 注意: chunk_sizechunk_overlapの調整はRAGの性能に大きく影響します。ドキュメントの内容や検索の粒度に合わせて最適化が必要です。

3. 埋め込みとベクトルストアへの格納

チャンクを数値ベクトル(埋め込み)に変換し、ベクトルデータベースに格納します。これにより、セマンティック検索が可能になります。

from langchain_openai import OpenAIEmbeddings
from langchain_community.vectorstores import Chroma
import os

# OpenAI APIキーの設定
os.environ["OPENAI_API_KEY"] = "YOUR_OPENAI_API_KEY"

# 埋め込みモデルの初期化
# 2026年3月時点ではtext-embedding-3-largeが推奨され、3072次元のベクトルを生成します。
embeddings = OpenAIEmbeddings(model="text-embedding-3-large")

# ベクトルストアの構築とチャンクの格納
# ローカルのChromaDBを使用
vectorstore = Chroma.from_documents(chunks, embeddings, persist_directory="./chroma_db")

# ベクトルストアを永続化
vectorstore.persist()
print("チャンクがベクトルストアに格納されました。")

4. リトリーバーとRAGチェーンの構築

ベクトルストアから関連ドキュメントを検索するリトリーバーを構築し、LLMと連携させてRAGチェーンを作成します。

from langchain_openai import ChatOpenAI
from langchain.chains import create_retrieval_chain
from langchain.chains.combine_documents import create_stuff_documents_chain
from langchain_core.prompts import ChatPromptTemplate

# リトリーバーの作成
retriever = vectorstore.as_retriever(search_kwargs={"k": 3}) # 上位3件のドキュメントを検索

# LLMの初期化
# 2026年3月時点では、GPT-4oが高速かつ高性能で推奨されます。
# GPT-4oのAPI料金は、入力100万トークンあたり約$5.00、出力100万トークンあたり約$15.00です。
llm = ChatOpenAI(model="gpt-4o", temperature=0.1)

# プロンプトテンプレートの定義
prompt = ChatPromptTemplate.from_template("""
あなたは提供されたコンテキスト情報に基づいて質問に答えるAIアシスタントです。
もしコンテキストに情報がない場合は、「情報が見つかりませんでした」と答えてください。

コンテキスト:
{context}

質問: {input}
""")

# ドキュメント結合チェーンとRAGチェーンの作成
document_chain = create_stuff_documents_chain(llm, prompt)
retrieval_chain = create_retrieval_chain(retriever, document_chain)

print("RAGチェーンが構築されました。")

5. 質問の実行

構築したRAGチェーンに質問を投げかけ、回答を取得します。

# 質問の実行
response = retrieval_chain.invoke({"input": "LangChainとは何ですか?"})

print("質問:", response["input"])
print("回答:", response["answer"])

RAGシステムの最適化と運用

2026年におけるRAGシステムの最適化と運用では、以下の点が重要です。

  • リトリーバーの強化: 単純なセマンティック検索だけでなく、Parent Document RetrieverMulti-Query RetrieverHyDEなど、より高度なリトリーバル戦略を導入することで、検索精度を大幅に向上させることが可能です。
  • 埋め込みモデルの選択: OpenAIのtext-embedding-3-largeのような高性能モデルに加え、特定のドメインに特化したオープンソースモデル(例: BGEシリーズ)も選択肢に入ります。
  • 評価とモニタリング: LangChainが提供するLangSmithは、RAGチェーンの実行トレース、A/Bテスト、評価指標のトラッキングを可能にする強力なプラットフォームです。LangSmithの無料トライアルは30日間提供されており、その後のエンタープライズプランは利用規模に応じたカスタム料金体系です。
  • パフォーマンスとスケーラビリティ: 本番環境では、ChromaDBのようなローカルベクトルストアではなく、PineconeWeaviateQdrantのようなクラウドベースのマネージドベクトルデータベースが推奨されます。これらのサービスは、数千万件以上のドキュメントや秒間数百クエリ(QPS)にも対応できます。
ベクトルストア タイプ 特徴 無料枠/料金
ChromaDB ローカル/自己ホスト型 軽量、開発・プロトタイプ向け 無料
Pinecone マネージドクラウド 高速、スケーラブル、エンタープライズ向け 無料枠(1インデックス、15万ベクトルまで)、その後は利用量に応じた従量課金
Weaviate マネージドクラウド/自己ホスト型 グラフベース検索、マルチモーダル対応 無料枠(一部制限あり)、その後は利用量に応じた従量課金

💡 ポイント: RAGシステムのデバッグと改善には、各ステップでの入出力、特にリトリーバーが取得したコンテキストの品質をLangSmithで確認することが不可欠です。

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

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