LangGraph
概念
LangGraph は、長時間稼働するステートフルなエージェントの構築・管理・デプロイのための低レベルオーケストレーションフレームワークです。LangChain エコシステムにおける上級ライブラリに位置づけられます。
特徴:
- 永続実行:障害に耐えて長時間稼働でき、中断箇所から自動復旧する
- ヒューマン・イン・ザ・ループ:実行中の任意のタイミングで、エージェントの状態を検査・修正し、人間の監督を導入できる
- 包括的なメモリ:短期作業メモリ(継続的な推論)と、セッションをまたぐ長期永続メモリの両方をサポートする
LangChain との違い
LangGraph は大規模モデルアプリケーションに、より制御可能なループ計算能力をもたらします。LangChain の線形ワークフローを超え、ループと条件分岐によって複雑な多段階タスク処理をサポートします。
| 観点 | LangChain | LangGraph |
|---|---|---|
| フローモデル | 線形チェーン(LCEL | 合成) | グラフ構造(ノード + エッジ + 状態) |
| 状態管理 | 追加のラッパーが必要 | ステートフル実行を内蔵 |
| 適用シーン | 単発呼び出し、シンプルなチェーン | 多段推論、ツールループ、ヒューマン協調 |
Agent フレームワークを学ぶ 8 つの要点
- 外部呼び出しの実装方法
- マルチターン対話の実装方法
- ストリーミング出力の実装方法
- 短期 / 長期メモリの実装方法
- ヒューマンインタラクションの実装方法
- プランニングロジックの実装方法
- マルチ Agent の実装方法
- Debug とモニタリングの実装方法
核心概念:グラフ
LangGraph はエージェントのワークフローをグラフとしてモデル化します。3 つのコンポーネントで動作を定義します。
| コンポーネント | 説明 |
|---|---|
| State(状態) | アプリケーションの現在コンテキストを表す共有データ構造。任意の Python 型を使用でき、通常は TypedDict |
| Node(ノード) | エージェントロジックを実装する Python 関数。現在の State を受け取り、計算後に更新された State を返す |
| Edge(エッジ) | 現在の State に基づき、次に実行する Node を決定する。条件分岐または固定遷移をサポート |
Node と Edge を組み合わせることで、複雑で多分支、ループ可能な動的ワークフローを構築でき、State は実行に伴い段階的に変化します。
エージェントアーキテクチャ
LangGraph は 4 つの一般的なエージェントパターンをデフォルトでサポートします。上から下へ、人間による制御は減り、自律性は順に高まります。
| パターン | フロー | 制御度 |
|---|---|---|
| ルーティングエージェント | ユーザー入力 → LLM 意図分類 → 対応する専門ノードへルーティング | 高 |
| ツールエージェント | ユーザー質問 → LLM がツール使用を判断 → ツール呼び出し → 回答を整理 | 中 |
| 自律ループエージェント | 思考 → 行動 → 観察 → 自身のノードへ戻って再思考 | 低 |
| マルチエージェント | 1 つのモデルが問題を分析・分類し、対応するモデルへそれぞれ委譲 | 最低 |
ルーティングエージェント
ルーティンググラフを構築する際は、通常 .with_structured_output() と組み合わせて使用します。出力形式は TypedDict、JSON Schema、または Pydantic(推奨)から選択できます。
Pydantic による構造化出力は、データが指定された構造と型に適合することを保証し、処理エラーを減らします。検証に失敗した場合は例外が発生するため、問題を早期に発見できます。
from typing import Optional
from pydantic import BaseModel, Field
class User(BaseModel):
"""Extracted user information, such as name, age if relevant"""
name: str = Field(description="The name of user")
age: Optional[int] = Field(description="The age of user")フィールドの説明:
name:必須age:任意
ツールエージェント
LangGraph はツール呼び出し用の組み込み ToolNode を提供します。内部フローは Function Calling とほぼ同じです。
ToolNode は LangChain の Runnable オブジェクトを返します。グラフ状態(メッセージリストを含む)を入力とし、状態更新とツール呼び出し結果を出力することで、LangGraph の他コンポーネントと連携します。
使用前提:
- State にメッセージリストが含まれていること
- 最後のメッセージが
AIMessageであること AIMessageにtool_callsが含まれていること
自律ループエージェント(ReAct)
ReAct(Reasoning + Acting)は、Agent の中核となる思考・行動フレームワークです。自然言語による推論を通じてツール呼び出しを導き、「思考 → 行動 → 観察」のループを形成し、タスク完了まで繰り返します。
LangGraph では、自律ループエージェントはエッジでノードを自身に戻すことでループを実現します。LLM ノードがツール呼び出しを出力 → ToolNode が実行して観察結果を書き戻す → 再度 LLM ノードへ入って推論を継続します。このパターンは、多段推論やツール連携が必要なシーン(インテリジェントカスタマーサポート、レポート生成、タスク計画など)に適しています。
マルチエージェント
マルチエージェントモードでは、通常コーディネーターノードが問題分析とタスク分配を担当し、各サブエージェントが特定領域に特化します。LangGraph のグラフ構造は、複数ノードの協調と条件ルーティングを自然にサポートするため、異なるモデルやツールセットの組み合わせが容易です。
