Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
该 llm-token-limit 策略通过将语言模型令牌的使用限制为指定速率(每分钟数)、指定时间段内或两者中的配额,来防止每个密钥的大规模语言模型(LLM)API 使用率峰值。 超过指定的令牌速率限制后,调用方会收到 429 Too Many Requests 响应状态代码。 超过指定的配额后,调用方会收到 403 Forbidden 响应状态代码。
注释
按照策略声明中提供的顺序设置策略的元素和子元素。 详细了解 如何设置或编辑API Management策略。
支持的模型 API
此策略适用于添加到符合以下 API 架构之一的 API 管理的 LLM API:
- OpenAI 聊天补全或响应 API
- Anthropic 消息 API (目前在 API 管理 v2 版本中受支持)
政策声明
<llm-token-limit counter-key="key value"
tokens-per-minute="number"
token-quota="number"
token-quota-period="Hourly | Daily | Weekly | Monthly | Yearly"
estimate-prompt-tokens="true | false"
retry-after-header-name="custom header name, replaces default 'Retry-After'"
retry-after-variable-name="policy expression variable name"
remaining-quota-tokens-header-name="header name"
remaining-quota-tokens-variable-name="policy expression variable name"
remaining-tokens-header-name="header name"
remaining-tokens-variable-name="policy expression variable name"
tokens-consumed-header-name="header name"
tokens-consumed-variable-name="policy expression variable name" />
特性
| Attribute | Description | 必选 | 违约 |
|---|---|---|---|
| counter-key | 用于令牌限制策略的密钥。 对于每个键值,单个计数器用于配置策略的所有范围。 允许使用策略表达式。 | 是的 | 不适用 |
| token-per-minute | 每分钟提示和完成消耗的最大令牌数。 | 必须指定速率限制(tokens-per-minute)、配额(token-quota 超过一个 token-quota-period)或两者。 |
不适用 |
| token-quota | 在指定的时间间隔内 token-quota-period允许的最大令牌数。 允许使用策略表达式。 |
必须指定速率限制(tokens-per-minute)、配额(token-quota 超过一个 token-quota-period)或两者。 |
不适用 |
| token-quota-period | 在其中重置的固定窗口 token-quota 的长度。 该值必须是下列值之一:Hourly、Daily、Weekly、MonthlyYearly。 配额周期的开始时间计算为截断到该时间段所用的单位(小时、天等)的 UTC 时间戳。 允许使用策略表达式。 |
必须指定速率限制(tokens-per-minute)、配额(token-quota 超过一个 token-quota-period)或两者。 |
不适用 |
| estimate-prompt-tokens | 确定是否估算提示所需的令牌数的布尔值: - true:根据 API 中的提示架构提前估算提示令牌。 - false:不估计提示令牌;使用模型响应中的实际令牌使用情况。 有关令牌计数和估计行为,请参阅 令牌计数和估计的注意事项。 |
是的 | 不适用 |
| retry-after-header-name | 自定义响应标头的名称,其值是指定或tokens-per-minute超出指定token-quota或超出后建议的重试间隔(以秒为单位)。 不允许使用策略表达式。 |
否 | Retry-After |
| retry-after-variable-name | 一个变量的名称,该变量存储建议的重试间隔(以秒为单位指定或tokens-per-minutetoken-quota超出)。 不允许使用策略表达式。 |
否 | 不适用 |
| remaining-quota-tokens-header-name | 响应标头的名称,其每个策略执行后的值是对应于允许的token-quota剩余令牌token-quota-period的估计数目。 不允许使用策略表达式。 |
否 | 不适用 |
| remaining-quota-tokens-variable-name | 每个策略执行之后的变量的名称存储与 token-quota 允许的 token-quota-period剩余令牌的估计数目。 不允许使用策略表达式。 |
否 | 不适用 |
| remaining-tokens-header-name | 响应标头的名称,其每个策略执行后的值是时间间隔所允许的剩余令牌 tokens-per-minute 数。 不允许使用策略表达式。 |
否 | 不适用 |
| remaining-tokens-variable-name | 每个策略执行后存储时间间隔所允许的剩余令牌 tokens-per-minute 数的变量的名称。 不允许使用策略表达式。 |
否 | 不适用 |
| tokens-consumed-header-name | 响应标头的名称,其值为提示和完成使用的令牌数。 只有当从后端收到响应后,才会将标头添加到响应。 不允许使用策略表达式。 | 否 | 不适用 |
| tokens-consumed-variable-name | 初始化为节中 backend 估计的提示令牌计数的变量的名称(如果 estimate-prompt-tokens 为 false零),使用节中 outbound 的实际报告计数进行更新。 |
否 | 不适用 |
用法
使用注意事项
- 每个策略定义可以多次使用此策略。
- 该策略可选择在通过门户添加LLM API时进行配置。
- 值或
remaining-quota-tokens-variable-name是估计值remaining-quota-tokens-header-name,根据实际令牌消耗量可能大于预期值。 有关详细信息,请参阅 令牌计数和估计注意事项。 - API Management对策略中指定的每个
counter-key值使用单个计数器。 在策略配置了此键值的所有作用域中,计数器都会更新。 如果要在不同的作用域(例如,特定 API 或产品)配置单独的计数器,请在不同的作用域指定不同的键值。 例如,将标识作用域的字符串追加到表达式的值。 - 此策略在应用令牌的每个网关上独立跟踪令牌使用情况,包括多区域部署中的工作区网关和区域网关。 它不会在整个实例中聚合令牌计数。
令牌计数和估计的注意事项
策略使用 LLM 终结点返回的实际令牌使用情况数据监视并强制实施令牌限制。 可以选择启用提示令牌估算以减少不必要的后端请求。 以下注意事项适用。
- 令牌类型:策略当前仅对提示和完成令牌进行计数。
-
如果没有提示令牌估计 (
estimate-prompt-tokens="false"):策略使用 LLM API 响应部分中的实际令牌使用值usage。 即使超出限制,也可能会向后端发送提示;从响应中检测到此情况,之后会阻止后续请求,直到限制重置为止。 -
使用提示令牌估计 (
estimate-prompt-tokens="true"):策略在发送请求之前会从 API 定义中的提示架构估算提示令牌。 这可以减少超出限制时不必要的后端请求,但可能会降低性能。 -
流式处理:在 API 请求
stream: true()中启用流式处理时,无论设置如何estimate-prompt-tokens,始终估计提示令牌。 当响应被流式传输时,将同时估计补全标记。 -
映像输入:对于接受映像输入的模型,映像令牌通常由后端 LLM 计数,并包含在限制和配额计算中。 但是,启用或
estimate-prompt-tokens设置为true流式处理时,策略会将每个映像的计数上限为 1200 个令牌。 - 并发:由于在从后端接收响应之前,无法确定使用的令牌的确切数量,因此并发或近并发请求可以暂时超过配置的令牌限制。 处理响应并超出限制后,将阻止后续请求,直到限制重置为止。
-
剩余配额准确性:根据实际令牌消耗,
remaining-quota-tokens-variable-name返回的估计剩余令牌配额或remaining-quota-tokens-header-name可能大于预期,并且随着配额的临近而变得更加准确。
例子
令牌速率限制
在以下示例中,令牌速率限制为每分钟 5000 个,由调用方 IP 地址进行密钥处理。 策略不会估算提示所需的令牌数。 每次执行策略后,在该时间段内允许用于此调用方 IP 地址的剩余令牌存储在变量 remainingTokens 中。
<policies>
<inbound>
<base />
<llm-token-limit
counter-key="@(context.Request.IpAddress)"
tokens-per-minute="5000" estimate-prompt-tokens="false" remaining-tokens-variable-name="remainingTokens" />
</inbound>
<outbound>
<base />
</outbound>
</policies>
令牌配额
在以下示例中,令牌配额为 10000 由订阅 ID 进行密钥,每月重置。 执行每个策略后,该时间段内该订阅 ID 允许的剩余令牌数存储在变量 remainingQuotaTokens中。
<policies>
<inbound>
<base />
<llm-token-limit
counter-key="@(context.Subscription.Id)"
token-quota="100000" token-quota-period="Monthly" remaining-quota-tokens-variable-name="remainingQuotaTokens" />
</inbound>
<outbound>
<base />
</outbound>
</policies>
相关策略
相关内容
若要详细了解如何使用策略,请参阅:
- 教程:转换和保护 API
- 策略参考,其中提供了策略语句及其设置的完整列表
- 策略表达式
- 设置或编辑策略
- 重复使用策略配置
- Policy 代码片段存储库
- 策略示例存储库
- Azure API 管理策略工具包