Skip to content

LangGraph

概念

LangGraph は、長時間稼働するステートフルなエージェントの構築・管理・デプロイのための低レベルオーケストレーションフレームワークです。LangChain エコシステムにおける上級ライブラリに位置づけられます。

特徴:

  • 永続実行:障害に耐えて長時間稼働でき、中断箇所から自動復旧する
  • ヒューマン・イン・ザ・ループ:実行中の任意のタイミングで、エージェントの状態を検査・修正し、人間の監督を導入できる
  • 包括的なメモリ:短期作業メモリ(継続的な推論)と、セッションをまたぐ長期永続メモリの両方をサポートする

LangChain との違い

LangGraph は大規模モデルアプリケーションに、より制御可能なループ計算能力をもたらします。LangChain の線形ワークフローを超え、ループと条件分岐によって複雑な多段階タスク処理をサポートします。

観点LangChainLangGraph
フローモデル線形チェーン(LCEL | 合成)グラフ構造(ノード + エッジ + 状態)
状態管理追加のラッパーが必要ステートフル実行を内蔵
適用シーン単発呼び出し、シンプルなチェーン多段推論、ツールループ、ヒューマン協調

Agent フレームワークを学ぶ 8 つの要点

  1. 外部呼び出しの実装方法
  2. マルチターン対話の実装方法
  3. ストリーミング出力の実装方法
  4. 短期 / 長期メモリの実装方法
  5. ヒューマンインタラクションの実装方法
  6. プランニングロジックの実装方法
  7. マルチ Agent の実装方法
  8. Debug とモニタリングの実装方法

核心概念:グラフ

LangGraph はエージェントのワークフローをグラフとしてモデル化します。3 つのコンポーネントで動作を定義します。

コンポーネント説明
State(状態)アプリケーションの現在コンテキストを表す共有データ構造。任意の Python 型を使用でき、通常は TypedDict
Node(ノード)エージェントロジックを実装する Python 関数。現在の State を受け取り、計算後に更新された State を返す
Edge(エッジ)現在の State に基づき、次に実行する Node を決定する。条件分岐または固定遷移をサポート

Node と Edge を組み合わせることで、複雑で多分支、ループ可能な動的ワークフローを構築でき、State は実行に伴い段階的に変化します。

エージェントアーキテクチャ

LangGraph は 4 つの一般的なエージェントパターンをデフォルトでサポートします。上から下へ、人間による制御は減り、自律性は順に高まります。

パターンフロー制御度
ルーティングエージェントユーザー入力 → LLM 意図分類 → 対応する専門ノードへルーティング
ツールエージェントユーザー質問 → LLM がツール使用を判断 → ツール呼び出し → 回答を整理
自律ループエージェント思考 → 行動 → 観察 → 自身のノードへ戻って再思考
マルチエージェント1 つのモデルが問題を分析・分類し、対応するモデルへそれぞれ委譲最低

ルーティングエージェント

ルーティンググラフを構築する際は、通常 .with_structured_output() と組み合わせて使用します。出力形式は TypedDictJSON Schema、または Pydantic(推奨)から選択できます。

Pydantic による構造化出力は、データが指定された構造と型に適合することを保証し、処理エラーを減らします。検証に失敗した場合は例外が発生するため、問題を早期に発見できます。

python
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 の他コンポーネントと連携します。

使用前提:

  1. State にメッセージリストが含まれていること
  2. 最後のメッセージが AIMessage であること
  3. AIMessagetool_calls が含まれていること

自律ループエージェント(ReAct)

ReAct(Reasoning + Acting)は、Agent の中核となる思考・行動フレームワークです。自然言語による推論を通じてツール呼び出しを導き、「思考 → 行動 → 観察」のループを形成し、タスク完了まで繰り返します。

LangGraph では、自律ループエージェントはエッジでノードを自身に戻すことでループを実現します。LLM ノードがツール呼び出しを出力 → ToolNode が実行して観察結果を書き戻す → 再度 LLM ノードへ入って推論を継続します。このパターンは、多段推論やツール連携が必要なシーン(インテリジェントカスタマーサポート、レポート生成、タスク計画など)に適しています。

マルチエージェント

マルチエージェントモードでは、通常コーディネーターノードが問題分析とタスク分配を担当し、各サブエージェントが特定領域に特化します。LangGraph のグラフ構造は、複数ノードの協調と条件ルーティングを自然にサポートするため、異なるモデルやツールセットの組み合わせが容易です。

Released under the MIT License.