, body: {"error":{"message":"Your requests to dall-e-3 for dall-e-3 in East US h...
🚨 错误信息
🤖 AI解决方案
原文:Your requests to dall-e-3 for dall-e-3 in East US have exceeded the call rate limit for your current OpenAI S0 pricing tier.
译文:您在(美国东部区域)向 dall-e-3 发出的请求已超出当前 OpenAI S0 定价层的调用速率限制。
原因分析
此错误是调用速率限制,根本原因是短时间内向 Azure OpenAI 的 DALL-E 3 API 发送了过多的请求。服务端对每个定价层级(如 S0)都有每分钟/每秒钟的请求上限,本次请求 ImageGenerations_Edit 时触发了这个限制。
解决方案
主要解决方法是实现请求间隔和重试逻辑,避免触发速率限制。
python
import time
import requests
from typing import Optionaldef call_dalle_with_retry(api_endpoint: str, api_key: str, payload: dict, max_retries: int = 3, initial_delay: float = 60.0) -> Optional[dict]:
"""
调用 DALL-E API,并在触发速率限制时自动重试。
"""
headers = {
"api-key": api_key,
"Content-Type": "application/json"
}
delay = initial_delay
for attempt in range(max_retries):
response = requests.post(api_endpoint, headers=headers, json=payload)
if response.status_code == 200:
return response.json()
elif response.status_code == 429: # Rate limit error
error_data = response.json()
if "retry after" in error_data.get("error", {}).get("message", "").lower():
# 尝试从错误信息中提取建议的等待时间
import re
wait_match = re.search(r"after (\d+) seconds", error_data["error"]["message"])
if wait_match:
delay = max(float(wait_match.group(1)), 5.0) # 至少等待5秒
print(f"⚠️ 触发速率限制,第 {attempt + 1} 次重试,等待 {delay} 秒...")
time.sleep(delay)
delay *= 1.5 # 指数退避,增加重试间隔
continue
else:
print(f"❌ 未知的速率限制错误: {error_data}")
break
else:
print(f"❌ API 调用失败 (状态码: {response.status_code}): {response.text}")
break
print("❌ 重试次数已达上限,请求失败。")
return None
使用示例
result = call_dalle_with_retry(
api_endpoint="https://your-resource.openai.azure.com/openai/deployments/dall-e-3/images/generations?api-version=2024-02-15-preview",
api_key="your-api-key",
payload={"prompt": "A cute cat", "size": "1024x1024"}
)
️ 预防措施