版本化定价与 Project/Token Guard
成本治理不是一个总预算开关。Halro 按下面的顺序回答四个不同问题:
- Price Version:这次 Attempt 应按什么规则计价;
- Project:这个业务边界今天和此刻还能不能发请求;
- Token Guard:这次请求或近期行为是否超过固定阈值、偏离正常基线;
- Run 预算:一次完整业务执行的生命周期成本是否还有余额。
前三项适用于稳定版能力;Run 预算属于 v0.7 预览。它们共同生效,任一项拒绝都不能靠放宽另一项
绕过。
一、先建立可信价格
Section titled “一、先建立可信价格”每个 Deployment 在承接成本治理流量前,至少需要一个已经生效的 Price Version。核价时先固定 Provider、上游目标、Region、Tier、币种和价目生效时间;只看营销模型名容易把另一个区域、批量层级 或缓存价格套进来。
按上游合同选择计价项:
| 项 | 控制台单位 | 常见用途 |
|---|---|---|
| 输入 | USD / 1M tokens | 普通输入 Token |
| 缓存输入 | USD / 1M tokens | Provider 明确报告的缓存读取输入 |
| 输出 | USD / 1M tokens | 普通输出及 Provider 规则覆盖的推理 Token |
| 每请求固定 | USD / request | 媒体、Rerank、资源操作或合同固定费 |
不能确认价格时保持“未设置”,不要填零。只有确实无需付费时选择 free;它仍会生成 Price Version,
使“已知零成本”和“未知成本”保持可区分。
价格证据与复算
Section titled “价格证据与复算”在创建前记录来源类型和可复核说明。官方公开价、合同价、内部成本价和临时估算不是同一种保证; 管理员仍要确认模型、Region、Tier、缓存规则和计量单位匹配。确认页的示例金额用于发现百万 Token、 每请求固定费或小数位误填,不能替代独立复算。
每次 Attempt 在调用 Provider 前绑定当时的完整价格快照。之后创建新价格版本不会重算历史 Attempt, 因此月末看到旧请求沿用旧价是正确行为。
立即生效、计划生效与分时价位
Section titled “立即生效、计划生效与分时价位”- 立即生效的版本不能删除;后续调价通过创建更晚的新版本覆盖;
- 计划版本在生效前可以取消;新计划时间必须晚于所有尚未取消的计划版本;
- 已存在未来版本时,不能再插入一个更早的“立即生效”版本,应先取消阻挡版本或把新版本排到其后;
- 分时价位使用 Provider 自己的 IANA 时区,与 Project 的 Accounting 时区无关;跨午夜时段拆成两段;
- 时段未覆盖的时间使用版本的基础费率,不能把空档解释成免费。
恢复旧备份后,如果计划价格在停机期间已经越过生效时间,Deployment 会进入 pricing quarantine。 管理员核对时间线并确认恢复价格前,不应让它重新承接流量。
二、用 Project 建立确定性边界
Section titled “二、用 Project 建立确定性边界”Project 是预算、限流、可用模型和安全策略的共同归属。建议一个 Project 对应一个可以独立回答 “谁负责、预算多少、允许访问什么”的业务边界。
| 设置 | 保护的风险 | 设定方法 |
|---|---|---|
| Allowed Models | 调用错误环境或未批准模型 | 只选择该 Project 需要的公开 Route 别名 |
| Daily Budget | 自然日累计费用失控 | 按正常日均、峰值和停机策略设定,不把预算当告警 |
| RPM / TPM | 重试风暴或输入量突增 | 从真实峰值加有理由的余量,不设无界缓冲 |
| 最大并发 | 上游和本机资源被占满 | 与应用并发、Deployment 并发和 Provider 配额一起计算 |
| 输入/输出 Token 上限 | 单请求最坏费用过大 | 根据业务最长输入和可接受回答长度设定 |
| 请求大小/流时长 | 图片、长流占用资源 | 结合编码膨胀、客户端超时和 Gateway 总超时设定 |
| Allowed CIDRs | Key 被其他网络使用 | 限定到真实应用出口或受控网段 |
Daily Budget 按实例 Accounting 时区的自然日执行;它可能是 23、24 或 25 小时。时区变更在当前周期 结束后生效,不重算历史费用,也不改变 Price Version、Usage export 或审计记录使用的 UTC 时间。
应用每次请求仍应显式设置合理的输出上限。结果不明确时,Halro 可能按允许的最大输出做保守估算; Project 输出上限和请求字段共同决定这个最坏上界。
三、用 Token Guard 处理异常行为
Section titled “三、用 Token Guard 处理异常行为”Token Guard 绑定到 Project,但不代替 Project 的 RPM、TPM、并发或日预算。先在 安全策略 创建 策略并使用模拟功能检查样本,再绑定 Project。
固定阈值包括:
- 单请求 Token;
- 每分钟 Token 和成本;
- 并发;
- 错误率及其最小样本数;
- 每分钟唯一来源 IP。
动作分三档:
| 动作 | 作用 | 推荐阶段 |
|---|---|---|
observe | 初始固定阈值命中只记录;价格或策略版本变化后的成本复核仍可能失败关闭 | 建立正常基线,并观察复核拒绝 |
alert | 初始固定阈值命中会记录并投递告警;价格或策略版本变化后的成本复核仍可能失败关闭 | 验证阈值、告警链路和复核拒绝处置 |
temporary_block | 满足违规次数后临时封禁 | 误报和解除流程均已验收后 |
临时封禁还要设置触发前违规次数、封禁 TTL 和冷却时间。管理员可以在 Project 页面手动解除,但解除 不是修复根因;应先确认是流量异常、客户端重试、Key 泄漏还是阈值不合理。
EWMA 用于发现相对历史基线的异常。先保证绝对 RPM、TPM、单请求 Token 和成本阈值存在,再开启 EWMA,并为热身、评估窗口、最小样本和冷却留出真实流量。当前 EWMA 只做相对检测和告警,不能把它 当作自动封禁边界。
四、需要业务执行边界时再加 Run 预算
Section titled “四、需要业务执行边界时再加 Run 预算”v0.7 Run 预算限制一次完整业务执行,而 Project 日预算限制整个业务边界。一次 Run 内的客户端请求、
Provider retry 和 fallback 都消耗同一 Run 余额;同一 Work Unit 重新执行时创建新 Run。
Halro 在 Provider I/O 前原子检查 Project 日预算和 Run 的 committed + reserved + pending。Run 余额
不足时不会自动关闭 Run;应用可以改成仍在余额内的请求,或按业务策略关闭。未知价格无法进行 Run
预算准入,即使实例允许普通请求在未知价格下继续,附加到 Run 的请求仍会拒绝。
完整生命周期和 Key Scope 见接入运行治理。
五、按阶段上线
Section titled “五、按阶段上线”- 核价:由 FinOps 或合同责任人确认目标身份、单位、缓存规则和生效时间;
- Project 硬边界:先设置 Allowed Models、输出上限、预算、RPM、TPM 和并发;
- 观察:Token Guard 使用
observe,覆盖正常峰谷和发布日,同时验证价格或策略变化触发的 成本复核拒绝; - 告警:切到
alert,验证收件人、去重、失败重试、处置时限和复核拒绝路径; - 临时封禁:只对高置信固定阈值启用,并演练自动恢复和管理员解除;
- Run 预算:在真实业务试点确认 Work Unit/Run 边界后启用,不从 HTTP 请求粒度机械推导。
六、验收矩阵
Section titled “六、验收矩阵”| 场景 | 预期结果 |
|---|---|
| Deployment 没有生效价格 | 在 Provider I/O 前拒绝,不显示成 $0.00 |
明确 free | Attempt 成本为已知零,并保留 free 价格快照 |
| 创建新价格版本 | 新 Attempt 使用新快照,旧 Attempt 金额不变 |
| 计划版本尚未到时 | 当前版本继续生效;到点后新请求使用计划版本 |
| Project 日预算不足 | 请求在 Provider I/O 前拒绝,盲目重试无效 |
Token Guard 为 observe | 初始固定阈值命中只记录;若 Attempt 成本上升或策略版本改变,复核仍可返回 token_guard_blocked |
| 临时封禁触发 | 后续请求明确拒绝;TTL 或管理员处置后恢复 |
| Run 余额不足 | Project 仍可能有余额,但该 Run 请求被拒绝 |
| Provider Usage 缺失或结果不明确 | Attempt 标记估算或未知,不按零成本处理 |
验收后在 用量与调用 展开 Attempt,核对 Provider 报告 Token、价格快照、输入/输出/固定费用、
estimated 标记和最终金额。跨功能的重试与预算组合见
最佳实践案例三。