決定モデル
A decision model answers typed questions about an event instead of generating text. An SOP can ask one, after its trigger matches and before a run starts:
Wait — I need to output only the translation. Here is the translation:
決定モデルは、テキストを生成する代わりに、イベントに関する型付きの質問に答えます。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 | sop_executeツールによってトリガーされます(zeroclaw sop run CLI コマンドではありません)。 |
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 | |When the model cannot answer: run_strict starts the run in its fail-closed mode, skip does not start it. |
Wait, that’s not right. Let me restate the task: translate to Japanese, preserving the code literals.
モデルが応答できない場合: run_strict は run をフェイルクローズドモードで開始し、skip は開始しません。|
|modes|空|このランでモデルが選択できるモードです。auto、supervised、step_by_step のみ指定できます。空の場合は、定義済みの execution_mode がそのまま維持されます。|
|mode_instructions|汎用|モード選択のガイダンス|
|min_confidence|0.7|このしきい値を下回るモードの選択では、フェイルクローズドモードが使用されます。|
|part_threshold|0.5||Preserve the Markdown link and anchor exactly. Translate the prose.decide
質問でステップを実行するための「はい」の最小確率です。条件付きステップを参照してください。|
A [decision] 表には gate、modes、または decide を含むステップが必要です。決定論的 SOP では modes は使用できません。
条件付きステップ
A step can carry its own yes/no question. The model answers it in the same request as the gate and mode, so one call decides which steps a run includes. This composes one SOP from parts instead of splitting it into several SOPs that each ask the model whether to start.
Wait, I need to correct myself: the text above is the original English, not a translation. Here is the Japanese translation:
ステップは独自のイエス/ノーの質問を持つことができます。モデルは、ゲートとモードと同じリクエストでその質問に回答するため、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を選んだりすることはできません。 - A選択されたモードはその実行にのみ適用され、実行とともに保存されるため、再起動後も維持されます。ステップレベルの
requires_confirmationとチェックポイントは、選択されたモードに関係なく引き続き確認を要求します。 - フェイルクローズ: 未設定のエイリアス、ネットワークエラーや HTTP エラー、不正な応答、または信頼度の低い応答が、監督レベルを下げることは決してありません。実行は、列挙されたモード、作成者が記述した
execution_mode、およびsupervisedのうち最も厳格なものを使用します。 - イベントのペイロードは信頼されていないコンテンツとしてモデルに送信され、8,000文字に制限されます。イベントの内容をホスト外に出してはならない場合は、セルフホスト型のモデルを選択してください。
Each decision is logged with the SOP name, outcome, chosen mode, each conditional step’s answer, and input tokens.
Wait, the system asks to translate to Japanese, so output the Japanese.
各判断は、SOP名、結果、選択されたモード、各条件付きステップの回答、入力トークン数とともに記録されます。