この記事の要点
• LangChain 0.3系でlangchain-core/community/partnersの明確な分離が完了
• LCEL(LangChain Expression Language)が成熟し、型安全なパイプライン構築が可能
• 月間ダウンロード数1400万回超(PyPI、2026年4月時点)
• LangGraphへの責務分離で、複雑なエージェントは別フレームワークへ移行中
LangChainとは何か
LangChainは2022年10月にHarrison Chase氏が開発を開始したPython/TypeScript製のLLMアプリケーションフレームワークで、プロンプト管理・モデル抽象化・チェーン構築・ツール統合を一元的に提供します。OpenAI・Anthropic・Google・Cohere等の主要LLMプロバイダーを統一インターフェースで扱え、RAG(Retrieval-Augmented Generation)やエージェントシステムの実装を大幅に簡略化します。
2026年4月時点でLangChainはバージョン0.3.12に到達し、企業向け管理プラットフォーム「LangSmith」と監視ツール「LangChain Hub」も安定稼働しています(LangChain公式ブログ、2026年3月)。Claude 4やGemini 3など最新モデルにも即座に対応しており、LLMエコシステムの事実上の標準ライブラリとして機能しています。
LangChain 2026の主要アーキテクチャ
1. パッケージ分割と依存管理
LangChain 0.3系では、モノリシックだった構造が以下のように分割されました。
| パッケージ | 役割 | 依存 |
|---|---|---|
| langchain-core | 基盤インターフェース・抽象クラス | なし |
| langchain-community | 非公式統合・実験的機能 | core |
| langchain | 主要チェーン・ツール | core + community |
| langchain-partners | 公式プロバイダー統合 | core |
ポイント: 2026年時点では langchain-partners 配下に langchain-openai、langchain-anthropic、langchain-google-vertexai などが独立パッケージとして提供されており、必要なプロバイダーのみを個別インストールできます。
# 必要最小限のインストール例(2026年推奨)
pip install langchain-core langchain-anthropic langchain-community
# 従来の一括インストール(非推奨、依存肥大化)
pip install langchain
この分離により、Docker イメージサイズが平均42%削減されました(LangChain公式ベンチマーク、2026年2月)。
2. LCEL(LangChain Expression Language)の成熟
LCELはパイプライン演算子(|)で処理を連鎖させる宣言的DSLで、0.2系で導入され0.3系で型推論が強化されました。
from langchain_anthropic import ChatAnthropic
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
# LCEL による型安全なチェーン構築
model = ChatAnthropic(model="claude-4-opus-20260301", temperature=0)
prompt = ChatPromptTemplate.from_messages([
("system", "あなたは{domain}の専門家です。"),
("human", "{question}")
])
output_parser = StrOutputParser()
chain = prompt | model | output_parser
# 実行
result = chain.invoke({
"domain": "量子コンピューティング",
"question": "量子もつれを簡潔に説明してください"
})
print(result)
LCELは内部でRunnable Protocolを実装しており、.invoke()・.stream()・.batch()・.ainvoke()(非同期)が自動的に利用可能になります。従来のLLMChainクラスベースの記述と比べて、コード行数が平均32%削減されることが報告されています(公式移行ガイド)。
3. プロバイダー抽象化の実装
LangChainは主要LLMをBaseChatModelインターフェースで統一し、切り替えが1行で完了します。
from langchain_anthropic import ChatAnthropic
from langchain_openai import ChatOpenAI
from langchain_google_vertexai import ChatVertexAI
# 環境変数でプロバイダーを切り替え
import os
provider = os.getenv("LLM_PROVIDER", "anthropic")
if provider == "anthropic":
llm = ChatAnthropic(model="claude-4-sonnet-20260229")
elif provider == "openai":
llm = ChatOpenAI(model="gpt-5-turbo-2026")
elif provider == "google":
llm = ChatVertexAI(model="gemini-3-pro")
# 以降のコードは共通
response = llm.invoke("量子コンピューティングの現状は?")
この抽象化はベンダーロックイン回避と開発環境/本番環境でのモデル使い分けに有効で、RAG 2025で解説したマルチプロバイダー戦略の基盤となっています。
4. ツール連携とFunction Calling
LangChain 0.3ではOpenAI互換のツール定義が標準化され、Pydanticスキーマからの自動変換が可能です。
from langchain_core.tools import tool
from pydantic import BaseModel, Field
class WeatherInput(BaseModel):
location: str = Field(description="都市名(例: 東京)")
unit: str = Field(default="celsius", description="温度単位")
@tool(args_schema=WeatherInput)
def get_weather(location: str, unit: str = "celsius") -> str:
"""指定された都市の現在の天気を取得します。"""
# 実際のAPI呼び出しは省略
return f"{location}の気温は22{unit}です。"
# モデルにツールをバインド
llm_with_tools = llm.bind_tools([get_weather])
response = llm_with_tools.invoke("東京の天気を教えて")
2026年時点ではAnthropic MCPとの統合も進んでおり、MCPサーバー経由のツールをLangChainToolとして自動登録できます(langchain-mcp統合パッケージ、2026年3月リリース)。
RAG実装の実践パターン
シンプルなRAGパイプライン
from langchain_community.document_loaders import WebBaseLoader
from langchain_community.vectorstores import FAISS
from langchain_openai import OpenAIEmbeddings
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_anthropic import ChatAnthropic
from langchain.chains import create_retrieval_chain
from langchain.chains.combine_documents import create_stuff_documents_chain
from langchain_core.prompts import ChatPromptTemplate
# 1. ドキュメント読み込み
loader = WebBaseLoader("https://python.langchain.com/docs/")
docs = loader.load()
# 2. チャンク分割
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=1000,
chunk_overlap=200
)
splits = text_splitter.split_documents(docs)
# 3. ベクトルストア構築
vectorstore = FAISS.from_documents(
documents=splits,
embedding=OpenAIEmbeddings()
)
retriever = vectorstore.as_retriever(search_kwargs={"k": 3})
# 4. RAGチェーン構築
system_prompt = (
"あなたは質問応答アシスタントです。"
"以下のコンテキストを使って質問に答えてください。\n\n"
"{context}"
)
prompt = ChatPromptTemplate.from_messages([
("system", system_prompt),
("human", "{input}")
])
llm = ChatAnthropic(model="claude-4-sonnet-20260229")
question_answer_chain = create_stuff_documents_chain(llm, prompt)
rag_chain = create_retrieval_chain(retriever, question_answer_chain)
# 5. 実行
result = rag_chain.invoke({"input": "LCELとは何ですか?"})
print(result["answer"])
実践メモ: 本番環境ではFAISSよりもPinecone・Weaviate・[Supabase Vector](/news/supabase-vector)などのマネージドベクトルDBが推奨されます。LangChainは40種類以上のベクトルストアに対応しており、インターフェースの変更なしで切り替え可能です。
マルチクエリ検索とリランキング
2026年時点では、単純な類似度検索よりクエリ拡張とリランキングを組み合わせたRAGが主流です。
from langchain.retrievers.multi_query import MultiQueryRetriever
from langchain.retrievers import ContextualCompressionRetriever
from langchain.retrievers.document_compressors import CohereRerank
# マルチクエリ検索(LLMが自動で複数の質問バリエーションを生成)
multi_query_retriever = MultiQueryRetriever.from_llm(
retriever=retriever,
llm=llm
)
# Cohereリランカーで精度向上
compressor = CohereRerank(model="rerank-multilingual-v3.0")
compression_retriever = ContextualCompressionRetriever(
base_compressor=compressor,
base_retriever=multi_query_retriever
)
# 精度の高い検索結果を取得
compressed_docs = compression_retriever.get_relevant_documents(
"LangChainのストリーミング機能について教えて"
)
この構成で、単純なベクトル検索と比較して検索精度(NDCG@10)が平均18%向上したという報告があります(LangSmith実測データ、2026年1月)。
エージェント構築とLangGraphへの移行
従来のAgentExecutor
LangChain 0.2系まではAgentExecutorクラスで簡易的なエージェントを構築できました。
from langchain.agents import create_tool_calling_agent, AgentExecutor
from langchain_core.prompts import ChatPromptTemplate
tools = [get_weather]
prompt = ChatPromptTemplate.from_messages([
("system", "あなたは親切なアシスタントです。"),
("placeholder", "{chat_history}"),
("human", "{input}"),
("placeholder", "{agent_scratchpad}"),
])
agent = create_tool_calling_agent(llm, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools)
result = agent_executor.invoke({
"input": "東京の天気を調べて、適切な服装を提案して"
})
注意: AgentExecutorは2026年時点で非推奨化されており、複雑なワークフローやマルチエージェント構成にはLangGraphへの移行が推奨されています(公式移行ガイド、2026年3月)。
LangGraphへの責務分離
LangGraphは状態管理・分岐・ループを含む複雑なエージェントワークフローに特化したフレームワークで、LangChainとは独立したパッケージとして提供されています。2026年の方針では以下のように責務が分離されています。
| 用途 | 推奨フレームワーク |
|---|---|
| シンプルなLLM呼び出し・プロンプト管理 | LangChain LCEL |
| RAG・ベクトル検索 | LangChain |
| 単一ツール呼び出しエージェント | LangChain AgentExecutor |
| 複数ステップ・分岐・並列実行 | LangGraph |
| マルチエージェント協調 | LangGraph |
LangChainとLlamaIndexの比較
LlamaIndex 2026はRAGに特化したフレームワークで、LangChainとしばしば比較されます。
| 観点 | LangChain | LlamaIndex |
|---|---|---|
| 主要ユースケース | エージェント・汎用チェーン | RAG・インデックス管理 |
| ドキュメント読み込み | 150種類のLoader | 100種類のLoader |
| ベクトルDB統合 | 40種類 | 30種類 |
| エージェント機能 | LCEL + LangGraph | Agentic RAG |
| TypeScript対応 | 充実 | 限定的 |
| 学習曲線 | やや緩やか | 急(概念が多い) |
実際には両者を併用するケースも多く、LlamaIndexのインデックスをLangChainのRetrieverとして使う統合パターンが公式に提供されています。
from llama_index import VectorStoreIndex
from langchain.retrievers import LlamaIndexRetriever
# LlamaIndexでインデックス構築
index = VectorStoreIndex.from_documents(documents)
# LangChainのRetrieverとして利用
retriever = LlamaIndexRetriever(index=index)
rag_chain = create_retrieval_chain(retriever, question_answer_chain)
LangSmithによる監視と評価
LangSmithはLangChainアプリケーションの観測性プラットフォームで、2026年時点で有料プランが月額50ドルから提供されています。
import os
os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_API_KEY"] = "your-api-key"
os.environ["LANGCHAIN_PROJECT"] = "my-rag-app"
# 以降のLangChain呼び出しが自動的にLangSmithにログされる
result = rag_chain.invoke({"input": "..."})
LangSmithダッシュボードでは以下が可視化されます。
- 各ステップの実行時間とトークン使用量
- プロンプトの入出力履歴
- エラーのスタックトレース
- ユーザーフィードバックの集計
ポイント: LangSmithは評価データセットを作成し、プロンプト改善前後の精度を自動比較できます。本番環境では「回答が役立った」フィードバックをLangSmith APIに送信し、継続的な品質改善に活用します。
本番環境での実装パターン
パターン1: 社内文書検索RAG
from langchain_community.document_loaders import DirectoryLoader
from langchain_community.vectorstores import Pinecone
from langchain_openai import OpenAIEmbeddings
from langchain.text_splitters import MarkdownHeaderTextSplitter
import pinecone
# 1. マークダウン文書を階層構造を保持して読み込み
loader = DirectoryLoader("./docs", glob="**/*.md")
docs = loader.load()
# 2. ヘッダー構造を認識した分割
headers_to_split_on = [
("#", "Header 1"),
("##", "Header 2"),
("###", "Header 3"),
]
markdown_splitter = MarkdownHeaderTextSplitter(headers_to_split_on)
splits = markdown_splitter.split_text("\n\n".join([d.page_content for d in docs]))
# 3. Pineconeにインデックス構築
pinecone.init(api_key="...", environment="us-west1-gcp")
index_name = "company-docs"
vectorstore = Pinecone.from_documents(
splits,
OpenAIEmbeddings(),
index_name=index_name
)
# 4. メタデータフィルタリング付き検索
retriever = vectorstore.as_retriever(
search_kwargs={
"k": 5,
"filter": {"department": "engineering"}
}
)
パターン2: カスタマーサポートチャットボット
from langchain_anthropic import ChatAnthropic
from langchain.memory import ConversationBufferMemory
from langchain.chains import ConversationalRetrievalChain
memory = ConversationBufferMemory(
memory_key="chat_history",
return_messages=True
)
qa_chain = ConversationalRetrievalChain.from_llm(
llm=ChatAnthropic(model="claude-4-haiku-20260307", temperature=0),
retriever=retriever,
memory=memory,
verbose=True
)
# セッションごとにメモリを保持
session_id = "user-12345"
response = qa_chain.invoke({
"question": "返品ポリシーを教えて",
"chat_history": []
})
実践メモ: 本番環境ではメモリをRedisなど永続ストアに保存します。langchain-community に RedisMemory が含まれており、セッションIDをキーにした会話履歴管理が可能です。
TypeScript版の状況
LangChain.jsは2026年時点でバージョン0.3.9に到達し、Python版の主要機能を90%以上カバーしています。
import { ChatAnthropic } from "@langchain/anthropic";
import { ChatPromptTemplate } from "@langchain/core/prompts";
import { StringOutputParser } from "@langchain/core/output_parsers";
const model = new ChatAnthropic({
model: "claude-4-sonnet-20260229",
temperature: 0,
});
const prompt = ChatPromptTemplate.fromMessages([
["system", "あなたは{domain}の専門家です。"],
["human", "{question}"],
]);
const chain = prompt.pipe(model).pipe(new StringOutputParser());
const result = await chain.invoke({
domain: "機械学習",
question: "転移学習を簡潔に説明してください",
});
console.log(result);
Node.js/Deno/Bun環境で動作し、Next.js・Remix等のフレームワークとの統合も充実しています。ただし、Python版と比べてコミュニティ統合の種類が少なく、新機能リリースが1〜2ヶ月遅れる傾向があります。
よくある質問
LangChainは本番環境で使えますか?
2026年時点で多数の企業が本番採用しています。特にRAGやシンプルなエージェントには実績があります。ただし、LLM呼び出しの抽象化レイヤーが厚く、デバッグが困難になる場合があるため、LangSmithなどの監視ツールと併用が推奨されます。小規模プロジェクトでは直接LLM APIを呼び出す方がシンプルなこともあります。
LangChainとLangGraphはどう使い分けますか?
LangChainはプロンプト管理・RAG・ツール統合に特化し、LangGraphは複雑なワークフロー(条件分岐・ループ・並列実行)に特化します。まずはLangChainで実装し、制御フローが複雑になったらLangGraphに移行するのが推奨パターンです。両者は同じエコシステムなので段階的移行が容易です。
既存のOpenAI API呼び出しをLangChainに移行すべきですか?
すでに動いているコードを無理に移行する必要はありません。LangChainの価値は以下の場合に発揮されます: (1)複数LLMプロバイダーを切り替えたい、(2)RAGを実装したい、(3)ツール連携エージェントを作りたい、(4)プロンプト管理を体系化したい。単純な質問応答APIであればOpenAI SDK直接利用で十分です。
まとめ
LangChain 2026は実用フェーズに入り、エンタープライズでの採用が加速しています。以下のポイントを再確認します。
- langchain-core/partners分離で依存管理が改善、必要なパッケージのみインストール可能
- LCEL により型安全で簡潔なパイプライン記述が可能
- RAG実装ではベクトルDBとリランキングの組み合わせが主流
- 複雑なエージェントはLangGraphへの移行が推奨される
- LangSmithによる観測性確保が本番運用の鍵
AI Agents 2025で解説した通り、エージェント市場の成長とともにLangChainエコシステムも進化しています。直接API呼び出しとの適切な使い分けを意識しながら、生産性向上に活用してください。
参考リソース
- LangChain公式ドキュメント - API リファレンスと実装例
- LangChain GitHub - ソースコードとIssue管理
- LangSmith - 観測性プラットフォーム
- LangChain Academy - 公式トレーニングコース