跳转到内容

模块 XI — 成本与 AI FinOps

模块 XI 是面向 AI 的成本 / FinOps 层:它核算模型与提供方 connector(连接器)所报告的内容, 让你按任意归因维度切分开销,预测当前周期,并把一个预算变成真正的强制执行——在上限处拒绝该项消费, 而不仅仅是发出标记。本页是关于 FinOps 如今做什么、以及其保证在何处终止的参考。

FinOps 不会重新实现提供方集成——它消费模型/提供方成本流,并核算 connector 权威地派生或读取到的 内容。金额始终是一个**整数微美元(micro-USD)**值(百万分之一美元),绝不是浮点数,因此总额绝不 漂移。它是一个 Intelligence(智能)层模块:它拥有摄取、预算与分析功能,并通过它自身受 RBAC 门控的 API 命名空间与 UI 视图将其暴露出来,而不触及核心或其邻居模块。

该模块在构造上即为最小化数据:它存储 token 计数、派生成本与归因引用——绝不存储 prompt、 completion 或密钥。成本属于治理数据,因此读取在 API 处按角色门控,并且绝不向最终用户暴露任何 USD 数额(这是连接的一种属性,而非一项 UI 设置)。

每个 cost.sampled 事件(一个 CostSample——见事件总线)以两种方式被记录:

  • 规范化、已归一的 CostRecord ledger(账本)(一个核心实体,以 id 为键),按自然键去重—— 即该桶的身份(provider / model / session / instant 外加每个归因维度与来源出处),而非其—— 因此一个被重新拉取的开放桶或一份延迟结算的报告会就地 upsert,而不会在 at-least-once(至少一次) 流上重复计数;
  • 一行非规范化的 FinOps read-model(读模型),以自然归因名称为键(provider、model、agent、 session、team、project),从而使开销能按任意上述维度高效聚合——包括提供方的 service_tier

一个预算是一个 kind 为 budget 的核心 Policy:一个维度(global / model / provider / agent / session / team / project)、一个限额、一个周期,以及告警阈值。它的 action 为三者之一——alert (仅 showback(费用展示),永不强制执行的安全默认值)、throttleblock。分析提供按任意维度的 开销拆解、总额、一条按日趋势序列、当前周期的 run-rate 与趋势预测(附带一个明确的置信带)、一个 prompt-cache 效率视图,以及优化建议——每一项都立足于已记录的数据,并对其假设保持诚实

FinOps 从事件总线消费 cost.sampled,并产生两种效果。在摄取时,当 消耗越过一个本周期尚未越过的预算阈值时,它记录该告警并发出一个 FindingReportfinding.reported)——仅为信号;向 Slack / SIEM / PagerDuty 的投递是输出 connector 模块的职责, 而非 FinOps 的。

第二种效果是强制执行。一个 actionthrottleblock 的预算,会通过一道在每个施动模块 自身术语中声明的 BudgetGate 接缝(编排的 fire、语音的 open、模型路由器的 resolve)在上限处 拒绝该项消费;没有任何模块导入 FinOps。该门控与审批门控正交运行——一个操作可以被人工批准,同时 仍被预算拒绝——并以一个不含金额的原因对上限有效开销作答(在只读路由上不含 USD、不含预算名称)。 一次硬 blockHTTP 402 拒绝,一次软 throttleHTTP 429 拒绝,并且该拒绝会被写入 仅追加的 ledger 并被审计。见治理与审批