Keyboard shortcuts

Press ← or → to navigate between chapters

Press ? to show this help

Press Esc to hide this help

决策模型

一个决策模型会针对事件回答带类型的问题,而不是生成文本。在触发器匹配之后、运行开始之前,SOP 可以提出其中一个问题:

  • 关卡: 该事件是否应当启动此 SOP?
  • **模式:**作者列出的执行模式中,哪一种适合本次运行?

这使得一个触发器(Webhook 路径、频道或 MQTT 主题)可以驱动多个 SOP,由模型判断该事件实际适用于哪个 SOP,以及每次运行需要多少人工监督。

ZeroClaw 通过 “System One” 类型化决策 API(POST <base_url>/v1/systemone)进行通信。两种模型都实现了该接口:

Model运行位置备注
TypeSafe Jev托管 API,API 密钥事件内容将发送至 TypeSafe。
Laya自托管(laya-serve)开放权重;无需密钥;事件内容保留在本地。

配置模型

在 config.toml 中为每个模型声明一个别名,并选择其 provider:

provider服务base_url 默认值model 默认值键
jev(默认)TypeSafe Jev,托管https://api.typesafe.aijev-latestapi_key 为必填项
layaLaya 通过 laya-servehttp://127.0.0.1:8000laya无
custom任何其他与 System One 兼容的端点必需jev-latest可选
[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 将回退到其最严格的模式。这些别名也可以在仪表板的配置页面中管理。

在 SOP 中选择模型

在 Web 控制台的 SOP 编辑器中,于执行模式下勾选 决策模型,然后从下拉列表中选择一个已配置的模型;门控、模式和阈值在同一面板中编辑。保存时若 [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] 的别名。
gateunset是/否问题。只有当模型输出“是“的概率达到 gate_threshold 时,运行才会开始;否则该事件在本 SOP 中被记录为已跳过。
gate_threshold0.7启动所需的最小 “yes” 概率
gate_on_errorrun_strict当模型无法作答时:run_strict 会以其失败即关闭(fail-closed)模式启动运行,skip 则不启动运行。
modes空模型在本次运行中可选择的模式。仅限 auto、supervised 和 step_by_step。留空则保留编写时设定的 execution_mode。
mode_instructions通用Mode 选择指南
min_confidence0.7低于此置信度的模式选择将使用 fail-closed 模式。
part_threshold0.5最低运行步骤的“是”概率,适用于 decide 问题。参见条件步骤。

A [decision] 表需要包含 gate、modes 或带有 decide 的步骤。确定性 SOP 不能使用 modes。

条件步骤

一个步骤可以附带自己的是/否问题。模型会在与门控和模式判断相同的请求中回答该问题,因此一次调用即可决定运行包含哪些步骤。这种方式将一个 SOP 由多个部分组合而成,而不是拆分为多个 SOP,每个 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> 仅在答案为“是“的概率达到 part_threshold 时才运行该步骤。
  • unless_decided: N 在步骤 N 的问题回答为“是“时跳过该步骤。步骤 N 必须包含一个 decide 问题。
  • 被跳过的步骤会以 skipped 状态及其原因记录,运行随后继续执行下一个步骤。下一个步骤接收的输入与被跳过的步骤本应接收的输入相同。
  • 当模型无法作答,或对某个步骤的问题给出格式错误的值时,该步骤仍会执行。跳过绝不是安全的兜底方式。
  • Routing 守卫可以读取答案:在 when: 条件中,$.decisions.2 表示第 2 步的“yes”概率。
  • 另一个步骤不能 depends_on 条件步骤,因为被跳过的步骤不会产生任何输出。请改为在 when: 条件中读取 $.steps.N。
  • 一个步骤在其审批关卡之前被跳过,因此被跳过的步骤永远不会请求审批。

安全

  • 模型只能在作者已写明的选项中做选择。它不能添加触发条件,不能选择未列出的模式,也不能选择 priority_based 或 deterministic。

  • 选定的模式仅适用于该次运行,并与该次运行一同存储,因此重启后依然有效。步骤级的 requires_confirmation 和检查点无论所选模式如何都会继续进行拦截。

  • 失效即关闭(Fail-closed): 未配置的别名、网络或 HTTP 错误、格式错误的回答,或置信度低的回答,都不会降低监督级别。运行时采用其列出的模式、其编写的 execution_mode 以及 supervised 中最严格的一种。

  • Here’s the translation:

    事件负载以不可信内容的形式发送给模型,并限制在 8,000 个字符以内。如果事件内容不得离开主机,请选择自托管模型。

每项决策都会记录 SOP 名称、结果、所选模式、每个条件步骤的答案以及输入 token 数。