AI 辅助编写
你可以通过三种方式在 DeviceChain 中编写检测规则:带类型的表单、可视化自动化画布,以及启用 AI 服务后的英语自然语言**“描述(Describe)”入口**。在描述入口输入*“当冷冻柜温度持续高于 -15°C 超过十分钟时,触发高严重程度告警”*,平台就会起草一条规则,供你审查、调整并发布。
三个入口都转换为相同的结构化规则模式,并通过同一个编译器。AI 只是通向同一确定性后端的另一个入口,绝不是第二套引擎,也不参与实时事件路径。
**目前可用:可选启用的 ai-inference 服务(位于 full 部署配置档);由运维人员注册、密钥句柄只写的 AI 提供方注册表;设备配置文件规则编写界面的自然语言“描述(Describe)”**入口,由 draftDetectionRuleFromText 变更操作支持;每租户主动同意;以及带费用指标的每租户 AI 速率限制。
**计划中:**持久化的每租户 AI 费用预算(硬性成本上限;目前已提供速率限制和费用可观测性)。本仓库是判断当前哪些功能能够构建的权威依据。
draftDetectionRuleFromText 变更操作调用 AI 服务,运行有次数上限的编译与修复循环。它位于拥有规则编译器的 API,而不是存储规则的 API,因为起草是编译阶段操作。之后,你通过普通规则创建 API 保存它返回的草稿。
如何检查起草的规则
每个编写界面都生成候选规则。CEL 编译器随后解析、检查类型并限制计算成本,规则通过后才可以保存。格式错误、类型错误或超过平台计算成本上限的规则,会在发布时被拒绝,绝不会运行。AI 入口也不例外:模型提出候选规则,编译器以与手绘画布规则完全相同的方式接受或拒绝它。
这是确定性边界,不可跨越:
- AI 和画布只存在于编写侧,帮助你编写规则。
- 实际运行的是编译后的规则,即基于按键分组流式引擎的确定性 CEL。从结构上保证事件重放时产生相同触发结果(重放正确性)。
- 模型和画布都绝不参与保证重放正确性的检测路径。 重启后,编译规则重新推导相同触发结果;帮助起草规则的模型不参与该循环。
使用描述入口时,服务运行有次数上限的编译与修复循环:起草候选规则并编译。如果被编译器拒绝,服务会将错误反馈给模型,进行有限次数的修复尝试。你收到的候选规则已经能够编译,但仍需自行审查和发布;平台不会代你启用任何规则。
AI 提供方
AI 是由运维人员注册、限定于实例的配置,不是租户自带的资源。运维人员在管理平面(/admin/ai-providers)注册一个或多个 AI 提供方,每个都有类型、端点、模型和 API 密钥。
API 密钥是只写的密钥句柄(密钥存储)。写入时加密封装,推理时在服务器内部解析,绝不返回。提供方读取接口只说明是否设置了密钥(hasSecret),绝不暴露值。提供方详情页包含**基本 / 连接 / 测试(Basic / Connection / Test)**选项卡;**测试(Test)**操作检查连接,不暴露密钥。
外部模型使用需要每租户主动同意,条件不满足时直接拒绝,而不是回退。代表租户执行任何外部推理之前,租户必须同意。链条中任何环节缺失——未同意、没有提供方、提供方已禁用或没有密钥——都会得到“不执行推理”,绝不静默回退。
按层级授予模型使用资格
租户的租户层级决定实际使用哪个模型,规则有意保持严格:
- 运维人员向层级以及可选的单个租户授予提供方/模型。
- 某项能力使用的模型由
(tenant, function) → model分配决定,并回退到层级默认值。 - 服务器绝不推断默认模型。授权不等于默认值,也没有“设为默认”标志。如果层级没有组合任何模型,租户就没有模型:菜单为空即没有模型。
- 指向当前菜单之外的分配解析为 NONE,绝不静默替换。
用户不按任务选择模型。模型选择是运维配置,按功能在租户设置中设定一次,不是任何请求的参数。GA 功能集合中只有一种 AI 功能,即规则起草;该机制可扩展到未来功能,而无需改变契约。
控制台中的位置
- 描述入口:位于设备配置文件的检测规则编写界面,与表单构建器和自动化画布并列。创建新规则时提供;已有规则通过表单或画布编辑。输入描述,审查草稿,然后发布。
- AI 提供方:
/admin/ai-providers(管理平面),用于注册提供方、设置密钥和测试连接。 - AI 服务组合:跨层级授权矩阵,映射每个层级可以使用的模型。
- 租户模型:在租户详情页按功能设置,从层级派生的菜单中选择。
限制与边界
AI 绝不涉及什么
- 它绝不运行于实时检测与动作路径。该路径使用确定性 CEL,保证重放正确性,不涉及模型。
- 它绝不查看其他租户的数据,也不是特权后门。这与 MCP 接口不同,后者让 AI 代理使用用户自己的租户作用域令牌操作平台。
- 租户业务数据(设备名称、属性值)和密钥不是模型可以公开的内容;密钥在密钥存储中保持只写。
- 它不写入任何内容。 起草的规则返回给用户,由用户通过普通编写路径、使用自己的令牌审查并保存。起草调用本身不持久化任何内容。
不支持自带密钥,未来也不会支持
租户不能提供自己的提供方密钥,这一点不会改变。提供方属于实例级运维配置:运维人员注册、持有密钥,并决定哪些层级和租户可以使用哪些模型。唯一的租户级控制项是外部推理同意标志,而且它也不是自助设置:租户可以读取,只有运维人员可以设置。
这是设计决策,不是功能缺口。需要使用自己的密钥和账户的客户,应使用专属实例;其他租户专属基础设施需求也采用这种方式。共享实例中的租户专属密钥,相当于只提供隔离中的一项,却没有其余配套隔离。
范围限制
- 目前提供两种提供方类型:
anthropic和openai-compatible。anthropic使用 Anthropic Claude API。端点可选,用于覆盖内置基础 URL。openai-compatible使用任何实现 OpenAI chat-completions API 的端点,例如 vLLM、Ollama、DeepSeek、llama.cpp 服务器,或它们前面的网关。这种类型由地址而非厂商定义,因此端点是必填的。缺少端点的提供方会被拒绝,而不是存储为无法使用的记录。- 两种类型在同意检查中都视为外部。集群内 vLLM Pod 和公开 API 使用同一协议,仅凭类型无法区分,因此自行托管的
openai-compatible模型仍需要租户主动同意。 - 提供方实体设计上能够接受其他类型,但实现提供前,写入其他类型会被拒绝,而不是接受后无法使用。
- 修复循环有次数上限。 被编译器拒绝的候选规则,会携带编译器原始错误反馈给模型,次数固定且较少。如果仍没有规则能够编译,起草结果会标为失败,并返回编译器原因和模型最后一次尝试,供你了解其行为。循环绝不会放宽编译器限制来迁就草稿。
- 每个租户调用都受服务器端限制:提示词大小、输出长度、超时和每租户请求速率。调用方不能提供这些限制,也没有无限制选项。
- 只有一种功能。 GA 功能集合中只有规则起草,由调用服务指定。调用方不能自行选择功能,因为选择功能等于选择使用资格。
例外:提供方连接测试
运维人员从管理控制台测试提供方连接时,调用不会检查租户同意标志,也不受每租户速率限制。该路径通过令牌解析提供方,因此这两道检查都不适用。这是有意的例外:运维人员使用自己的提示词测试自己的配置,没有租户数据跨越边界,密钥仍必须能解析。所有携带租户输入的路径都经过两道检查。
另请参阅
- 事件处理与告警:AI 起草规则所面向的编译器和引擎。
- 租户层级与服务组合:如何组合 AI 模型使用资格。
- AI 访问(MCP):供 AI 代理操作平台的独立只读接口。