Happy Web Engineer
Last updated on

【2026年版】LangGraphでエージェント構築入門|複雑ワークフローをGraphで表現する実践ガイド


はじめに:複雑ワークフローは LangGraph が最強

単純なツール呼び出しエージェントなら OpenAI Agents SDK で十分ですが、条件分岐・ループ・複数エージェント連携・ヒューマンインザループなど複雑ワークフローには LangGraph が最適です。

LangGraph は LangChain派生のエージェントフレームワークで、状態遷移をGraphで表現できます。

  • LangGraph の基本概念(State/Node/Edge)
  • Python 最小実装
  • 条件分岐・ループ・HITL
  • LangSmith トレース
  • 本番運用のベストプラクティス

基本概念

State

エージェントの現在状態。TypedDict / Pydanticで定義。ノード間を流れる。

Node

処理単位。関数またはLLM呼び出し。Stateを受け取り、更新したStateを返す。

Edge

ノード間の接続。無条件・条件分岐の両方。

Graph

Nodeを Edge で接続したワークフロー全体。コンパイルして実行。


セットアップ

pip install langgraph langchain-openai

export OPENAI_API_KEY=sk-...

最小グラフ実装

from typing import TypedDict
from langgraph.graph import StateGraph, END
from langchain_openai import ChatOpenAI

# State定義
class AgentState(TypedDict):
    messages: list
    answer: str

# Nodes
def classify_question(state: AgentState) -> dict:
    """質問を分類"""
    llm = ChatOpenAI(model="gpt-5")
    response = llm.invoke(f"この質問を 'tech' or 'business' で分類: {state['messages'][-1]}")
    return {"category": response.content}

def answer_tech(state: AgentState) -> dict:
    llm = ChatOpenAI(model="gpt-5")
    response = llm.invoke(f"技術専門家として回答: {state['messages'][-1]}")
    return {"answer": response.content}

def answer_business(state: AgentState) -> dict:
    llm = ChatOpenAI(model="gpt-5")
    response = llm.invoke(f"ビジネスコンサルとして回答: {state['messages'][-1]}")
    return {"answer": response.content}

# Edge条件
def route_question(state: AgentState):
    return "answer_tech" if state["category"] == "tech" else "answer_business"

# Graph構築
graph = StateGraph(AgentState)
graph.add_node("classify", classify_question)
graph.add_node("answer_tech", answer_tech)
graph.add_node("answer_business", answer_business)

graph.set_entry_point("classify")
graph.add_conditional_edges("classify", route_question)
graph.add_edge("answer_tech", END)
graph.add_edge("answer_business", END)

app = graph.compile()

# 実行
result = app.invoke({"messages": ["Reactの状態管理ベストプラクティスは?"]})
print(result["answer"])

👉 条件分岐で技術/ビジネスの異なるエージェントに振り分けるワークフローが 50行で完成。


典型パターン

1. シーケンシャル(直列実行)

調査→分析→レポート生成の3ステップを順次実行。

2. 条件分岐

質問の種類で異なる処理ルートに分岐(上記例参照)。

3. ループ

結果が満足いくまで再試行(例:コード生成→テスト→失敗なら再生成)。

4. ヒューマンインザループ(HITL)

重要判断時に人間承認を挟む(例:金銭取引・外部送信前)。

5. マルチエージェント協調

調査Agent + 分析Agent + 執筆Agent が協調するスワーム構成。


ループ例:コード生成→テスト→修正

def generate_code(state):
    # LLMでコード生成
    ...

def test_code(state):
    # 生成コードをテスト実行
    ...

def should_retry(state):
    if state["test_passed"]:
        return END
    if state["retry_count"] >= 3:
        return END
    return "generate_code"  # 再試行

graph.add_node("generate_code", generate_code)
graph.add_node("test_code", test_code)
graph.add_edge("generate_code", "test_code")
graph.add_conditional_edges("test_code", should_retry)

ヒューマンインザループ

from langgraph.checkpoint.memory import MemorySaver

def human_approval(state):
    # ここで実行を一時停止、人間の判断を待つ
    pass

# コンパイル時にinterrupt_before指定
app = graph.compile(
    checkpointer=MemorySaver(),
    interrupt_before=["human_approval"]
)

# 実行(人間承認で停止)
config = {"configurable": {"thread_id": "1"}}
result = app.invoke(input, config=config)
# 停止後、人間が承認したらresume
app.invoke(None, config=config)

LangSmith トレース

  • 各Nodeの実行時間・入出力を自動記録
  • Graph全体のビジュアル表示
  • 失敗セッションの再現実験
  • プロンプト・LLMレスポンスの履歴

LangSmith API キー設定だけで有効化。無料枠月5,000トレースあり。


OpenAI Agents SDK との使い分け

  • Agents SDK:シーケンシャル・Toolベース・OpenAIメイン(簡潔)
  • LangGraph:複雑ワークフロー・条件分岐・ループ・マルチLLM(柔軟)

シンプルなBot → Agents SDK、本格的エージェント → LangGraph。


本番運用のベストプラクティス

  • State を小さく保つ(過剰な情報保持はコスト増)
  • 各Nodeの処理を単一責任に(デバッグ容易)
  • Checkpointer で状態永続化(DBまたはRedis)
  • LangSmithで観測必須
  • Rate limiting + リトライ戦略

活用シーン例

  • 複数ソース調査→統合レポート生成
  • マルチステップのデータパイプライン
  • 社内承認フロー付きの自動化
  • カスタマーサポート(自動対応→エスカレーション)
  • コード生成→テスト→修正のループ

よくある質問(FAQ)

Q. OpenAI Agents SDKで十分では?

シンプルなToolベースならOK。条件分岐・ループ・HITLが必要なら LangGraphが必須。

Q. OpenAI以外のLLMも使える?

はい、Anthropic Claude / Google Gemini / Local LLM 全部OK。マルチLLM構成も可能(Node毎に異なるLLM使用)。

Q. Graphをビジュアル確認できる?

LangSmithで可視化可能。app.get_graph().draw_mermaid_png()でローカルPNG生成も可。

Q. コストは?

LLM API コストのみ(LangGraph 本体は無料・OSS)。LangSmith観測は無料枠5,000トレース/月。

Q. 本番で安定運用できる?

LinkedIn・Uber・Elastic等で採用。Checkpointer永続化と観測があれば本番運用可能。


まとめ:複雑ワークフローは LangGraph 一択

  • State / Node / Edge のシンプルな抽象で複雑ワークフロー構築
  • 条件分岐・ループ・HITL が標準対応
  • LangSmith で観測・デバッグ容易
  • マルチLLM・マルチエージェント構成可能

シンプルなエージェントから始めて、必要に応じて複雑化。今日1つGraphを作ってみてください。


関連記事

👉 【2026年版】OpenAI Agents SDK 入門
👉 【2026年版】Vercel AI SDK vs LangChain 徹底比較
👉 【2026年版】エンジニアのためのRAG実装入門
👉 【2026年版】ベクトルDB入門
👉 【2026年版】Claude APIでSlack社内Botを作る完全ガイド