Joinノード
Joinノードは汎用の複数入力バリアです。join_modeに従って上流ノードの確定を待ち、aggregationに従って出力を束ね、必要ならその束をスキルに渡したうえで下流へcascadeします。
名前から想像されるかもしれませんが、Joinは特定のFan-outにペアリングされるわけではありません。複数の並列ブランチが合流するどの場所でも使える、素のN入力合流点です。
- 独立した複数のブランチを待ち合わせしてから次のステップに進みたい(例: 3つのソースからリサーチを集めてからサマリを書く)。
- Fan-outから出る要素ごとの出力を集約したい — fan-outの下流にJoinを置き、
aggregation: arrayかmergeで束ねる。 - 「すべてのブランチが成功」より弱い同期で十分な場合 — 最初の1本が返ったら続行(
join_mode: any)、過半数で続行(majority)など。
| フィールド | 説明 |
|---|---|
aggregation | 上流出力の束ね方。array(デフォルト)は{ _items, _sources, _total, _completed, _failed }で包む。mergeはオブジェクト型出力を浅くキーマージ。 |
join_mode | バリアが解放される条件。all(デフォルト)/ any / majority。 |
on_failure | fail_all(デフォルト)は上流のいずれかが失敗したらJoinを失敗、ignoreは成功分で続行、collectは失敗も下流に通す。 |
skill_id / skill_version_id(任意) | 設定すると、集約済み入力をこのスキルに渡して実行(自動完了ではなく)。ブランチ出力をLLMで統合したい場合に便利。 |
join_modeに対する到達可否が判定されます:all— 非revisionな上流がすべて終端状態。any— 少なくとも1本が完了かつ承認済み。majority— 過半数が完了かつ承認済み。
- 到達したら、
aggregationに従って上流出力を束ね、_items(または merge済みキー)、_sources、_total、_completed、_failedを入力データに付けます。 - 上流のいずれかが失敗し
on_failure === "fail_all"なら、Joinはfailedとして記録され、cascadeが止まります。 - そうでなければ:
- スキルが設定されていれば、集約済み入力で
pending挿入し、アサインミニオンで実行。 - スキルが無ければ、その束を入力兼出力として自動的に
completedにし、cascadeが下流へ続きます。
- スキルが設定されていれば、集約済み入力で
バリデーションルール
Section titled “バリデーションルール”join_modeを設定する場合、all/any/majorityのいずれか。aggregationを設定する場合、array/merge/pick_firstのいずれか。
flowchart LR A["Skill: research-a"] --> J(("Join")) B["Skill: research-b"] --> J C["Skill: research-c"] --> J J --> Sum["Skill: summarize"]aggregation: arrayの場合、summarizeは入力エッジの順序で3要素の_itemsを受け取ります。