Keyboard shortcuts

Press or to navigate between chapters

Press ? to show this help

Press Esc to hide this help

SOP Fan-In:频道

代理循环频道(Telegram、Discord、Slack 以及其他对话频道)上的入站消息可以启动 SOP 运行。当已加载的 SOP 需要频道事件时,协调器会将每条入站消息提升为一个 SOP 事件(频道类型及可选别名成为事件主题,消息内容成为载荷),并将其与正常的代理轮次一起派发给引擎。

传输侧(bot token、allowed users、按 channel 的行为)是在每个 channel 上配置的。本页介绍 trigger。agent-loop channels 没有 per-channel dispatch switch:SOP 的 channel trigger 就是 opt-in,普通 agent turn 总会与它启动的任何 SOP run 一起运行。

触发器

配置的通道上的入站消息或 forge/platform 事件(telegram、discord、slack、Git 等)。实时:当启用该通道的 SOP dispatch 时,由通道协调器投递。Git forge 生产者会设置形如 <channel>.<alias>:<event_type> 的事件主题,并将 event_type 放入载荷中,因此编写的 condition 可以按类型过滤 forge 事件,而无需第二种触发器形状。

字段类型默认含义
alias字符串?null可选的已配置实例别名;未设置时匹配每个实例。
channel*字符串ChannelKind 用 snake_case 命名的通道类型值。
condition字符串?null针对消息负载求值的可选表达式。

加载并验证 SOP:

定义

按照 Syntax 中所述编写 SOP,并使用 channel 触发器。上面的触发器字段是受支持的键;该页面会逐一讲解整个文件。

验证

zeroclaw sop validate

检查

zeroclaw sop list
zeroclaw sop show <name>

匹配

channel 是一个 ChannelKind 的 snake_case 值(telegramdiscordslack,等等)。没有 alias 的触发器会匹配该 channel kind 的任何已配置实例;带有 alias 的触发器只匹配该实例。事件 topic 是 <kind><kind>/<alias>。消息内容会转发到 SOP 事件 payload 中,可供可选的触发器 condition 使用;step context 接收经过截断、清理和 framing 处理后的形式。像 $.text == "deploy" 这样的 JSON-path condition 要求消息正文必须是 JSON。

启动它

加载一个带有 channel 触发器的 SOP,然后向该 channel 发送一条消息。channel 触发器是一个可选订阅机制:只有当已加载的 SOP 需要 channel 事件时,编排器才会把传入消息提升为事件。它会将 channel 类型和别名放入 topic,并将内容放入 payload,然后分发它。对于每个已加载的 SOP,只要其 channel(以及如果已设置的 alias)匹配,并且其 condition(如果有)针对内容成立,就会启动一次 run。正常的 agent turn 仍会与任何已启动的 run 并行执行。

当没有已加载的 SOP 具有 channel 触发器时,会完全跳过 fan-in hop,因此没有 channel 来源 SOP 的 channel 不承担任何开销。

所有通道投递在事件构建之前,都会先进入运行时共享的 SOP 入口适配器。该适配器负责源兴趣检查、必需的引擎/审计句柄诊断、不受信任输入的上限限制、事件时间戳以及分发结果日志记录。通道代码仅提供传输层拥有的主题和载荷。Forge 事件使用相同的边界及其配置的目标 SOP,因此它们无法绕过触发器匹配或正常的安全与审计路径。

如果没有任何内容启动,请确认已加载的 SOP 具有 channel 触发器,触发器的 channel/alias 与消息到达的实例一致,并且 condition 匹配。参见 fan-in 概览故障排除表

批准并观察

命中检查点的运行会暂停为 WaitingApproval。可使用 CLI(zeroclaw sop listzeroclaw sop approve)或通过 gateway API 审批端点(GET /admin/sop/pendingPOST /admin/sop/approvePOST /admin/sop/deny)清除或查看它们。

另见