0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

LangGraph入門 — 最新仕様と豊富な実例でわかりやすく解説

Posted at

🚀 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で「コード修正エージェント」を構築した事例も報告されています。

  1. コードを生成
  2. 実行してエラー収集
  3. LangGraphで再修正 → テスト → ループ

これにより人手を介さず自動デバッグが可能になります。


9. まとめ

LangGraphを使うと…

  • 状態管理・分岐・ループで複雑な制御が可能
  • ツール連携で実世界の情報を統合
  • Supervisorで階層型マルチエージェントを構築
  • ストリーミング対応でUIに強い
  • **実運用事例(FAQボット、バグ修正、記事生成)**に直結

💡 今後「LLM×業務システム」を構築するなら、まずはLangGraphでワークフローを設計するのがおすすめです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?