🤖
AI・機械学習

RAG構築手順をLangChainとPythonで解説!2026年最新版

#RAG #LangChain #Python #LLM #ベクトルストア #AI開発 #構築手順

RAG(Retrieval-Augmented Generation)の基本とLangChainによる実装(2026年3月時点)

2026年3月現在、大規模言語モデル(LLM)の**幻覚(hallucination)**問題や最新情報への対応不足を解決する強力な手法として、RAG(Retrieval-Augmented Generation)は引き続きその重要性を増しています。特に、複雑なアプリケーション開発フレームワークであるLangChainは、RAGシステム構築においてデファクトスタンダードとしての地位を確立しています。本記事では、PythonとLangChainを用いたRAGシステム構築の具体的な手順を解説します。

RAGは、ユーザーの質問に対して、外部の知識ベースから関連情報を検索(Retrieval)し、その情報を基にLLMが回答を生成(Generation)するアプローチです。これにより、LLMは常に最新かつ正確な情報に基づいて応答できるようになり、信頼性の高いAIアプリケーションの実現を可能にします。

LangChainを用いたRAG構築の主要コンポーネント

LangChainは、RAGシステムを構成する以下の主要な要素を抽象化し、モジュール化しています。

  • Document Loaders: PDF、CSV、Webページなど、様々な形式のデータをロードします。
  • Text Splitters: ロードしたドキュメントをLLMが処理しやすいサイズのチャンクに分割します。
  • Embeddings: テキストチャンクを数値ベクトル(埋め込み)に変換します。
  • Vector Stores: 生成されたベクトルを効率的に保存・検索するためのデータベースです。
  • Retrievers: ベクトルストアから関連性の高いドキュメントを検索します。
  • Chains: これら全てのコンポーネントを連結し、一連の処理フローを定義します。

💡 ポイント: 2026年には、LangChainの安定版はlangchain>=0.2.0が広く推奨されており、より洗練されたAPIとパフォーマンス最適化が施されています。特に、Expression Language (LCEL)の活用により、チェーンの構築がより宣言的かつ効率的になりました。

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

ここでは、ローカルファイルから情報を取得する基本的なRAGシステムを構築する手順を解説します。

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

まず、必要なライブラリをインストールします。ここでは、OpenAIの埋め込みモデルとChromaDBをベクトルストアとして使用します。

pip install langchain>=0.2.0 openai chromadb tiktoken

⚠️ 注意: OpenAI APIキーは環境変数に設定するか、コード内で直接指定する必要がありますが、セキュリティ上、環境変数での管理が推奨されます。

ステップ2: データの準備とチャンク分割

RAGの基盤となるドキュメントをロードし、適切なサイズに分割します。ここでは、例としてテキストファイルをロードします。

from langchain_community.document_loaders import TextLoader
from langchain_text_splitters import RecursiveCharacterTextSplitter
import os

# ドキュメントのロード
# 例として、README.mdをロードすると仮定
loader = TextLoader("README.md")
documents = loader.load()

# テキストのチャンク分割
text_splitter = RecursiveCharacterTextSplitter(
    chunk_size=1000,  # チャンクサイズを1000文字に設定
    chunk_overlap=200  # オーバーラップを200文字に設定
)
chunks = text_splitter.split_documents(documents)

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

💡 ポイント: RecursiveCharacterTextSplitterは、様々な区切り文字を試行しながら分割するため、意味のあるチャンクを生成しやすいです。chunk_sizechunk_overlapは、RAGの精度に大きく影響するため、データセットや用途に応じて調整が不可欠です。

ステップ3: 埋め込みモデルとベクトルストアの構築

分割したテキストチャンクを数値ベクトルに変換し、ベクトルストアに保存します。

from langchain_openai import OpenAIEmbeddings
from langchain_community.vectorstores import Chroma

# OpenAI Embeddingsモデルの初期化
# 2026年3月時点では、text-embedding-3-smallがコスト効率と性能のバランスで人気です。
# 料金は1Kトークンあたり$0.00002と非常に低価格です。
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")

# ChromaDBをベクトルストアとして初期化し、チャンクと埋め込みを保存
vectorstore = Chroma.from_documents(
    documents=chunks,
    embedding=embeddings,
    persist_directory="./chroma_db" # 永続化ディレクトリを指定
)

print(f"ベクトルストアに{vectorstore._collection.count()}個のチャンクが保存されました。")

# ベクトルストアをリトリーバーとして設定
retriever = vectorstore.as_retriever()

ステップ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

# LLMの初期化
# 2026年3月時点では、gpt-4oが最も高性能なモデルの一つであり、
# 1Mトークンあたり入力$5.00、出力$15.00で利用可能です。
llm = ChatOpenAI(model="gpt-4o", temperature=0.1)

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

<context>
{context}
</context>

質問: {input}
""")

# ドキュメントを結合するチェーンを作成
document_chain = create_stuff_documents_chain(llm, prompt)

# リトリーバーとドキュメント結合チェーンを組み合わせたリトリーバルチェーンを作成
retrieval_chain = create_retrieval_chain(retriever, document_chain)

# RAGチェーンの実行
question = "このドキュメントは何について説明していますか?"
response = retrieval_chain.invoke({"input": question})

print(f"質問: {question}")
print(f"回答: {response['answer']}")

question_2 = "LangChainの主な機能は何ですか?"
response_2 = retrieval_chain.invoke({"input": question_2})
print(f"\n質問: {question_2}")
print(f"回答: {response_2['answer']}")

2026年におけるRAGの進化と最適化

2026年には、単純なRAGだけでなく、より高度なRAGパターンが実用化されています。

  • Agentic RAG: LLMが自律的に検索戦略を決定したり、複数の情報源から情報を統合したりするアプローチです。LangChainのエージェント機能とツールを組み合わせることで実現されます。
  • Multi-modal RAG: テキストだけでなく、画像や音声などのマルチモーダルな情報源から検索を行い、LLMが多様な情報を基に回答を生成します。
  • RAG-Fusion: 複数の検索クエリを生成し、それぞれの結果を結合・再ランク付けすることで、検索の網羅性と精度を向上させる手法です。

これらの進化により、RAGシステムはより複雑な質問にも対応できるようになり、ビジネスにおける活用範囲がさらに拡大しています。LangChainはこれらの高度なRAGパターンを構築するための柔軟なフレームワークを提供し続けています。

💡 ポイント: RAGシステムのパフォーマンスを最適化するには、埋め込みモデルの選択、チャンク戦略、リトリーバーの種類(例: TF-IDF、BM25とのハイブリッド検索)、そしてプロンプトエンジニアリングが鍵となります。特に、リランキングモデルの導入は、検索結果の関連性を大幅に向上させることが可能です。

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

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