CSのTips一覧

LangGraphの並列ノードが同じ状態を更新するなら結合規則を決める

同じステップの並列ノードが同じ状態キーを更新するなら、Reducerでどう結合するかを定める。リストに足せば競合・重複・順序の問題がすべて解消するわけではない。

用語

Reducer
状態の現在値と新しい更新値を結合する関数。
StateGraph
共有状態・ノード・接続から処理を定義するLangGraphのグラフ。
状態キー
グラフの状態を構成し、ノードが更新する個別の項目。

図と例

設計の流れ(独自の例)

並列ノードが更新を返す → Reducerで収集 → 資料IDで重複を照合 → 整列・検証して統合

仮定の例:並列の調査ノードが同じ資料を返した。Reducerで結果を収集した後、資料IDで重複を除き、確定した並び順で統合する。資料が2件見つかったとは数えない。

実際のサービス・製品では

  • LangGraph StateGraph

    LangGraphの公式資料は同じキーへの並列更新で起きるエラーと、Reducerによる結合を説明する。資料IDによる照合はこのTipの設計例。

    資料を読む

解説

共有キーごとに書き手と結合規則を決める。分岐の完了順を変え、同じ資料が複数回返る場合にも最終結果が意図どおりか試す。

Reducerは現在の値とノードの更新値から新しい値を計算する関数。StateGraphで同時更新に対応しないキーへ複数ノードが書くと、INVALID_CONCURRENT_GRAPH_UPDATEになる場合がある。単純なリスト連結は収集に使えるが、同じ資料の重複や到着順による表示の違いは別に扱う。結果に資料IDや担当ノードを持たせ、合流後に重複排除・並べ替え・妥当性確認をする。スコアの最大値を選ぶ場合も、比較できる尺度かを確認する。任意の更新順で意味が変わらない結合方法を選ぶ。

トレードオフ

分岐ごとの状態キーを用意する
得るもの:書き手と値の対応が明確になる
払うもの:分岐数が増えると状態項目の管理が増える
共有の収集先とReducerを用意する
得るもの:可変数の結果を集めやすい
払うもの:重複や順序、結合の意味を設計する必要がある

さらに学ぶ

チェック

並列ノードが同じ結果リストへ書き、同一資料も重複する。適切な設計は?

  1. 最後に完了したノードの結果だけを暗黙に採用する
  2. Reducerを付けたら重複も自動で消えると扱う
  3. 結合規則を定め、資料IDで重複を照合して整列する
解答と解説

結合規則を定め、資料IDで重複を照合して整列する

Reducerは指定した結合処理を行うもので、資料の同一性や業務上の順序まで判断しない。収集と重複排除・整列を明示的に設計する。