Slide 1

Slide 1 text

Java on Azure で LangGraph! 2025年6月17日 日本マイクロソフト株式会社 Cloud Solution Architect Asia HQ (Digital Native) 斎藤 功平

Slide 2

Slide 2 text

本日のコードはこちらに公開しています ◼サンプルコード (GitHub) kohei3110/agent-openai-java-banking-assistant-langgraph4j

Slide 3

Slide 3 text

本セッションのゴール 1. LLM ワークフロー開発で LangGraph を選ぶ判断軸を持つ 2. LangGraph4j を活用したワークフローを「自分でも作れる」実感を持つ 3. Azure 上での構成パターンを理解し、自社ワークフローへ横展開する気持ち になる

Slide 4

Slide 4 text

LangChain vs LangGraph – Prototype fast, run robust 項目 LangChain 基本概念 Chain / Agent による 直列ワークフロー 主な用途 PoC・MVP・ワンショット RAG ワークフロー 1-2往復の「検索→生成」など直列処理向き 状態管理 原則ステートレス。必要なら自前でメモリ連結 耐障害性 try/catch や再実行をアプリ側で実装 Spring連携 langchain4j-spring スタータで導入可能 参考: LangChain vs. LangGraph: A Comparative Analysis | by Tahir | Medium LangGraph Stateful Graph による有向グラフ / ループ / 状態遷移 本番スケール・マルチエージェント orchestration 分岐・ループ・複数エージェントなど複雑フロー向き AgentState / Reducerをフレームワークが共有・永続化 Super-step単位で一括コミット。失敗時はロールバック LangChain4j/Spring AI をノード内部で再利用可能

Slide 5

Slide 5 text

LangGraph LLMを用いた複数エージェントのタスクを有向グラフ(状態付き)として表現し、 分岐・ループ・チェックポイントによる耐障害性を標準装備して高度なワークフロー を簡潔に構築できるオープンソース基盤 ◼公式リポジトリ (LangGraph4j) : langgraph4j/langgraph4j: LangGraph for Java. A library for building stateful, multi-actor applications with LLMs, built for work jointly with Langchain4j and Spring AI

Slide 6

Slide 6 text

LangGraph LLMを用いた複数エージェントのタスクを有向グラフ(状態付き)として表現し、 分岐・ループ・チェックポイントによる耐障害性を標準装備して高度なワークフロー を簡潔に構築できるオープンソース基盤 ◼公式リポジトリ (LangGraph4j) : langgraph4j/langgraph4j: LangGraph for Java. A library for building stateful, multi-actor applications with LLMs, built for work jointly with Langchain4j and Spring AI

Slide 7

Slide 7 text

無向グラフと有向グラフ  無向グラフ G = (V, E)  頂点 (Vertex) の集合 V  頂点の対を表す枝 (Edge) の集合 E  有向グラフ G = (V, E)  頂点 (Vertex) の集合 V  頂点の順序対を表す枝 (Edge) の集合 E 0 1 4 3 2 0 1 4 3 2

Slide 8

Slide 8 text

LangGraph で作るカスタマーサポートエージェント ノード(Node) 役割 ① UserMsg ユーザー入力受付 messages += ユーザー発話 ② Classifier 意図判定 (LLM) 意図 = "FAQ" / "Order" / "Escalate" ③ FAQ Retriever RAG 検索 docs = 関連 Q&A ④ OrderAPI 外部 API 呼び出し orderStatus = ... ⑤ Resolver 応答生成 (LLM) messages += ボット応答 ⑥ HumanEscalation オペレーター転送 escalated = true

Slide 9

Slide 9 text

状態 (AgentState) - 共有メモリ+耐障害性 ◼LLM を用いたエージェントが長い対話・並列タスクを安全にこなすには、共有状 態とロールバック機構が不可欠 ◼Shared State ➢ ノード間のキー・バリューストア ◼Partial Update & Reducer ➢ 差分マージで競合解決 ◼Checkpoint ➢ Super-step ごとにスナップショット保存 AgentState (langgraph4j::parent 1.6.0-beta3 API)

Slide 10

Slide 10 text

カスタマーサポートエージェントでのSuper-step毎のチェックポイント ◼Super-step ➢ グラフ内で「同じラウンド」に実行されたノード群をまとめる境界 ➢ すべてのノード完了 → State を確定 ➢ その瞬間に チェックポイント (CP) を自動保存 ◼嬉しいこと ➢ 復旧 例えば FAQ API が落ちても CP#2 から再開し、既済ノードを再実行しない ➢ デバッグ CP#2 の intent を確認して判定ミスを即追跡 ➢ 拡張 ➢ 新ツールを #3 に並列追加しても CP 境界はそのまま。

