適用於:開發人員 |基本 |基本 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>
相關原則
相關內容
如需使用原則的詳細資訊,請參閱: