LLM token 政策使用入门

本页面适用于 Apigee,但不适用于 Apigee Hybrid

查看 Apigee Edge 文档。

概览

Apigee 的 LLM token 政策对于控制成本、优化性能和确保平台稳定性至关重要,它利用 LLM token 使用情况和用户提示 token 指标来强制执行限制并提供实时监控。

本文档介绍了如何开始使用以下 LLM token 政策:

  • PromptTokenLimit 政策:通过根据用户提示消息限制 token 来保护目标免遭 token 滥用。PromptTokenLimit 政策就像是 AI 提示的 SpikeArrest。它有助于控制用户提示的令牌使用率,以防止滥用并确保后端服务不会过载。
  • LLMTokenQuota 政策:控制 LLM 支出,并根据 API 产品应用精细的配额管理。借助 LLMTokenQuota 政策,您可以针对 LLM API 在特定时间段(例如每分钟、每小时、每天或每月)内强制执行令牌消耗限制。这对于管理费用和确保 AI 服务的公平使用至关重要。

PromptTokenLimit 政策

如果您想保护后端服务免受用户提示导致的令牌用量突然飙升的影响,请使用 PromptTokenLimit 政策。例如,您可以将每分钟的令牌数量限制为合理数量,以防止单个用户过度使用您的服务。

将此政策添加到 API 代理的请求流程中。

以下 PromptTokenLimit 政策示例将 token 速率限制为每分钟 1,000 个 token:

<PromptTokenLimit continueOnError="false" enabled="true" name="PTL-limitTokens-1">
  <DisplayName>Limit Prompt Tokens</DisplayName>
  <!-- The rate at which to limit tokens. Here, 1,000 per minute -->
  <Rate>1000pm</Rate>
  <!-- Specifies where to get the user's prompt from the request -->
  <UserPromptSource>{jsonPath('$.contents[-1].parts[-1].text',request.content,true)}</UserPromptSource>
</PromptTokenLimit>

其中:

如需了解以下信息,请参阅 PromptTokenLimit 政策参考页面:

在执行以下任务时,在 Apigee 界面中配置 PromptTokenLimit 政策:

LLMTokenQuota 政策

如果您想为不同的 API 产品、开发者或应用设置并强制执行令牌消耗配额,请使用 LLMTokenQuota 政策。例如,您可以为不同的订阅层级提供不同的令牌配额。

该政策主要有两种使用方式:

  • 统计令牌:使用 CountOnly 设置来跟踪令牌使用情况,而不强制执行硬性限制。这对于监控和报告很有用。
  • 强制执行配额:使用 EnforceOnly 设置可在令牌配额超出后拒绝 API 调用。

在请求流程中添加 EnforceOnly 政策,以检查是否超出了配额。向响应流添加 CountOnly 政策,以统计 LLM 响应中使用的 token 数。

以下 LLMTokenQuota 政策示例强制执行每小时 1 万个令牌的配额,并从 API 产品动态获取设置:

<LLMTokenQuota name="Quota-Enforce-Only" type="rollingwindow">
  <EnforceOnly>true</EnforceOnly>
  <!-- The interval and time unit for the quota -->
  <Interval ref="verifyapikey.verify-api-key.apiproduct.developer.llmQuota.interval">1</Interval>
  <TimeUnit ref="verifyapikey.verify-api-key.apiproduct.developer.llmQuota.timeunit">hour</TimeUnit>
  <!-- The number of tokens allowed in the interval -->
  <Allow count="10000" countRef="verifyapikey.verify-api-key.apiproduct.developer.llmQuota.limit"/>
  <!-- Specifies where to get the token usage from the LLM's response -->
  <LLMTokenUsageSource>{jsonPath('$.usageMetadata.candidatesTokenCount',response.content,true)}</LLMTokenUsageSource>
  <!-- Specifies where to get the model name from the LLM's response -->
  <LLMModelSource>{jsonPath('$.model',response.content,true)}</LLMModelSource>
</LLMTokenQuota>

其中:

  • <EnforceOnly>:如果设置为 true,则此元素用于在超出令牌配额后拒绝 API 调用。这样一来,API 提供商就可以严格限制应用在指定时间段内消耗的令牌数量。
  • <Interval>:此元素用于指定计算 LLM 回答中的 token 数量所用的时间间隔。它与 <TimeUnit><Allow> 结合使用,用于定义令牌配额。
  • <TimeUnit>:此元素定义了 <Interval> 的时间单位。有效值包括 minutehourdaymonth
  • <Allow>:此元素定义了 <Interval> 中允许的令牌数量。
  • <LLMTokenUsageSource>:此元素提供 LLM 回答中 token 使用情况数据的来源。它应该是一个消息模板,用于提供令牌使用情况的单个值。
  • <LLMModelSource>:此元素提供 LLM 回答或请求中模型的来源。它应是一个消息模板,提供模型名称的单个值。

如需了解以下信息,请参阅 LLMTokenQuota 政策参考页面:

在 Apigee 界面中配置 LLMTokenQuota 政策,如以下部分所述:

限制

LLM token 政策具有以下限制:

  • LLMTokenQuota 政策限制
    • 该政策目前仅支持基于文本的令牌。
    • 最后一个允许的请求消耗的令牌数可能超过剩余配额。
    • 该政策需要响应载荷中消耗的 LLM 令牌的确切 JSON 路径,无法自动检测到该路径。
    • 目前,每个 SSE 事件都需要元数据。
  • PromptTokenLimit 政策限制
    • 该政策目前仅支持基于文本的令牌。
    • 该政策使用标准库来统计 token,这可能与某些 LLM 提供商统计 token 的方式不同。
    • 该政策需要提示文本的精确 JSON 路径;它无法动态找到该路径。

另请参阅