適用於:開發人員 |基本 |基本 v2 |標準 |標準 v2 |Premium |進階 v2
此 azure-openai-token-limit
原則會藉由將語言模型令牌的使用量限制為指定的速率(每分鐘數)、指定期間內的配額,或兩者,以防止每個密鑰的 Azure OpenAI 服務 API 使用量尖峰。 超過指定的令牌速率限制時,呼叫端會收到 429 Too Many Requests
響應狀態代碼。 超過指定的配額時,呼叫端會收到 403 Forbidden
響應狀態代碼。
藉由依賴從 OpenAI 端點傳回的權杖使用計量,此原則可以即時準確地監視並強制執行限制。 此原則也允許 API 管理預先計算提示權杖,如果已超過限制,則會使對 OpenAI 後端的不必要要求降至最低。
注意
請依照原則陳述式中提供的順序,來設定原則的元素和子元素。 深入了解如何設定或編輯 APIM 原則。
支援的 Azure OpenAI 服務模型
此原則會與從 Azure OpenAI 服務新增至 API 管理的 API 搭配使用,API 類型如下:
API 類型 | 支援的模型 |
---|---|
聊天完成 | gpt-3.5 gpt-4 gpt-4o gpt-4o-mini o1 o3 |
嵌入技術 | text-embedding-3-large text-embedding-3-small text-embedding-ada-002 |
回應 (預覽) |
gpt-4o (版本: 2024-11-20 、 2024-08-06 、 2024-05-13 )gpt-4o-mini (版本: 2024-07-18 )gpt-4.1 (版本: 2025-04-14 )gpt-4.1-nano (版本: 2025-04-14 )gpt-4.1-mini (版本: 2025-04-14 )gpt-image-1 (版本: 2025-04-15 )o3 (版本: 2025-04-16 )o4-mini (版本: '2025-04-16) |
注意
傳統完成 API 僅適用於舊版模型,且支援有限。
如需模型及其功能的目前資訊,請參閱 Azure OpenAI 服務模型。
原則陳述式
<azure-openai-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 、Daily Weekly Monthly Yearly 。 配額期間的開始時間是使用UTC時間戳截斷為期間所使用的單位(小時、日等)。計算。 |
必須指定速率限制 (tokens-per-minute )、配額 (token-quota 超過 ), token-quota-period 或兩者。 |
N/A |
estimate-prompt-tokens | 布林值,用以判斷是否要估計提示所需權杖數目: - true :根據 API 中的提示結構描述估計權杖數目;可能降低效能。 - false :不要估計提示權杖。 當設定為 false 時,系統會使用模型回應中的實際權杖使用量來計算每個 counter-key 的剩餘權杖。 這可能會導致提示傳送至超過權杖限制的模型。 在這種情況下,系統會在回應中偵測到此情況,且原則會封鎖所有成功的要求,直到權杖限制再次釋出為止。 |
是的 | 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 ,該變數會在管線的 true 區段中初始化為提示中的預估權杖數目,否則為零。 變數會在收到 outbound 區段中的回應時,以回報的計數進行更新。 |
否 | N/A |
使用方式
使用注意事項
- 每個原則定義可以使用此原則多次。
- 使用入口網站從 Azure OpenAI 服務新增 API 時,可以選擇性地設定此原則。
- 當
estimate-prompt-tokens
設定為false
時,會使用 Azure OpenAI 服務 API 回應使用量區段中的值來判斷權杖使用量。 - 某些 Azure OpenAI 端點支持回應串流。 當 API 要求中
stream
設定為true
以啟用串流時,不論estimate-prompt-tokens
屬性的值為何,系統一律會估計提示權杖。 當回應經過串流處理時,也會預估完成權杖。 - 對於接受影像輸入的模型,映像令牌通常會由後端語言模型計算,並包含在限制和配額計算中。 不過,使用串流或
estimate-prompt-tokens
設定為true
時,原則目前會將每個影像的計數過度計算為1200個令牌的最大計數。 - APIM 會針對您在原則中指定的每個
counter-key
值使用單一計數器。 計數器會在使用該索引鍵值設定原則的所有範圍內更新。。 如果您想要在不同的範圍設定不同的計數器 (例如特定 API 或產品),請在不同的範圍指定不同的索引鍵值。 例如,將識別範圍的字串附加至運算式的值。 - 此原則會在套用令牌的每個閘道上獨立追蹤令牌使用方式,包括多區域部署中的工作區閘道和區域閘道。 它不會匯總整個實例的令牌計數。
範例
令牌速率限制
在下列範例中,呼叫端IP位址會以每分鐘5000的令牌速率限制為索引鍵。 此原則不會估計提示所需的權杖數目。 在每個原則執行之後,時間週期內該呼叫者 IP 位址允許的其餘權杖會儲存在變數 remainingTokens
中。
<policies>
<inbound>
<base />
<azure-openai-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 />
<azure-openai-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
- 原則參考,取得原則陳述式及其設定的完整清單
- 原則運算式
- 設定或編輯原則
- 重複使用原則設定
- 原則程式碼片段存放庫 (英文)
- 原則遊樂場存放庫
- Azure API 管理 原則工具組
- 取得 Copilot 協助以建立、說明及疑難解答原則