🤖
AI・機械学習

LangChainとPythonでRAGを構築!2026年最新手順とベストプラクティス

#LangChain #RAG #Python #LLM #LangGraph #ベクトルストア #生成AI #AI開発
AI

ヨミアゲAI編集部

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

2026年現在、LangChainはLLMアプリケーション構築のデファクトスタンダードとして進化を続けており、GitHubスター数は10万を超え、80以上のモデルプロバイダーをサポートしています。中でもRAG (Retrieval-Augmented Generation)は、ハルシネーション(誤情報生成)を抑制し、事実に基づいた信頼性の高い応答を生成するための最も重要なユースケースとして位置づけられています。本記事では、LangChainおよびその進化形であるLangGraphを用いたRAG構築の具体的な手順と、2026年における最新のベストプラクティスを解説します。

2026年におけるRAG構築の基本手順

LangChainを用いたRAGシステムは、主に以下の4つのステップで構築されます。

1. ドキュメントの準備とチャンキング

まず、RAGの基盤となるドキュメントを準備します。PDF、Webページ、Markdownファイルなど、様々な形式のデータをLangChainのDocument Loadersで読み込みます。

💡 ポイント: 2026年現在、RAGの品質はチャンキング戦略に大きく依存します。

読み込んだドキュメントは、LLMが処理しやすいように適切なサイズに分割(チャンキング)する必要があります。

from langchain_community.document_loaders import WebBaseLoader
from langchain_text_splitters import RecursiveCharacterTextSplitter

# ドキュメントの読み込み例
loader = WebBaseLoader("https://www.example.com/2026-rag-guide")
docs = loader.load()

# チャンキング
# Q&Aには200-500文字の短いチャンク、要約には1000-2000文字の長いチャンクが推奨されます。
text_splitter = RecursiveCharacterTextSplitter(
    chunk_size=500,  # チャンクサイズ
    chunk_overlap=100, # オーバーラップ
    length_function=len,
    is_separator_regex=False,
)
splits = text_splitter.split_documents(docs)

2026年には、単純な文字数分割に加え、セマンティック・スプリッティング(意味的なまとまりで分割)、親ドキュメント検索(小チャンクで検索し、関連する大チャンクをコンテキストとして利用)、マルチ表現インデックス(同一ドキュメントの複数表現をインデックス化)といった高度な戦略が普及しています。

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

次に、分割されたテキストチャンクを数値ベクトル(埋め込み)に変換し、ベクトルストアに格納します。これにより、意味的に類似したドキュメントを高速に検索できるようになります。

from langchain_openai import OpenAIEmbeddings
from langchain_community.vectorstores import Chroma

# 埋め込みモデルの選択 (例: OpenAI Embeddings)
# ローカルで完結させたい場合は、HuggingFaceEmbeddingsなどを利用
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")

# ベクトルストアへの格納 (例: ChromaDB)
vectorstore = Chroma.from_documents(
    documents=splits,
    embedding=embeddings,
    persist_directory="./chroma_db" # ローカルに永続化
)

⚠️ 注意: 埋め込みモデルの選択はRAGの検索精度に直結します。OpenAIのtext-embedding-3-smallはコスト効率と性能のバランスが良く、広く利用されています。

3. 検索 (Retrieval)

ユーザーからの質問に対して、ベクトルストアから最も関連性の高いドキュメントチャンクを検索します。

# ベクトルストアからリトリーバーを作成
retriever = vectorstore.as_retriever(
    search_type="similarity", # または "mmr" (Maximal Marginal Relevance)
    search_kwargs={"k": 3} # 上位3件のドキュメントを取得
)

2026年におけるプロダクションRAGシステムでは、ハイブリッド検索(ベクトル検索とBM25などのキーワードマッチングの組み合わせ)の採用が加速しており、リコール精度が1%から9%向上する可能性があります。LangChainはEnsembleRetrieverなどでハイブリッド検索をサポートしています。

4. 生成 (Generation)

検索されたドキュメントチャンクとユーザーの質問をLLMに渡し、応答を生成させます。

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)
llm = ChatOpenAI(model="gpt-4o", temperature=0)

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

