你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

限制大语言模型 API 令牌使用

适用于:开发人员 | 基本 | 基本 v2 | 标准 | 标准 v2 | 高级

llm-token-limit 策略通过将 LLM 令牌的消耗限制为每分钟指定数目来阻止每个密钥的大语言模型 (LLM) API 使用量达到峰值。 超过令牌使用量时,调用方会收到429 Too Many Requests响应状态代码。

通过依赖从 LLM 终结点返回的令牌使用量指标,该策略可以实时准确监视和强制实施限制。 借助该策略,API 管理可以预先计算提示令牌数,从而在已超出限制后最大程度地减少对 LLM 后端的不必要请求。

注意

此策略目前为预览版。

注意

按照策略声明中提供的顺序设置策略的元素和子元素。 详细了解如何设置或编辑 API 管理策略

支持的模型

将该策略与添加到 Azure API 管理的 LLM API(通过 Azure AI 模型推理 API 提供)配合使用。

策略语句

<llm-token-limit counter-key="key value"
        tokens-per-minute="number"
        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-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" />

属性

属性 说明 需要 默认
counter-key 用于令牌限制策略的密钥。 对于每个键值,单个计数器用于配置策略的所有范围。 允许使用策略表达式。 空值
tokens-per-minute 每分钟提示和完成消耗的最大令牌数。 空值
estimate-prompt-tokens 确定是否估算提示所需的令牌数的布尔值:
- true:根据 API 中的提示架构估算令牌数;可能会降低性能。
- false:不要估算提示令牌。

当设置为 false 时,每个 counter-key 的剩余令牌将根据模型响应中的实际令牌使用情况来计算。 这可能导致向模型发送超出令牌限制的提示。 在这种情况下,会在响应中检测到它,所有后续请求会被策略阻止,直到令牌限制再次被取消。
空值
retry-after-header-name 自定义响应头的名称,其值为在超过指定的tokens-per-minute后建议的重试间隔(以秒为单位)。 不允许使用策略表达式。 Retry-After
retry-after-variable-name 变量的名称,该变量用于存储在超过指定的tokens-per-minute后建议的重试间隔(以秒为单位)。 不允许使用策略表达式。 空值
remaining-tokens-header-name 响应头的名称,每次执行策略后,其值为时间间隔允许的剩余令牌数。 不允许使用策略表达式。 空值
remaining-tokens-variable-name 变量的名称,该变量用于存储在每次执行策略后,时间间隔允许的剩余令牌数。 不允许使用策略表达式。 空值
tokens-consumed-header-name 响应标头的名称,其值为提示和完成使用的令牌数。 只有当从后端收到响应后,才会将标头添加到响应。 不允许使用策略表达式。 空值
tokens-consumed-variable-name 如果estimate-prompt-tokenstrue,则变量在管道的backend部分中初始化为估算的令牌数,否则为零。 在outbound部分收到响应时,该变量会随报告的计数一起更新。 空值

使用情况

使用注意事项

  • 每个策略定义可以多次使用此策略。
  • 如果可以将 estimate-prompt-tokens 设置为 false,则使用来自 LLM API 的响应的使用情况部分中的值来确定令牌使用情况。
  • 某些 LLM 终结点支持流式传输响应。 如果在 API 请求中将 stream 设为 true 来启用流式处理,则无论 estimate-prompt-tokens 属性的值如何,都始终会估算提示令牌。
  • API 管理对策略中指定的每个 counter-key 值使用单个计数器。 在策略配置了此键值的所有作用域中,计数器都会更新。 如果要在不同的作用域(例如,特定 API 或产品)配置单独的计数器,请在不同的作用域指定不同的键值。 例如,将标识作用域的字符串追加到表达式的值。

示例

在下面的示例中,令牌限制为每分钟 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>

有关使用策略的详细信息,请参阅: