LangChain
LangChainは、交換可能なモデル、ツール、リトリーバー、ミドルウェアを組み合わせてLLMアプリケーションやエージェントを構築するためのオープンソースフレームワークです。
LangChainは、大規模言語モデル(LLM)を基盤にアプリケーションやAIエージェントを構築するためのオープンソースフレームワークです。各モデルプロバイダーに、メッセージ、チャットモデル、ツール、リトリーバー向けの共通インターフェースを提供するため、モデル名を変更するだけで、あるプロバイダーのモデルから別のプロバイダーのモデルに切り替えられます。また、すぐに使えるエージェントループと、ベクトルストア、ドキュメントローダー、APIとの多数の統合機能も備えています。Harrison ChaseはChatGPTの公開数週間前にあたる2022年10月、LangChainをオープンソースのPythonプロジェクトとして公開しました。プロンプト、検索、モデル呼び出しを連結して生成AIアプリケーションを構築するツールキットとして、広く利用されるようになりました。LangChain 1.0とLangGraph 1.0は2025年10月22日に同時リリースされ、バージョン2.0までは破壊的変更を行わないと表明されました。
LangChainエコシステム#
現在、この名称はPythonとJavaScriptで利用できるパッケージ群を指します。
- langchain:
create_agentを中心とするエージェントフレームワークです。モデル、ツールのリスト、システムプロンプトを受け取り、動作するエージェントを返します。 - langchain-coreとインテグレーション: チャットモデル、メッセージ、埋め込み、リトリーバー、ツールの標準インターフェースに加え、それらを実装するlangchain-openaiやlangchain-anthropicなどのプロバイダーパッケージを提供します。
- LangGraph: LangChainエージェントが動作する、より低レベルのランタイムです。共有状態に対する一連のステップをグラフとしてプログラム化し、各ステップ後にその状態をチェックポイントとして保存できます。そのため、長時間のタスクも再起動後に再開でき、人間による承認のために一時停止することもできます。
- LangSmith: オブザーバビリティのトレース、データセットを使ったエージェント評価、エージェントのデプロイに対応するホスト型プラットフォームです。
従来のLangChainアプリはチェーンで構成されていました。ユーザー入力を埋め込んだプロンプトテンプレート、モデル呼び出し、出力パーサーを、プロンプトチェーンのようにパイプ構文で連結します。最も一般的なチェーンは検索拡張生成(RAG)です。ドキュメントを読み込み、チャンクに分割して、埋め込みをベクトルデータベースに保存し、各質問に最もよく一致するチャンクをモデルのコンテキストウィンドウに追加します。
LangChainエージェントの実行方法#
create_agentで構築したエージェントは、モデル呼び出しとツール呼び出しのループを繰り返します。これは、あらゆるエージェントハーネスが実行する関数呼び出しのループと同じです。ミドルウェアは各ステップに介入し、モデルの前後の動作を変更します。組み込みミドルウェアは、長い履歴の要約、個人データのマスキング、指定したツールの実行前に人間の承認を求める処理を行います。
LangChainエージェントにビジョン機能を追加する#
LangChainの@toolデコレーターは、Python関数のシグネチャから引数の型を、docstringから説明を読み取り、その関数をツールに変換します。この方法でUltralytics YOLO26をラップすると、エージェントに物体検出機能を追加できます。Results.summary()は、検出ごとのクラス名、信頼度、ボックスをモデルが読み取れるデータとして返します。
from langchain_core.tools import tool
from langchain_core.utils.function_calling import convert_to_openai_tool
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
@tool
def detect_objects(image_url: str) -> list[dict]:
"""Detect objects in an image and return each one's class name, confidence, and box."""
results = model(image_url)
return results[0].summary()
# LangChainがシグネチャとdocstringから導出するスキーマ。モデルに渡される形式です
print(convert_to_openai_tool(detect_objects))
# エージェントは、モデルのツール呼び出しに含まれる引数を使ってツールを実行します
detections = detect_objects.invoke({"image_url": "https://ultralytics.com/images/bus.jpg"})
print(detections[0]["name"], detections[0]["confidence"])最初の出力は、image_url文字列型パラメーターと説明としてのdocstringを含む関数定義で、LangChainがモデルに送信する内容です。2つ目の出力は、ツールが返す最初の検出結果です。tools=[detect_objects]をcreate_agentに渡すと、サポートされている任意のチャットモデルからpredictモードを通じて検出器を呼び出せます。
LangChainと関連ツールの比較#
- エージェント型ワークフロー: ルーティング、ツールの使用、評価ループなどの一般的な設計パターンです。LangGraphのグラフとLangChainエージェントがこれらを実装します。
- プロバイダーSDK: モデルプロバイダーのAPIを直接呼び出す場合、フレームワークは不要で、単一モデルのアプリに適しています。LangChainは、アプリが複数のモデル、ツール、データソースを扱う場合に役立つ共通インターフェース、インテグレーション、エージェントループを提供します。
- DSPy: マルチステップのLLMプログラムのプロンプトを自動的に作成・最適化するフレームワークです。サンプルデータに対する指標を使ってプロンプトを調整します。
- LlamaIndex: RAG用のプライベートデータの取り込み、インデックス作成、クエリに重点を置くフレームワークです。両者には共通する機能があり、LangChainやLangGraphのエージェント内で検索にLlamaIndexを使うアプリケーションもよくあります。










