共用方式為


限制 Azure OpenAI API 權杖使用量

適用於:開發人員 |基本 |基本 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-202024-08-062024-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 重設。 這個值必須是下列其中一項:HourlyDailyWeeklyMonthlyYearly 。 配額期間的開始時間是使用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-minutetoken-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 變數的名稱,如果 backendestimate-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>

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