Prism · 棱镜

调度规则全部公开,包括对我们不利的那些

自动调度天生让人怀疑「是不是偷偷给我用了便宜货」。营销话术谁都会写,规则细节写不出来就是没做。所以这一页写得像技术文档。

四层,从完全手动到完全托管

四层共享同一套调度链路记录。任何一次请求,不管走的哪一层,都能回放出「为什么选了这个模型」。

你的请求照常调用,不改代码PRISM前沿推理 · 1.00×均衡通用 · 0.42×国产旗舰 · 0.18×高速轻量 · 0.06×
层做什么适合谁
指定模型填一个具体模型 ID,Prism 完全不介入。已经知道自己要什么的人。
Prism auto我们维护并持续调优的默认策略,装完就生效。不想配置的人。新账户默认就是它。
自定义组合你自己写规则,存成一个名字,当模型调用。任务分布有明显规律、想精细控成本的人。
灾备切换上面三层之下的兜底。模型不可用时转到同能力组的灾备模型。所有人。默认开启,可关;灾备对象在同一能力组内自动选,目前不能自己指定。

自己调一遍试试

四组权重各自可调,拖动任何一条其余会自动归一化。这里用的是 /models 页公开的真实系数,不是演示数字。

常见分布
任务在各能力组之间的分布
20%
48%
20%
12%
不用 Prism,全程前沿组480,000 CU 的工作量
按这个分布调度,能力相同1,079,137 CU 的工作量
2.2×同一份 5× Pro 额度,多做 599,137 CU 的活。

倍数是权重与系数的加权结果,你可以自己拿 /models 页的系数验算。真实分布由控制台按你的实际用量每月复算一次。

难度是怎么判断的

分类器在请求进上游之前跑完,延迟预算低于 15 毫秒。它必须是本地小模型或规则打分——为了省钱先调一次大模型,逻辑不成立。

信号说明什么
输入 token 数长上下文通常意味着更复杂的任务。
是否带工具定义带 tools 的请求多半是 agent 场景,容错空间小。
对话轮次深度多轮累积的任务通常比单轮更难。
代码块数量与行数区分「问个语法」和「改一个模块」。
意图关键词重构、设计、调试、翻译、格式化的难度差别很大。
会话内历史难度**还没生效。** 打分函数里留了这一项,而没有任何一处把「前几轮有多难」传进去,所以它当前恒为零——见「重试即升级」那条待定项。列在这里是因为这一页承诺公开全部信号,包括还没接上的那个。
请求头显式指定你可以用 X-AGIPlan-Difficulty 直接覆盖自动判断。

初版是纯规则加权打分。上线后用真实数据训练一个小分类器,把「分类器判低但用户重试了」作为负样本——这类反馈比人工标注准得多。

三条硬约束,不是可调项

降本不能降能力,否则你第一周就走了。下面三条写死在代码里,任何组合、任何策略都绕不过去。

  1. 01

    宁可路由高,不可路由低

    难度落在阈值边界附近时一律向上取整。误判的代价不对称:多花点钱远好过输出变差,而输出变差你未必当场发现。

  2. 02

    能力约束优先于成本比较

    请求声明了工具调用、视觉或最小上下文长度时,不满足的模型直接被排除,根本不参与成本比较。便宜但做不了的模型不是选项。

  3. 03

    合规不是优化项

    未取得大陆备案的模型不向大陆用户提供。这一条在准入阶段就把路线排除掉,不因为「没有别的选择」而放宽,也不因为你自定义的组合里写了它而放行。

灾备与计费

上游不可用是常态,不是意外。默认开启,只在同能力组内切换,失败的尝试不计费。

触发条件

5xx、限流、超时、凭据失效

首 token 超时默认 60 秒,可用请求头 x-agiplan-first-byte-timeout-ms 调整,取值夹在 5–60 秒之间。这只对流式请求生效:非流式的上游要生成完才开始回,只受 10 分钟总时长限制。返回内容被截断且非你本意的情况只记录不自动重试——自动重试会重复计费。

切换范围

只在同能力组内换