質問: {question}
コンテキスト: {context}
""")

# LangChain Expression Language (LCEL) を用いたRAGチェーンの構築
rag_chain = (
    {"context": retriever, "question": RunnablePassthrough()}
    | prompt
    | llm
    | StrOutputParser()
)

# RAGチェーンの実行
response = rag_chain.invoke("LangChainとは何ですか?")
print(response)

2026年における高度なRAG戦略とツール連携

2026年現在、RAGは単一の質問応答システムに留まらず、より複雑なワークフローやエージェントの一部として組み込まれることが増えています。

LangGraphによるRAGワークフローのオーケストレーション

LangGraphは、LangChainのグラフベースのエージェントオーケストレーションレイヤーであり、ステートフルなマルチエージェントワークフローを構築するために不可欠です。RAGシステムも、LangGraphによってより高度な多段階推論、ツールの動的呼び出し、条件分岐ロジックを持つエージェントに組み込むことができます。例えば、RAGが情報を見つけられなかった場合に、別のツール(Web検索など)を呼び出すといった複雑なフローを構築可能です。

ローカルLLMとRAGの統合

プライバシーとパフォーマンスの観点から、ローカル環境でのLLM活用が注目されています。OllamaとLangChainを組み合わせることで、ローカルでLlama 3などのオープンソースLLMを実行し、RAGシステムを構築する動向が見られます。これにより、外部APIへの依存を減らし、データ主権を強化できます。

# Ollamaをインストールし、Llama 3モデルをダウンロード
ollama run llama3

主要なツール、サービス、料金情報 (2026年3月時点)

LangChainを用いたRAG構築には、様々なコンポーネントが関与します。

カテゴリ ツール名/サービス名 特徴 料金情報
フレームワーク LangChain LLMアプリケーション構築のためのオープンソースフレームワーク。Python/JavaScript/TypeScriptをサポート。 無料
LangGraph LangChainのグラフベースエージェントオーケストレーションレイヤー。ステートフルなマルチエージェント。 無料
LlamaIndex RAGに特化したデータフレームワーク。LangChainと並ぶ主要なRAG開発フレームワーク。 無料
ベクトルストア ChromaDB 軽量でローカル実行可能なオープンソースベクトルデータベース。 無料
Pinecone マネージド型クラウドベクトルデータベース。スケーラブルなプロダクションRAG向け。 無料枠あり(Starterプラン)、有料プランは$70/月〜(Podのサイズと数による)
Weaviate オープンソースかつマネージド型のベクトルデータベース。セマンティック検索に特化。 オープンソース版は無料、マネージド型クラウドサービス(Weaviate Cloud)は$99/月〜(リソース使用量による)
埋め込みモデル OpenAI Embeddings OpenAIが提供する高性能な埋め込みモデル。text-embedding-3-smallなど。 text-embedding-3-smallは$0.00002/1kトークン。text-embedding-3-largeは$0.00013/1kトークン。
Hugging Face Hub (Sentence Transformers) オープンソースの埋め込みモデルを多数提供。ローカル実行可能。 モデルの利用は無料。Hugging Face Inference APIを利用する場合、無料ティアあり、有料プランは$9/月〜(リクエスト数、モデルサイズによる)
LLM OpenAI GPTシリーズ gpt-4o, gpt-4-turbo, gpt-3.5-turboなど。高機能で汎用性が高い。 gpt-4oは入力$5.00/1Mトークン、出力$15.00/1Mトークン。gpt-3.5-turboは入力$0.50/1Mトークン、出力$1.50/1Mトークン。
Anthropic Claudeシリーズ Claude 3 Opus, Sonnet, Haikuなど。長文コンテキスト処理に強み。 Claude 3 Sonnetは入力$3.00/1Mトークン、出力$15.00/1Mトークン。Claude 3 Opusは入力$15.00/1Mトークン、出力$75.00/1Mトークン。
Ollama ローカルでオープンソースLLM(Llama 3, Mistralなど)を実行するためのフレームワーク。 無料。モデルのダウンロードと実行にかかるリソースは自身のハードウェアに依存。

💡 ポイント: コストを抑えるには、まずは無料のChromaDBとHugging Faceの埋め込みモデル、Ollamaを組み合わせたローカル開発から始めるのがおすすめです。

2026年におけるRAGは、単なる概念検証を超え、企業の信頼性の高いGenAIシステム構築に不可欠な基盤技術となっています。LangChainとLangGraphの進化は、この動向を強力に推進し続けるでしょう。

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

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