限制 Azure OpenAI API 權杖使用量
適用於:開發人員 |基本 |基本 v2 |標準 |標準 v2 |Premium |進階 v2
azure-openai-token-limit
原則可藉由將語言模型權杖的取用限制為每分鐘的指定數目,以防止每個金鑰的 Azure OpenAI 服務 API 使用量高峰。 超出權杖使用量時,呼叫端會收到 429 Too Many Requests
回應狀態碼。
藉由依賴從 OpenAI 端點傳回的權杖使用計量,此原則可以即時準確地監視並強制執行限制。 此原則也允許 API 管理預先計算提示權杖,如果已超過限制,則會使對 OpenAI 後端的不必要要求降至最低。
注意
請依照原則陳述式中提供的順序,來設定原則的元素和子元素。 深入了解如何設定或編輯 APIM 原則。
支援的 Azure OpenAI 服務模型
此原則會與從 Azure OpenAI 服務新增至 API 管理的 API 搭配使用,API 類型如下:
API 類型 | 支援的模型 |
---|---|
聊天完成 | gpt-3.5 gpt-4 |
Completion | gpt-3.5-turbo-instruct |
Embeddings | text-embedding-3-large text-embedding-3-small text-embedding-ada-002 |
如需詳細資訊,請參閱 Azure OpenAI 服務模型。
原則陳述式
<azure-openai-token-limit counter-key="key value"
tokens-per-minute="number"
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-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 | 用於權杖限制原則的金鑰。 針對每個索引鍵值,會針對原則設定的所有範圍使用單一計數器。 允許使用原則運算式。 | Yes | N/A |
tokens-per-minute | 提示和完成每分鐘所取用的權杖數目上限。 | Yes | N/A |
estimate-prompt-tokens | 布林值,用以判斷是否要估計提示所需權杖數目: - true :根據 API 中的提示結構描述估計權杖數目;可能降低效能。 - false :不要估計提示權杖。 當設定為 false 時,系統會使用模型回應中的實際權杖使用量來計算每個 counter-key 的剩餘權杖。 這可能會導致提示傳送至超過權杖限制的模型。 在這種情況下,系統會在回應中偵測到此情況,且原則會封鎖所有成功的要求,直到權杖限制再次釋出為止。 |
Yes | N/A |
retry-after-header-name | 自訂回應標頭的名稱,其值是超過指定 tokens-per-minute 之後,以秒為單位的建議重試間隔。 不允許使用原則運算式。 |
No | Retry-After |
retry-after-variable-name | 超過指定 tokens-per-minute 之後,以秒為單位儲存建議重試間隔的變數名稱。 不允許使用原則運算式。 |
No | N/A |
remaining-tokens-header-name | 回應標頭的名稱,每個原則執行之後的值都是針對時間間隔允許的剩餘權杖數目。 不允許使用原則運算式。 | No | N/A |
remaining-tokens-variable-name | 變數的名稱,每個原則執行之後的變數都是針對時間間隔允許的剩餘權杖數目。 不允許使用原則運算式。 | No | N/A |
tokens-consumed-header-name | 回應標頭的名稱,其值為提示和完成所取用的權杖數目。 只有在從後端收到回應之後,才會將標頭新增至回應。 不允許使用原則運算式。 | No | N/A |
tokens-consumed-variable-name | 變數的名稱,如果 estimate-prompt-tokens 為 true ,該變數會在管線的 backend 區段中初始化為提示中的預估權杖數目,否則為零。 變數會在收到 outbound 區段中的回應時,以回報的計數進行更新。 |
No | N/A |
使用方式
使用注意事項
- 每個原則定義可以使用此原則多次。
- 使用入口網站從 Azure OpenAI 服務新增 API 時,可以選擇性地設定此原則。
- 當
estimate-prompt-tokens
設定為false
時,會使用 Azure OpenAI 服務 API 回應使用量區段中的值來判斷權杖使用量。 - 某些 Azure OpenAI 端點支持回應串流。 當 API 要求中
stream
設定為true
以啟用串流時,不論estimate-prompt-tokens
屬性的值為何,系統一律會估計提示權杖。 當回應經過串流處理時,也會預估完成權杖。 - APIM 會針對您在原則中指定的每個
counter-key
值使用單一計數器。 計數器會在使用該索引鍵值設定原則的所有範圍內更新。。 如果您想要在不同的範圍設定不同的計數器 (例如特定 API 或產品),請在不同的範圍指定不同的索引鍵值。 例如,將識別範圍的字串附加至運算式的值。
範例
在下列範例中,權杖限制為每分鐘 5000 個,並由呼叫端 IP 位址當作索引鍵。 此原則不會估計提示所需的權杖數目。 在每個原則執行之後,時間週期內該呼叫者 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>
相關原則
相關內容
如需使用原則的詳細資訊,請參閱:
- 教學課程:轉換及保護 API
- 原則參考,取得原則陳述式及其設定的完整清單
- 原則運算式
- 設定或編輯原則
- 重複使用原則設定
- 原則程式碼片段存放庫 (英文)
- Azure API 管理 原則工具組
- 使用 Microsoft Azure Copilot 撰寫原則