コンテンツにスキップ

Conditionalノード

Conditionalノードは、実行時の条件評価に基づいて出力ブランチのうち1本を選び、そのターゲットを活性化し、他のブランチターゲットはskippedとしてマークします。

ワークフローの進路がランタイムデータに依存するとき(分類結果・成功/失敗フラグ・ユーザ選択など)に使います。すべてのブランチを並行実行したい固定分岐では、素直に直列エッジを引く方がよいです。

フィールド説明
condition_type条件評価方法。jqは入力データに対してjq式を評価し、その文字列出力をラベルとして採用。regexは名前付きlabelキャプチャを持つパターンマッチ。llmはLLMに入力をブランチラベルのいずれかに分類させる。
condition_expressioncondition_typeに従って解釈される式またはプロンプト。
branchesラベル→ターゲットノードIDのマップ。評価で得たラベルに対応するターゲットが活性化。
default_branch(任意)branchesに無いラベルが返ったときのフォールバックターゲット。
  • jq.category.status == "ok" | if . then "ok" else "err" end など。出力は文字列に強制変換してラベルに使います。
  • regexstatus:\s*(?<label>\w+)。名前付きキャプチャlabelが使われます。
  • llm — 分類プロンプト。LLMにブランチラベルのどれかを出力させます。
  1. cascadeがConditionalに到達すると、completedとして挿入され、入力データに対して条件が評価されます。
  2. 得られたラベルをbranchesで引いてターゲットノードIDを決定。なければdefault_branchを使用。
  3. 選ばれなかった全ての出力エッジのターゲットはskippedとして挿入(下流のJoinが確定したことを認識できるように)。
  4. 選ばれたターゲットはレジストリ経由で活性化(ネストされたfan-out/conditionalでも種別固有の起動ロジックが走る)。
  5. Conditionalのoutput_data_chosen_branch_target_nodeで更新され、監査可能に。

branchesにもdefault_branchにも一致しないと警告ログを出してその場でグラフが停滞します。LLM出力などが完全に予測可能でない場合は必ずdefault_branchを設定してください。

  • condition_type は必須。
  • branches(非空)または default_branch のいずれかが必要。
  • branchesが参照するターゲットはすべて実在するノード。
  • branchesの各ラベルに対して、ターゲットへの出力エッジが存在する。
  • 出力エッジのcondition_labelが設定されている場合、それはbranchesのラベルのいずれかと一致する必要があります。
  • default_branch を設定する場合、実在するノードを参照すること。
flowchart LR
Classify["Skill: classify-ticket"] --> C{{"Conditional"}}
C -->|bug| Bug["Skill: bug-triage"]
C -->|feature| Feat["Skill: feature-intake"]
C -->|other| Other["Skill: fallback"]

condition_type: llm で「bug / feature / other に分類」するプロンプトを与えれば、LLMの出力がブランチを選びます。default_branch: other を設定すると、想定外のLLM出力にも耐えられます。