リストに対してサブ Skill を fan-out する¶
目的: リスト内の各アイテムに対して同じサブ Skill を一度実行し、結果を決定論的に収集してから LLM に渡す。
使うべき状況¶
- N 個の入力があり、N 個の独立した決定が必要な場合(例: N の基準を採点、N のドキュメントを要約)。
- 各アイテムが独立している — あるアイテムは他のアイテムの出力を必要としない。
- LLM にループをオーケストレートさせるのではなく、安定した再現可能なパイプラインが欲しい。
パターン¶
---
type: phase
name: judge_all_criteria
input: phase_eval_request_batch
preprocessor:
- iterate:
over: phase_eval_requests
apply:
run_skill:
skill: judge_phase
input:
type: phase_eval_request
data: ${item}
into: phase_judgments
on_error: fail
---
`phase_judgments` を総合的な判定に集約してください。
処理の流れ:
- OS は Phase 入力の
phase_eval_requestsにある配列を読み取ります。 - 各
${item}に対して、judge_phaseを完了まで呼び出し、final_outputを収集します。 - 収集されたリストが
input.phase_judgmentsに格納されます。
on_error¶
| 値 | 動作 |
|---|---|
fail(デフォルト) |
最初のサブ Skill 失敗でイテレーションを止め、エラーを伝播する |
skip |
失敗したアイテムは結果リストから除外され、イテレーションを続ける |
部分的な結果でも有用な場合(eval レポート、バッチサマリー)は skip を使い、1 つの不良アイテムで中止すべき場合は fail を使います。
apply に入れられるもの¶
MVP では run_skill のみをサポートします。アイテムごとに他のことをしたい場合は、そのことを行うサブ Skill を作成し、それに対してイテレートします。
実際の例: eval¶
stdlib の eval Skill は、基準ごとのリクエストに対して judge_phase をイテレートします:
preprocessor:
- iterate:
over: phase_eval_requests
apply:
run_skill:
skill: judge_phase
input: { type: phase_eval_request, data: ${item} }
into: phase_judgments
採点 Phase は phase_judgments を読み取り、集約します。