只在同一能力组内换模型,保证输出质量不变。跨组降级我们不提供——写成配置项也不行。组合里可以把灾备关掉(failover.enabled = false),那就是「宁可失败也不换」。

同组无可用时

失败并告诉你,不偷偷降级

同组确实没有可用模型时,默认返回 503 并附完整的尝试记录,而不是悄悄给你一个更弱的模型。

计费口径

失败不计费,成功按实际线路计价

只对最终成功返回的那一次计量:换线试过的那几次一个字都不进你的账单。切到哪条线就按那条线的售价计费,账单上能看到实际服务的模型。一个例外要说清楚:流已经开始之后上游断了,已经产出的那部分照常计费——那些 token 是真的生成了,和你自己按中断是同一个道理。

"failover": {
  "enabled": true,                 // 默认 true
  "scope": "same_tier"             // 目前只支持 same_tier;自定义灾备顺序还没做
}
灾备可配项

调度溯源

这不是附加功能,是「智能调度」这个卖点能成立的前提。每个请求都留一条链路记录,保留 30 天,可导出。

示例trace tr_01J8FQ3M7X总耗时 8.42s · 实扣 4.970 CU
  1. 0ms鉴权ap_live_…f3c2 · 5× Pro
  2. 3ms配额预扣 11.742 CU(输入 14,200 + max_tokens 8,192 的最坏情况),三窗口余量充足
  3. 11msPrism难度 0.82 · tools=3 tokens_in=14,200 code_blocks=2
  4. 12ms路由规则 #1 命中 → 前沿推理组 · model-a
  5. 14ms响应model-a 限流
  6. 210ms灾备切换转同能力灾备模型 model-b · 按 model-b 计价
  7. 224ms流式首 token 890ms
  8. 8.42s结算in 14,200 / out 2,130 → 实扣 4.970 CU,退回预扣差额 6.772 CU

链路记录只含元数据,不含请求正文——和零留存是同一套架构。记录里只出现模型标识,不会出现任何供给来源标识。

响应头

X-AGIPlan-Trace

成功的响应都带追踪号,同时带 X-AGIPlan-Model-Actual 标明实际调用的模型。你可以在自己的日志里存下来。被拒的响应没有追踪号——那次没有落成用量记录,查不到;503 时链路在响应体的 `attempts` 里。

控制台

用量明细逐条展开

每一行都能展开成完整的时间线。发生过灾备的记录有独立标记,一眼能筛出来。

接口

GET /v1/traces/{id}

用你自己的密钥就能拉,返回结构化 JSON。想接进自己的可观测系统也可以。

报障

把 trace_id 发给我们

客服后台按追踪号一键定位,不用你复述发生了什么。

组合配置示例

auto、组合、自定义模型现在是同一套规则语言:规则自上而下匹配,命中第一条即生效;未命中走 default(写成 null 则拒绝)。配置完成后命名保存,在代码中像普通模型一样调用。

{
  "name": "my-coding-model",
  "pools": {
    "strong":   { "tier": "frontier" },
    "domestic": { "tier": "domestic" },
    "mid":      { "tier": "balanced" },
    "cheap":    { "tier": "fast" }
  },
  "rules": [
    { "id": "hard",    "when": { "difficulty": { "gte": 0.75 } },                        "use": "strong" },
    { "id": "zh_long", "when": { "lang": "zh", "tokens_in": { "gt": 8000 } },             "use": "domestic" },
    { "id": "medium",  "when": { "difficulty": { "gte": 0.35, "lt": 0.75 } },             "use": "mid" },
    { "id": "simple",  "when": { "difficulty": { "lt": 0.35 } },                          "use": "cheap" }
  ],
  "default": "mid",
  "constraints": {
    "require_tools": true,       // 不支持工具调用的模型直接排除
    "min_context": 128000,
    "max_cu_per_request": 500    // 单次超过就拒绝,防止一条请求打穿额度
  },
  "failover": { "enabled": true, "scope": "same_tier" }
}
一个自定义模型的完整策略

规则看完了,去算算能省多少

倍率是原料,调度才是省钱的地方。定价页有个推荐器,按你的用法直接给档位建议。