预算
预算可以在组织、环境、调用方 API Key、服务提供方密钥、团队、成员或成本归属标签级别控制 AI 支出。控制面跟踪用量并做出预算决策,网关则在调用上游服务提供方之前执行这些决策。
预算可通过 AISIX Enterprise 或 AISIX Cloud 使用,不属于 AISIX OSS 资源模型。
前提条件
开始前,请准备以下内容:
- 具备将要创建预算的 AISIX Enterprise 或 AISIX Cloud 组织访问权限。
- 对于模型目录未涵盖的模型,请配置模型定价,以便其流量产生的支出计入预算。
- 对于团队预算, 请创建团队,并绑定其流量应计入该预算的调用方 API Key。
- 对于标签预算,请按成本归属标签中的说明声明标签键并设置标签值。
创建预算
- 打开控制台的 Budgets 视图,然后选择 New budget。
- 在 Name 中输入预算名称。
- 选择 Scope:组织、环境、调用方 API Key、服务提供方密钥、团队、成员、团队中的每个成员或标签。系统提示时,再选择 Environment 或目标。对于标签范围,请选择标签键并填写值。对于调用方 API Key 范围,请先选择 Environment,再选择 API Key。
- 在 Limit (USD)(人民币组织中为 Limit (CNY))中输入限额,并在 Period 中选择日、周或月。预算使用组织币种。
- 在 Alert thresholds (%) 中输入应发送通知的限额百分比。默认阈值为 80%。详见预算告警与通知。
- 保持选中 Hard stop at limit,以便达到限额后拒绝匹配的流量。取消选中后,预算将变为仅告警预算,继续放行流量并在控制面中显示超出预算的状态。
- 选择 Create budget。
资源视图还提供内联预算控件作为快捷入口。这些控件位于 API Key 列 表、服务提供方密钥列表、Members 视图和团队详情页。团队详情页同时包含共享团队预算和每个成员的预算。内联控件和 Budgets 视图编辑的是同一个预算,因此在任意一处所做的更改都会同步显示。
一个目标可以拥有一个预算。编辑该预算可以更改限额、周期或执行模式。如果需要控制其他目标,请创建另一个预算。
预算目标
选择能够代表所需控制支出的最细粒度目标:
| 目标 | 计入预算的支出 |
|---|---|
| 组织 | 组织中的所有受管网关流量 |
| 环境 | 某个部署环境中的流量 |
| 调用方 API Key | 使用某个下游应用或租户密钥进行身份认证的流量 |
| 服务提供方密钥 | 归因到使用某个上游凭证或服务提供方账户的模型用量 |
| 团队 | 来自绑定到某个团队的每个调用方 API Key 的流量 |
| 成员 | 在整个组织范围内,来自绑定到某个成员的每个调用方 API Key 的流量 |
| 团队中的每个成员 | 为每个成员通过绑定到某个团队的密钥发送的流量分别设置限额 |
| 标签 | 在组织所有环境中,归属到某个标签值(例如 department=rnd)的流量 |
团队和成员预算取决于调用方 API Key 上存储的身份。一个密钥可以包含团队绑定、成员绑定、两者或都不包含。仅仅是团队成员并不会使该密钥的支出计入团队预算;只有请求所使用密钥上的绑定才能决定适用哪些预算。
服务提供方密钥记账会跟随 请求成本被计入时附加到模型的凭证。预调度执行发生得更早:控制面会检查调用方 API Key 所属环境可用凭证的服务提供方密钥预算。因此,已耗尽的阻断型服务提供方密钥预算可能在路由选择同一环境中的其他凭证之前,就拒绝使用该 API Key 进行身份认证的请求。
成员预算和团队中每个成员的预算会计入不同的流量:
- 成员预算在整个组织范围内生效。它会合并绑定到该成员的每个调用方 API Key 所产生的支出,不受密钥团队绑定的影响。
- 团队中每个成员的预算会为该团队内的每个成员分别设置限额。仅当调用方 API Key 同时包含该团队绑定和成员绑定时,该预算才适用。
标签预算计入解析出的标签包含其 key=value 的每个请求,无论该值来自调用方 API Key、其团队还是其成员。详见请求如何解析标签和按标签设置预算。
如果团队或成员预算计入了意外流量,请检查到达网关的调用方 API Key 上的绑定,以及这些绑定是否在当前周期内变更过。绑定变更前已计入的支出仍归属原来的绑定,详见支出如何计入。
示例:一名成员属于两个团队
假设 Alice 同时属于 frontend 和 data 团队,并使用三个调用方 API Key:
| 密钥 | 团队绑定 | 成员绑定 |
|---|---|---|
K1 | frontend | Alice |
K2 | data | Alice |
K3 | 无 | Alice |
该组织配置了以下月度预算:
- Alice 拥有 300 美元的成员预算。由于三个密钥都绑定到 Alice,
K1、K2和K3的支出都会计入这个组织级限额。 frontend团队拥有 1,000 美元的共享预算。绑定到frontend的每个密钥的支出都会计入,包括K1、绑定到其他成员的密钥以及未绑定到任何成员的密钥。frontend中的每个成员拥有 100 美元的限额。只有K1会计入 Alice 的限额,因为它同时包含 Alice 的成员绑定和frontend团队绑定。其他每个成员都会获得独立的 100 美元限额。
通过 K2 发送的流量不会计入任何 frontend 预算。虽然 Alice 属于两个团队,但由于 K3 没有团队绑定,它不会计入团队预算。
通过 K1 发送的请求会检查每个匹配的预算,包括 frontend 团队预算、Alice 的成员预算、她在 frontend 中的成员限额,以及任何匹配的组织、环境、调用方 API Key 或服务提供方密钥预算。任何达到限额的匹配阻断型预算都会拒绝该请求。
支出如何计入
控制面以增量方式计入支出。网关上报请求的用量后几秒内,该请求的成本会计入它适用的每个预算,包括匹配的组织、环境、调用方 API Key、服务提供方密钥、团队、成员、团队中每个成员以及标签的预算。
计入的是请求记录的成本,计算方式见模型定价:它已体现模型组价格、价格分档和低峰折扣;由响应缓存应答的请求不计入任何支出。
请求的归属在其成本被计入时确定,依据的是当时生效的绑定:调用方 API Key 的团队和成员绑定、模型的服务提供方密钥,以及环境所属的组织。标签预算例外:它计入网关在请求运行时记录在用量上的标签,因此之后的标签变更不会移动已记录的支出。已计入的支出会留在原归属中。以下变更不会改变当前周期已计入的支出,只有之后的请求才会按新绑定计入:
- 将调用方 API Key 改绑到其他团队或成员。
- 将模型改到其他服务提供方密钥。
- 删除调用方 API Key、成员、团队或环境。
- 移除超出组织用量数据保留窗口的用量记录。
例如,某个 Key 从 frontend 团队改绑到 data 团队后,它此前请求的支出仍留在 frontend 团队预算中。该 Key 之后的请求会计入 data 团队预算,也不再受 frontend 预算检查。
新预算并不从零开始。创建预算,或更改预算的目标或周期时,预算会以其目标在当前周期内已记录的支出作为起点,并按当前绑定归属;之后再以增量方式计入新的支出。
每个周期都从零开始。属于上一周期、但上报较晚的请求用量不会被计入。