【完全ガイド】LangGraphの基本的な使い方|PythonでLLMエージェントをグラフ化 🚀

LLM

近年、大規模言語モデル(LLM)を活用したアプリケーションの開発が急速に進んでいます。
その中で、LangChain はLLMを活用する上で非常に強力なフレームワークとして注目されています。

そして、LangChainのツール群の一つである LangGraph は、LLMを活用したアプリの構築をより柔軟にするための ステートマシン(状態遷移)管理ライブラリ です。

本記事では、LangGraphの基本的な使い方を徹底解説 します!

「LangGraphって何?」「LLMアプリにどう活用できるの?」と疑問に思っている方は、ぜひ最後まで読んでみてください。

【本記事の目次】


📌 LangGraphとは?

LangGraph とは、LangChainのツールチェインの一つであり、
ステートマシンを構築し、LLMエージェントの状態管理を効率的に行う ためのフレームワークです。

✅ LangGraphの特徴

  • グラフ構造でエージェントのフローを定義できる
  • マルチエージェント(複数のAI)が協調するシステムを構築可能
  • LangChainとシームレスに連携できる
  • 状態の管理が明確になり、複雑なワークフローを実装しやすい

LLMアプリケーションを開発する際に、単純なプロンプト処理だけでなく、
「対話の分岐」「条件による遷移」「複数のエージェントの連携」 などを実装する際に強力な武器となります。


🔧 環境構築

LangGraphを使用するために、まずは環境を整えましょう。

📌 必要なライブラリのインストール

pip install langchain langgraph

📌 確認済みバージョン(2024年7月時点)

記事執筆時点では、以下のバージョンを使用しています。

ライブラリ バージョン
Python 3.10.12
langgraph 0.1.5

LangChainの開発速度は非常に速いため、実行前にバージョンを確認することを推奨します。


🎯 LangGraphの基本コンポーネント

LangGraphは、グラフ構造 を使ってLLMの状態を管理します。
主なコンポーネントは以下の通りです。

コンポーネント 説明
Graph LangGraphの中核であり、NodeとEdgeの集合体
State ノード間の状態データを保持するオブジェクト
Node 各ステップの処理を実行する要素
Edge ノード間の遷移を定義する要素

1️⃣ Graphの作成

まず、グラフの基本構造を定義しましょう。

from langgraph.graph import StateGraph
from typing_extensions import TypedDict
# Stateの定義
class State(TypedDict):
    value: str
# グラフの作成
graph = StateGraph(State)

2️⃣ Stateの定義

State は、エージェント間で共有するデータを格納します。

class State(TypedDict):
value: str

また、Pydantic を使用して定義することも可能です。


🚀 LangGraphを使った簡単なワークフロー

単純なグラフの作成

まず、簡単な ステートマシン を作成し、順番にノードを処理する基本的なワークフローを構築します。


from langgraph.graph import StateGraph
from langchain_core.runnables import RunnableConfig
from typing_extensions import TypedDict

Stateの定義

class State(TypedDict):
value: str

Nodeの定義(ステップごとの処理)

def node(state: State, config: RunnableConfig):
return {"value": "Step 1 完了"}

def node2(state: State, config: RunnableConfig):
return {"value": "Step 2 完了"}

Graphの作成

graph_builder = StateGraph(State)

Nodeを追加

graph_builder.add_node("node", node)
graph_builder.add_node("node2", node2)

Edgeの定義(node → node2)

graph_builder.add_edge("node", "node2")

始点・終点の設定

graph_builder.set_entry_point("node")
graph_builder.set_finish_point("node2")

Graphのコンパイル

graph = graph_builder.compile()

実行

result = graph.invoke({"value": ""})
print(result)

✅ 実行結果

{'value': 'Step 2 完了'}

🔄 分岐のあるワークフロー(条件付き遷移)

LangGraphでは、条件に応じて次のノードを変更する分岐 を作ることが可能です。


import random
from typing import Literal

分岐のルールを定義

def routing(state: State, config: RunnableConfig) -> Literal["node2", "node3"]:
if random.randint(0, 1) == 0:
return "node2"
return "node3"

def node2(state: State, config: RunnableConfig):
return {"value": "Path A"}

def node3(state: State, config: RunnableConfig):
return {"value": "Path B"}

グラフ作成

graph_builder.add_node("node2", node2)
graph_builder.add_node("node3", node3)

分岐を追加

graph_builder.add_conditional_edges("node", routing)

これにより、ランダムに “node2” または “node3” に遷移するグラフが作成できます。


📊 グラフを可視化する方法

LangGraphには、グラフの可視化機能も用意されています。

Mermaid記法での出力

print(graph.get_graph().draw_mermaid())

PNG画像での出力

from IPython.display import Image, display
display(Image(graph.get_graph().draw_mermaid_png()))

🎯 まとめ

LangGraphは、LLMエージェントの状態管理をグラフ構造で定義できるライブラリ
シンプルなワークフローから、条件分岐を持つ複雑なフローまで実装可能
グラフの可視化機能があり、開発・デバッグに便利

LangGraphを活用することで、より高度なLLMアプリケーション を構築できます!

最新情報をチェックしよう!