LangGraphの並列ノードが同じ状態を更新するなら結合規則を決める
同じステップの並列ノードが同じ状態キーを更新するなら、Reducerでどう結合するかを定める。リストに足せば競合・重複・順序の問題がすべて解消するわけではない。
用語
- Reducer
- 状態の現在値と新しい更新値を結合する関数。
- StateGraph
- 共有状態・ノード・接続から処理を定義するLangGraphのグラフ。
- 状態キー
- グラフの状態を構成し、ノードが更新する個別の項目。
図と例
並列ノードが更新を返す → Reducerで収集 → 資料IDで重複を照合 → 整列・検証して統合
仮定の例:並列の調査ノードが同じ資料を返した。Reducerで結果を収集した後、資料IDで重複を除き、確定した並び順で統合する。資料が2件見つかったとは数えない。
実際のサービス・製品では
LangGraph StateGraph
LangGraphの公式資料は同じキーへの並列更新で起きるエラーと、Reducerによる結合を説明する。資料IDによる照合はこのTipの設計例。
資料を読む
解説
共有キーごとに書き手と結合規則を決める。分岐の完了順を変え、同じ資料が複数回返る場合にも最終結果が意図どおりか試す。
Reducerは現在の値とノードの更新値から新しい値を計算する関数。StateGraphで同時更新に対応しないキーへ複数ノードが書くと、INVALID_CONCURRENT_GRAPH_UPDATEになる場合がある。単純なリスト連結は収集に使えるが、同じ資料の重複や到着順による表示の違いは別に扱う。結果に資料IDや担当ノードを持たせ、合流後に重複排除・並べ替え・妥当性確認をする。スコアの最大値を選ぶ場合も、比較できる尺度かを確認する。任意の更新順で意味が変わらない結合方法を選ぶ。
トレードオフ
- 分岐ごとの状態キーを用意する
- 得るもの:書き手と値の対応が明確になる
- 払うもの:分岐数が増えると状態項目の管理が増える
- 共有の収集先とReducerを用意する
- 得るもの:可変数の結果を集めやすい
- 払うもの:重複や順序、結合の意味を設計する必要がある
さらに学ぶ
チェック
並列ノードが同じ結果リストへ書き、同一資料も重複する。適切な設計は?
- 最後に完了したノードの結果だけを暗黙に採用する
- Reducerを付けたら重複も自動で消えると扱う
- 結合規則を定め、資料IDで重複を照合して整列する
解答と解説
結合規則を定め、資料IDで重複を照合して整列する
Reducerは指定した結合処理を行うもので、資料の同一性や業務上の順序まで判断しない。収集と重複排除・整列を明示的に設計する。