決定モデル
決定モデルは、テキストを生成する代わりに、イベントに関する型付きの質問に答えます。SOP は、トリガーが一致した後、実行が開始される前に、決定モデルに質問できます:
- ゲート: このイベントで、そもそもこのSOPを開始すべきか?
- モード: 作成者が挙げた実行モードのうち、今回の実行に該当するのはどれですか?
これにより、1つのトリガー(Webhookのパス、チャンネル、MQTTトピックなど)から複数のSOPにイベントを渡せるようになり、そのイベントが本来どのSOP向けか、また各実行にどの程度の人間による監視を付けるかはモデルが判断します。
ZeroClaw は「System One」型決定 API(POST <base_url>/v1/systemone)に対応しています。このAPIを実装するモデルは2つあります:
| モデル | 実行場所 | 注釈 |
|---|---|---|
| TypeSafe Jev | ホスト型API、APIキー | イベントの内容は TypeSafe に送信されます。 |
| Laya | セルフホスト(laya-serve) | オープンウェイト;キー不要;イベントの内容はローカルに保持されます。 |
モデルを設定
Declare each model under an alias in config.toml and pick its provider:
provider | サービス | base_url のデフォルト | model のデフォルト | キー |
|---|---|---|---|---|
jev(デフォルト) | TypeSafe Jev、ホスト型 | https://api.typesafe.ai | jev-latest | api_key が必要です |
laya | laya-serve 経由の Laya | http://127.0.0.1:8000 | laya | なし |
custom | System One互換の他のエンドポイント | 必須 | jev-latest | optional |
[decision_models.jev]
provider = "jev"
# api_key はシークレットのため、`zeroclaw config` または
# ZEROCLAW_decision_models__jev__api_key で設定してください。
[decision_models.laya]
provider = "laya"
[decision_models.gpu_box]
provider = "custom"
base_url = "http://10.0.0.5:8000"
model = "laya"
base_url と model はプロバイダーのデフォルト値を上書きします。base_url のない custom エントリは無視され、それを選択している SOP は最も厳格なモードにフォールバックします。エイリアスはダッシュボードの Config ページからも管理できます。
SOP内でモデルを選択
ウェブダッシュボードのSOPエディタで、実行モードの下にあるDecision modelにチェックを入れ、ドロップダウンから設定済みのモデルを選択します。ゲート、モード、しきい値も同じパネルで編集します。無効な[decision]テーブルは、保存時に理由とともに拒否されます。
ファイルベースのSOPで、SOP.toml に [decision] テーブルを追加し、エイリアスに名前を付けてください:
[decision]
model = "jev"
gate = "顧客は返金を求めていますか?"
gate_threshold = 0.7
modes = ["auto", "supervised", "step_by_step"]
mode_instructions = "auto: 50ドル未満かつ定型的な場合。step_by_step: 500ドルを超える場合、法的な脅迫、またはその他の異例の場合。"
min_confidence = 0.7
| フィールド | デフォルト | 効果 |
|---|---|---|
model | 必須 | [decision_models] のエイリアス。 |
gate | unset | はい/いいえ形式の質問。モデルの「yes」確率が gate_threshold に達した場合にのみ実行が開始され、そうでなければこのSOPについてイベントは「スキップ」として記録されます。 |
gate_threshold | 0.7 | 開始するための最小の “yes” 確率 |
gate_on_error | run_strict | モデルが回答できない場合: run_strict は実行をフェイルクローズドモードで開始し、skip は実行を開始しません。 |
modes | 空 | このランでモデルが選択できるモードです。auto、supervised、step_by_step のみ指定できます。空の場合は、定義済みの execution_mode がそのまま維持されます。 |
| mode_instructions | 汎用 | モード選択のガイダンス |
| min_confidence | 0.7 | このしきい値を下回るモードの選択では、フェイルクローズドモードが使用されます。 |
part_threshold | 0.5 | decide 質問でステップを実行するための「はい」の最小確率です。条件付きステップを参照してください。 |
[decision] テーブルには、gate、modes、または decide を持つステップが必要です。modes は決定論的 SOP では使用できません。
条件付きステップ
ステップは独自のはい/いいえの質問を持つことができます。モデルはゲートやモードと同じリクエストでその質問に回答するため、1 回の呼び出しで、実行にどのステップを含めるかが決まります。これにより、開始するかどうかをそれぞれモデルに尋ねる複数の SOP に分割するのではなく、部品から 1 つの SOP を構成できます。
## Steps
1. **Hold for a maintainer** - Draft a comment that tags a maintainer to decide on scope.
- decide: Does this PR add a new feature outside the roadmap and existing features?
2. **Security review** - Review the auth, secret, and sandbox changes.
- decide: Does this PR touch authentication, secrets, or sandboxing?
- unless_decided: 1
3. **Test review** - Check that the changed behavior is tested.
- decide: Does this PR change runtime behavior?
- unless_decided: 1
4. **Compose the review** - Combine the findings into one review comment.
- unless_decided: 1
- decide: <question>は、回答の「yes」確率がpart_thresholdに達した場合にのみステップを実行します。- unless_decided: Nは、ステップNの質問に「はい」と回答された場合にそのステップをスキップします。ステップNにはdecide質問が必要です。- スキップされたステップは、理由とともにステータス
skippedとして記録され、実行は順序どおり次のステップに進みます。次のステップには、スキップされたステップが受け取るはずだった入力が渡されます。 - モデルが回答できない場合や、ステップの質問に対して不正な形式の値を返した場合でも、そのステップは実行されます。スキップが安全側の動作になることはありません。
- ルーティングガードは回答を参照できます。
when:条件では、$.decisions.2がステップ 2 の “yes” の確率を表します。 - 他のステップから条件付きステップを
depends_onすることはできません。スキップされたステップは出力を生成しないためです。代わりに、when:条件内で$.steps.Nを参照してください。 - スキップされたステップが承認ゲートに到達する前に、ステップがスキップされるため、スキップされたステップで承認が求められることはありません。
安全性
- モデルが選べるのは、作成者が記述した選択肢の中からのみです。トリガーを追加したり、一覧にないモードを選んだり、
priority_basedやdeterministicを選んだりすることはできません。 - 選択されたモードはその実行にのみ適用され、実行とともに保存されるため、再起動後も維持されます。ステップレベルの
requires_confirmationとチェックポイントは、選択されたモードに関係なく引き続き確認を要求します。 - フェイルクローズ: 未設定のエイリアス、ネットワークエラーや HTTP エラー、不正な応答、または信頼度の低い応答が、監督レベルを下げることは決してありません。実行は、列挙されたモード、作成者が記述した
execution_mode、およびsupervisedのうち最も厳格なものを使用します。 - イベントのペイロードは信頼されていないコンテンツとしてモデルに送信され、8,000文字に制限されます。イベントの内容をホスト外に出してはならない場合は、セルフホスト型のモデルを選択してください。
各判断は、SOP 名、結果、選択されたモード、各条件付きステップの回答、入力トークン数とともに記録されます。