Slide 11

Slide 11 text

LangGraph における高スループット×一貫性の仕組み ◼並列実行 ➢ 同じ Super-step 内で起動条件を満たしたノードを同時に走らせ、外部待ち時間を隠蔽。 ◼一括コミット ➢ 全ノード成功時にだけ Partial State をまとめてマージし、AgentState を確定。 ◼障害復旧 ◼ どれか 1 つでも失敗すればロールバックして「半端な状態」を残さない。

Slide 12

Slide 12 text

耐障害性 – チェックポイントの深堀り ◼チェックポイント ➢ グラフの実行状態を保存・復元し、会話の履歴や中間状態を永続化する仕組み ◼種類 ➢ MemorySaver メモリ内にチェックポイントを保存(開発・テスト用) ➢ DatabaseCheckpointSaver データベースにチェックポイントを保存(本番環境用) ➢ FileCheckpointSaver ファイルシステムにチェックポイントを保存 ➢ RedisCheckpointSaver Redisにチェックポイントを保存(分散環境用) How to add persistence ("memory") to your graph - LangGraph4j

Slide 13

Slide 13 text

実際にワークフローを設計する際の考慮ポイント ①ノード粒度 ②State設計 ③Super-step/ 並列化 ④永続化 ⑤観測性・テスト ⑥最終チェック 外部I/O時間 副作用 (DB Write等) 同一Stateキー 更新 既存Chain 利用 キーは最小に Reducer明示 競合なし設計 並列 ノード実行 一括コミット Fan out Fan in タイムアウトは 短く MemorySaver (開発) SqliteSaver (CI) Jdbc / RedisSaver (本番) LangSmith State Node 単体テスト In-memory グラフテスト 統合テスト 遅い I/O / 副 作用はノード分 離済み State スキーマ に全キー Reducer宣言 Super-step 内で同キー 競合なし テストパイプラ インを CIに組込

Slide 14

Slide 14 text

Demo① グラフを作る

Slide 15

Slide 15 text

LangGraph4j とは  LLM を用いた状態保持型マルチエージェントアプリケーションを構築するための Java ライブラリ  Python 版の LangGraph にインスパイアされており、LangChain4j や Spring AI といった Java 向け LLM フレームワークとシームレスに連携できるよう設計され ている  langgraph4j/langgraph4j: LangGraph for Java. A library for building stateful, multi-actor applications with LLMs, built for work jointly with Langchain4j and Spring AI

Slide 16

Slide 16 text

LangGraph4j を支える2つの要素 AgentState NodeAction 1 2

Slide 17

Slide 17 text

LangGraph4j を支える要素①: AgentState ◼グラフ実行中の状態管理を担うベースクラス

Slide 18

Slide 18 text

LangGraph4j を支える要素②: NodeAction ◼LangGraph4jにおけるノードの振る舞いを定義するJavaインターフェース

Slide 19

Slide 19 text

LangGraph4j を支える要素②: NodeAction ◼NodeActionの実装例1: GreetingNode 悪い例: 状態を直接変更 良い例: 新しい状態変更を返却

Slide 20

Slide 20 text

LangGraph4j を支える要素②: NodeAction ◼NodeActionの実装例2: ResponderNode

Slide 21

Slide 21 text

AgentState と NodeAction の連携

Slide 22

Slide 22 text

グラフの作り方 ◼StateGraphクラスを使用

Slide 23

Slide 23 text

グラフにノード・エッジを追加 ◼ノードを追加 ◼エッジを追加

Slide 24

Slide 24 text

グラフをコンパイル・実行 ◼コンパイル・実行 ◼可視化

Slide 25

Slide 25 text

サンプルアプリ – LangGraph on Container Apps Azure-Samples/agent-openai-java-banking-assistant-langgraph4j

Slide 26

Slide 26 text

サンプルアプリ – マルチエージェントアーキテクチャ

Slide 27

Slide 27 text

サンプルアプリ – 状態管理

Slide 28

Slide 28 text

サンプルアプリ – 条件分岐

Slide 29

Slide 29 text

Demo② サンプルアプリを動かす

Slide 30

Slide 30 text

再掲: 本セッションのゴール 1. LLM ワークフロー開発で LangGraph を選ぶ判断軸を持つ 2. LangGraph4j を活用したワークフローを「自分でも作れる」実感を持つ 3. Azure 上での構成パターンを理解し、自社ワークフローへ横展開する気持ち になる