决策模型与额度池
功能概述
决策模型是一类特殊的 AI 渠道:不做自由文本生成,而是对一组类型化问题给出概率化判断。现有渠道包括 TypeSafe.ai 的 Jev(jev-latest)与自托管 NanoJev;另有 Perplexity Decisions、OpenAI Decisions、Cloudflare Clef/Clef-flash 的直连适配器,需管理员配置与真实验收后才能上架。覆盖三种问题原语:
| 原语 | 含义 | 编辑器对应 |
|---|---|---|
| noul | 是非判断(附概率与 true/false 分布) | Decision 的是否判断项、if-else / loop / promise 的 AI Prompt 条件 |
| choice | 单选(附置信度与候选概率分布) | Decision 的候选判断项 |
| score | 评分(附等级概率分布与最高概率等级) | Decision 的评分判断项(x-jev-score-levels) |
在编辑器侧,Decision Block 的判断说明(文字 + @ 变量引用)作为材料发给决策模型,schema 自动翻译成问题组,输出中附带 __jev__ 逐题详情(值/概率/分布,评分题附等级名);if-else / loop / promise 的条件可切到「AI Prompt」模式,判断依据来自容器块级判断说明,并可开启「输出判断详情」拿到 @{块名.decision}。
管理侧的核心能力是渠道凭证池(额度池):一类渠道配置多把 API Key 组池接力——某把 Key 额度耗尽时自动下架,流量切到下一把;换新 Key 后一键恢复回到池中。
界面说明
管理后台 · 模型管理 → 渠道
TypeSafe (Jev) 渠道卡片上有一个「凭证池」区块,把同一渠道的多把 Key 聚合展示:
| 元素 | 说明 |
|---|---|
| 主凭证 | 渠道的第一把 Key(凭据组 ai_provider:typesafe) |
| 凭证 2 / 凭证 3 | 额度池别名槽位(ai_provider:typesafe_2 / typesafe_3,各自独立凭据组、模型候选行与 smoke 证据) |
| 状态标签 | 每个槽位显示:已启用 / 已禁用 / 未配置 |
| 凭证编辑 | 打开凭据组编辑弹窗(API Key + Base URL),与主凭证同一套表单 |
| 刷新 | 重新拉取池状态(各槽位参与服务的模型变体与禁用原因) |
槽位上可能出现的状态标记:
| 标记 | 含义 |
|---|---|
| 额度耗尽已自动下架 | 该 Key 触发了运行时额度熔断(见下文),旁边会出现「恢复」按钮 |
| 待激活 | 别名槽位已挂接到模型但尚未启用(需先通过三原语 smoke),旁边出现「启用」按钮 |
| 池已耗尽 | 该模型下家族全部变体都被禁用,调用会显式失败——请补充或恢复任一凭证 |
操作步骤
配置新的直连决策渠道
配置前确认范围:仅纯文本,最多64题,候选2–255项、评分2–10级,单层字段。 图片、音频、文件会在推理请求前拒绝。平台范围小于部分上游能力,不会自动拆分请求。
| 渠道卡片 | 模型 | 凭据组 | 必填 |
|---|---|---|---|
| Perplexity Decisions | pplx-decider-v1.1-27b | ai_provider:perplexity_decisions | API Key |
| OpenAI Decisions | gpt-6-luna,平台目标 gpt-6-luna-decisions | ai_provider:openai_decisions | API Key |
| Cloudflare Clef | clef / clef-flash | ai_provider:cloudflare_decisions | API Token + Account ID |
进入「模型管理 → 渠道」后,在对应卡片配置独立凭据。Cloudflare 需要该 Token 所属的32位 Account ID,只有 Key 无法调用。Base URL 留默认官方地址即可;当前不支持自定义代理或其他凭据组覆盖。既有 Perplexity 搜索、OpenAI 聊天凭据与默认模型不会被自动共用或替换。
完成候选同步后,仍要走价格审核、服务端三原语 smoke、手动发布与启用;没有真实 Key 测试的候选保持未上架。离线测试通过不等于上游账号已开通。换 Key 或 Cloudflare 账号后需重跑 smoke。DB 凭据组停用、异常或无法读取时不会借环境变量重新启用。
OpenAI 拒答会明确中止本次决策,不返回 false 或部分业务答案;真实用量仍记录。超时、5xx或未知用量不冒充成功结算,也不自动向另一供应商重放。评分输出是连续期望,概率最高等级另看 __jev__.level。
本批尚未接入 Liquid d1(字段契约待核实)、网关和 Vela 自托管;原生 TypeSafe 网关接口的范围不变。
配置渠道第一把 Key
- 进入管理后台 → 模型管理 → 渠道,找到 TypeSafe (Jev) 卡片;
- 点击主凭证的「凭证编辑」,填入 API Key(
https://api.typesafe.ai为默认地址); - 启用凭据组后,通过上架流程(见相关链接的 runbook)完成三原语 smoke 与发布。
增加一把 Key 进池
- 在凭证池区块点击「凭证 2」的「凭证编辑」,填入新的 API Key 并启用;
- 用
PROVIDER=typesafe_2再跑一遍上架脚本:候选同步 → 挂接到既有jev-latest(价格保持不变)→ 三原语 smoke → 通过后自动激活为池内变体; - 完成后
jev-latest的供货链变为[typesafe, typesafe_2],策略 sequential:第一把耗尽自动用第二把。
额度耗尽自动下架
额度类错误(如 HTTP 402、明确的余额耗尽提示;命中已识别限流特征——rate limit / RPM / 每分钟配额等——的错误不计入熔断)在滑动窗口内累计达到阈值后,系统自动:
- 禁用该变体并写入运行时禁用元数据(与发布门禁的剔除互相独立、互不覆盖);
- 刷新路由缓存,流量立即切到池内下一把 Key;
- 事件记录到
provider_degradation_events,管理界面槽位显示「额度耗尽已自动下架」。
阈值可配置(环境变量,默认值见下):
| 环境变量 | 默认 | 含义 |
|---|---|---|
AI_QUOTA_DISABLE_THRESHOLD | 3 | 窗口内累计 N 次额度类失败触发下架 |
AI_QUOTA_DISABLE_WINDOW_MIN | 10 | 滑动窗口长度(分钟) |
额度判定目前仅对 TypeSafe 家族渠道启用,且阈值判定锚定上游错误格式(本地校验错误不会触发下架)。
池允许耗尽至零:全部 Key 耗尽时调用显式失败(优于反复撞死 Key),请补充新 Key 后恢复。
恢复一把被下架的 Key
- 先在「凭证编辑」里把该槽位换成新的有效 Key(旧证据绑定旧凭据指纹,换 Key 后 smoke 证据即失效);
- 点击槽位上的「恢复」按钮(对应
POST /admin/ai-provider-pool/variants/re-enable,mode=quota_recovery)——恢复立即生效:变体直接重新参与路由,不经过 smoke 校验; - 随后重跑上架脚本验证新 Key:别名槽位用
PROVIDER=typesafe_N(脚本会重跑三原语 smoke;已启用的变体会跳过激活步骤),主凭证用PROVIDER=typesafe。若 smoke 未通过,说明 Key 无效,请先修复再继续使用。
注意:若变体同时被发布门禁剔除(能力不达标),「恢复」会被拒绝——需要走正常的重新上架门禁流程,而不是额度恢复。
运行级亲和
当模型策略为 round_robin 时,同一 Run 的调用按 hash(runId + 协议槽) % 可用候选数 计算稳定的起始槽位:在同一协议槽、池内候选不变的前提下,同一 Run 首选同一把 Key,既分散负载又保护绑定在单把 Key 上的上游缓存。边界:首选 Key 失败时仍会临时切换到池内其它 Key(可用性优先);池拓扑变化(增删 Key)会重新映射;无 Run 上下文的直连调用仍按轮询指针。
管理 API
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /admin/ai-provider-pool/status?family=typesafe | 家族凭证池状态聚合(凭据组 + 各模型变体 enabled / 禁用元数据 / 池耗尽标记) |
| POST | /admin/ai-provider-pool/variants/re-enable | 变体恢复(quota_recovery)或别名激活(alias_activation,服务端强校验 smoke 证据) |
均需 JWT + site:admin 权限;端点索引见管理端点目录。
re-enable 请求体按完整四元组定位单一变体(不支持批量):
| 字段 | 说明 |
|---|---|
mode | quota_recovery(额度熔断恢复)或 alias_activation(别名激活,服务端强校验 smoke 证据) |
provider | 凭证槽位渠道 id:主渠道 typesafe(可用于额度恢复)或别名 typesafe_2 / typesafe_3(alias_activation 仅限别名) |
model_target | 模型标识(如 jev-latest) |
provider_model_id | 渠道侧模型 id |
protocol | 协议,默认 openai-chat |
相关链接
- 功能实现文档:决策模型(含上架 runbook、证据链、判断说明语义与三阶段发布开关表)
- Decision Block · If-Else Block · Loop Block
- 管理后台