🚀 LangGraphとは?
LangGraph は LangChain の上に構築されたエージェント・ワークフローのオーケストレーションフレームワークです。
- 状態管理 (StatefulGraph)
- ループ・分岐処理
- 複数エージェントの協調 (Supervisor)
- LangSmith統合によるトレース
などが特徴で、シンプルなチャットボットから複雑なマルチエージェントシステムまで柔軟に実装できます。
1. インストール
pip install -U langgraph langchain-openai
OpenAIを使う場合は OPENAI_API_KEY を環境変数にセットしてください。
2. 最小の例:シンプルチャット
LangGraphを知らなくても「とりあえず動く」最小例。
from langgraph.graph import StateGraph, END
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model="gpt-4o-mini")
# 状態定義
class State(dict): ...
# ノード定義
def chatbot_node(state: State):
user_msg = state["messages"][-1]
response = llm.invoke(user_msg)
return {"messages": state["messages"] + [response]}
# グラフ定義
graph = StateGraph(State)
graph.add_node("chatbot", chatbot_node)
graph.set_entry_point("chatbot")
graph.add_edge("chatbot", END)
app = graph.compile()
# 実行
result = app.invoke({"messages": ["こんにちは!"]})
print(result["messages"][-1].content)
👉 StateGraph にノードを登録 → compile() → 実行、という流れが基本。
3. ツールを組み込む(ReAct風)
LangGraphにはツール呼び出しの仕組みがあります。
from langgraph.prebuilt import create_react_agent
# シンプルなツール
def get_weather(city: str) -> str:
return f"{city}の天気は晴れです!"
agent = create_react_agent(
model="openai:gpt-4o-mini",
tools=[get_weather],
prompt="あなたは役立つアシスタントです"
)
resp = agent.invoke({"messages":[{"role":"user","content":"東京の天気は?"}]})
print(resp)
👉 LLMが「関数を呼び出すべき」と判断すると get_weather が実行されます。
4. 条件分岐とループ
LLMの応答が十分でなければ再試行する例。
from langgraph.graph import StateGraph, END
class State(dict): ...
def validator_node(state: State):
msg = state["messages"][-1]
if "?" in msg.content:
return {"retry": True}
return {"retry": False}
graph = StateGraph(State)
graph.add_node("chatbot", chatbot_node)
graph.add_node("validator", validator_node)
graph.set_entry_point("chatbot")
graph.add_edge("chatbot", "validator")
graph.add_conditional_edges(
"validator",
lambda state: "chatbot" if state["retry"] else END
)
app = graph.compile()
👉 add_conditional_edges を使って「再質問があればループ」「なければ終了」というフローを作れます。
5. マルチエージェント(Supervisor)
LangGraph Supervisor を使うと「マネージャー → ワーカー」の階層が作れます。
from langgraph.supervisor import create_supervisor
def research_agent(task: str) -> str:
return f"調査済み: {task}"
def writer_agent(task: str) -> str:
return f"記事生成: {task}"
supervisor = create_supervisor(
agents={"researcher": research_agent, "writer": writer_agent},
model="openai:gpt-4o-mini"
)
result = supervisor.invoke("最新のAIニュースについて記事を書いて")
print(result)
👉 Supervisor がタスクを分配し、エージェントが処理。大規模システムに有効。
6. ストリーミング応答
リアルタイムにトークンを流すことも可能。
async with agent.run_stream("東京の観光地を教えて") as result:
async for token in result.stream_text():
print(token, end="", flush=True)
👉 チャットUIや音声アシスタントに最適。
7. 実用例:FAQボット + Web検索
LangGraph なら外部ツールを組み合わせた実用的エージェントも簡単。
from langchain_community.tools.tavily_search import TavilySearchResults
from langgraph.prebuilt import ToolExecutor
tools = [TavilySearchResults(max_results=1)]
executor = ToolExecutor(tools)
agent = create_react_agent(
model="openai:gpt-4o-mini",
tools=tools,
prompt="あなたはFAQボットです。検索も使えます。"
)
resp = agent.invoke({"messages":[{"role":"user","content":"LangGraphとは?"}]})
print(resp)
👉 LLMが自動で検索ツールを呼び出して補完します。
8. 実用例:バグ修正ループ
研究では、LangGraphで「コード修正エージェント」を構築した事例も報告されています。
- コードを生成
- 実行してエラー収集
- LangGraphで再修正 → テスト → ループ
これにより人手を介さず自動デバッグが可能になります。
9. まとめ
LangGraphを使うと…
- 状態管理・分岐・ループで複雑な制御が可能
- ツール連携で実世界の情報を統合
- Supervisorで階層型マルチエージェントを構築
- ストリーミング対応でUIに強い
- **実運用事例(FAQボット、バグ修正、記事生成)**に直結
💡 今後「LLM×業務システム」を構築するなら、まずはLangGraphでワークフローを設計するのがおすすめです。