限制大型語言模型 API 權杖使用方式

適用於:開發人員 |基本 |基本 v2 |標準 |標準 v2 |Premium |進階 v2

此 llm-token-limit 原則會藉由將語言模型令牌的耗用量限製為指定的速率(每分鐘數)、指定期間內的配額,或兩者,以防止每個密鑰上的大型語言模型 (LLM) API 使用量尖峰。 超過指定的令牌速率限制時,呼叫端會收到 429 Too Many Requests 響應狀態代碼。 超過指定的配額時,呼叫端會收到 403 Forbidden 響應狀態代碼。

注意

請依照原則陳述式中提供的順序,來設定原則的元素和子元素。 深入了解如何設定或編輯 APIM 原則。

支援的模型 API

此政策適用於加入 API 管理且符合以下 API 架構之一的 LLM API:

  • OpenAI 聊天完成或回應 API
  • Anthropic Messages API(目前支援於 API Management v2 層級)
  • Google 頂點 AI API

原則陳述式

<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" />

屬性

屬性 描述 是必要欄位 預設
counter-key 用於權杖限制原則的金鑰。 針對每個索引鍵值,會針對原則設定的所有範圍使用單一計數器。 允許使用原則運算式。 是的 N/A
token-per-minute 提示和完成每分鐘所取用的權杖數目上限。 必須指定速率限制 (tokens-per-minute)、配額 (token-quota 超過 ), token-quota-period或兩者。 N/A
token-quota 在 中指定的 token-quota-period時間間隔期間允許的令牌數目上限。 允許使用原則運算式。 必須指定速率限制 (tokens-per-minute)、配額 (token-quota 超過 ), token-quota-period或兩者。 N/A
token-quota-period 固定窗口的長度,之後會 token-quota 重設。 這個值必須是下列其中一項:Hourly、DailyWeeklyMonthlyYearly 。 配額週期的開始時間會計算為 UTC 時間戳截斷為期間所使用的單位(小時、日等)。 允許使用原則運算式。 必須指定速率限制 (tokens-per-minute)、配額 (token-quota 超過 ), token-quota-period或兩者。 N/A
estimate-prompt-tokens 布林值,用以判斷是否要估計提示所需權杖數目:
- true:根據 API 中的提示結構提前估算提示標記。
- false:不要估算提示代幣;使用模型回應中的實際代幣使用情況。

關於標記計數與估計行為,請參見「 標記計數與估計的考量」。
是的 N/A
retry-after-header-name 自定義響應標頭的名稱,其值在指定或tokens-per-minute超過之後token-quota的秒內為建議的重試間隔。 不允許使用原則運算式。 否 Retry-After
retry-after-variable-name 變數的名稱,這個變數會將建議的重試間隔儲存在指定 tokens-per-minute 或 token-quota 超過后的秒內。 不允許使用原則運算式。 否 N/A
remaining-quota-tokens-header-name 回應標頭的名稱,其值在每次執行原則之後,是對應 token-quota 於 允許 token-quota-period的剩餘權杖數目的預估數目。 不允許使用原則運算式。 否 N/A
remaining-quota-tokens-variable-name 變數的名稱,在每次執行原則之後,儲存對應 token-quota 於 允許 token-quota-period的剩餘權杖預估數目。 不允許使用原則運算式。 否 N/A
remaining-tokens-header-name 響應標頭的名稱,其每個原則執行之後的值都是時間間隔所允許的剩餘令牌 tokens-per-minute 數目。 不允許使用原則運算式。 否 N/A
remaining-tokens-variable-name 每個原則執行之後的變數名稱會儲存時間間隔 tokens-per-minute 所允許的剩餘令牌數目。 不允許使用原則運算式。 否 N/A
tokens-consumed-header-name 回應標頭的名稱,其值為提示和完成所取用的權杖數目。 只有在從後端收到回應之後,才會將標頭新增至回應。 不允許使用原則運算式。 否 N/A
tokens-consumed-variable-name 該段中初始化為估計提示代幣數量backend的變數名稱(若為 則estimate-prompt-tokens為零false),並更新為該區段實際報告的標記數outbound。 否 N/A

使用方式

使用注意事項

  • 每個原則定義可以使用此原則多次。
  • 此政策可在透過入口網站新增 LLM API 時選擇性設定。
  • 或remaining-quota-tokens-variable-name的remaining-quota-tokens-header-name價值為估計值,可能高於實際代幣消費量的預期。 欲了解更多資訊,請參閱 代幣計數與估算的考量。
  • APIM 會針對您在原則中指定的每個 counter-key 值使用單一計數器。 計數器會在使用該索引鍵值設定原則的所有範圍內更新。。 如果您想要在不同的範圍設定不同的計數器 (例如特定 API 或產品),請在不同的範圍指定不同的索引鍵值。 例如,將識別範圍的字串附加至運算式的值。
  • v2 層級使用 代幣桶演算法 來限制速率,這與經典層級的 滑動視窗演算法 不同。 基於此實作差異,當你在多個範圍內 counter-key設定 v2 層級的 token 限制時,請確保 tokens-per-minute 所有政策實例的值一致。 數值不一致會導致行為變得不可預測。 更多資訊請參見 Advanced request throttling with Azure 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-nameremaining-quota-tokens-header-name可能高於預期,且隨著配額接近而更準確。

範例

令牌速率限制

在下列範例中,呼叫端IP位址會以每分鐘5000的令牌速率限制為索引鍵。 此原則不會估計提示所需的權杖數目。 在每個原則執行之後,時間週期內該呼叫者 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 的令牌配額會依訂用帳戶標識碼進行密鑰,並每月重設。 在每個原則執行之後,該訂用帳戶標識碼所允許的剩餘令牌數目會儲存在變數 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>

如需使用原則的詳細資訊,請參閱: