Shikata Ga Nai

Private? There is no such things.

第66回:LangGraphで複雑なアプリケーションの構築

Hello there, ('ω')ノ

🧠 はじめに:LangGraphとは何か?

LangGraph(ランググラフ)は、
LangChainチームが開発した“ステートマシン型”のAIアプリ構築フレームワークです。

従来のLangChainでは、
🔁 直列的にタスクを「チェーン」でつなぐ設計が基本でしたが、
LangGraphでは、状態(state)と遷移(transition)を明示的に制御できるため、
✅ 条件分岐
✅ ループ処理
✅ 途中キャンセル
…などの複雑なAIアプリ構成に向いている進化版です。


🔧 1. LangGraphの構造:チェーンからグラフへ


🔗 LangChain(従来)

Input → Step1(LLM) → Step2(Tool) → Output

🌐 LangGraph(グラフ構造)

        ┌────────┐
        ↓        │
Start → Node A → Node B → End
           ↑         ↓
           └─ Node C ─┘

🔁 状態に応じたルート選択・繰り返し処理が可能!


🧩 2. LangGraphのキーワード整理


用語 意味
ノード(Node) 処理ステップ(LLM、Tool、条件分岐など)
ステート(State) 現在の入力情報・履歴・変数など、アプリの“状態”を保持
エッジ(Edge) 状態に応じてノードをどう遷移するかを定義するルール
グラフ(Graph) 全体のフロー構造(ノード+ステート+遷移)でアプリ全体を表現

🛠️ 3. LangGraphの基本コード構成(超シンプル例)


✅ インストール(公式ベータ対応中)

pip install langgraph

🧪 例:条件分岐によって返信内容を変えるBot

from langgraph.graph import StateGraph
from langchain.chat_models import ChatOpenAI

# 1. 状態管理の定義
class MyState(dict):
    pass

# 2. 各ノード処理を定義
def check_message(state: MyState):
    msg = state["input"]
    if "ありがとう" in msg:
        return "thank_node"
    return "default_node"

def thank_response(state):
    return {"response": "どういたしまして!"}

def default_response(state):
    return {"response": "こんにちは!何かお手伝いできますか?"}

# 3. グラフの構築
builder = StateGraph(MyState)
builder.add_node("check", check_message)
builder.add_node("thank_node", thank_response)
builder.add_node("default_node", default_response)

# 遷移を定義
builder.set_entry_point("check")
builder.add_conditional_edges("check", check_message)
builder.set_finish_point("thank_node")
builder.set_finish_point("default_node")

# 実行
graph = builder.compile()

result = graph.invoke({"input": "ありがとうございます!"})
print(result["response"])  # → 「どういたしまして!」

🧠 4. LangGraphが向いているアプリケーション


✅ 向いているユースケース

シナリオ 理由
🤖 マルチエージェント連携 各エージェントをノードとして分離でき、会話ループを状態管理しやすい
🧭 条件分岐付きチャットボット 入力によって対応フローを変更(例:要望・苦情・予約など)
🧪 思考プロセスを明示したAI 「仮説 → 検証 → 分岐 → 再試行」などの高度推論が必要な場面で効果を発揮
🧾 ワークフロー自動化(RPA) 状況に応じたタスク自動処理(例:請求書の確認→修正→送信)

🔁 5. LangGraphの強みと課題


✅ 強み

  • 複雑な制御ロジックが組める(if文、ループ、マルチノード)
  • ノード単位でテスト・拡張がしやすい
  • エージェントを“役割ごとに分離”できるためチーム構成が可能

⚠️ 注意点

  • コードの構造化設計が必要(関数設計力が求められる)
  • ドキュメントがまだ少ない(公式サンプルを参考に)
  • LangChain経験者でないと最初はやや難解

📚 6. LangGraphの設計Tips


設計ポイント 解説
ノードを小さく分割する 「思考」「検索」「生成」など、1ノード=1責任にすることでテスト・再利用性UP
状態に履歴を残す 過去の応答やアクションを state["history"] に入れて追跡可能に
例外系を先に定義 「失敗時」や「入力ミス時」のノードをあらかじめ分岐で用意する

🎁 まとめ:LangGraphは「構造化されたLLMアプリ」の時代を拓く

✅ LangChainが“直列的なAI処理”に向いているのに対し、
LangGraphは「状態管理 × 分岐 × ループ」で複雑なAIアプリに対応

✅ ステートマシン的な思考・チャット・エージェント設計が必要な業務に最適。

✅ LLMを実行フローの中に統合したい開発者・業務改善チームにおすすめです!

Best regards, (^^ゞ