You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:调用OpenAI API出现429状态码问题的解决方法

解决OpenAI API 429状态码超限问题

429状态码表示请求超出了OpenAI的速率限制,即便你已经设置了time.sleep(5),仍有以下几个可能的原因和对应的解决方案:

  • 排查实际调用频率:确认脚本没有被快速重复触发(比如误启动多次、脚本内部存在循环调用)。OpenAI的20RPM限制是基于滚动窗口计算的,并非严格按自然分钟划分,短时间内集中发起请求(比如10秒内发5次)依然可能触发超限。
  • 调整sleep位置:把time.sleep(5)移到请求完成之后,确保两次请求之间间隔5秒。当前代码在请求前sleep,首次请求无间隔,如果连续运行脚本,两次请求的间隔可能不达标。
  • 添加指数退避重试机制:遇到429错误时,不要直接失败,而是根据响应头的Retry-After值等待后重试,或者采用逐步增加等待时间的指数退避策略。修改后的示例代码如下:
import argparse
import os
import requests
import time

parser = argparse.ArgumentParser()
parser.add_argument("prompt", help="The Prompt to send to OpenAI API ")
parser.add_argument("file_name", help="Name of the File")
args = parser.parse_args()

api_endpoints = "https://api.openai.com/v1/completions"
api_key = os.getenv("OPENAI_API_KEY")

request_headers = {
    "Content-Type": "application/json",
    "Authorization": "Bearer " + api_key
}

request_data = {
    "model": "text-davinci-003",
    "prompt": f"Write python script for {args.prompt}. Provide only code, no text",
    "max_tokens": 100,
    "temperature": 0.5
}

max_retries = 3
retry_delay = 5  # 初始等待时间
success = False

for attempt in range(max_retries):
    response = requests.post(api_endpoints, headers=request_headers, json=request_data)
    if response.status_code == 200:
        response_text = response.json()["choices"][0]["text"]
        with open(args.file_name, "w") as file:
            file.write(response_text)
        success = True
        break
    elif response.status_code == 429:
        # 优先使用响应头中的Retry-After值
        retry_after = response.headers.get("Retry-After")
        if retry_after:
            wait_time = int(retry_after)
        else:
            # 指数退避,每次重试等待时间翻倍
            wait_time = retry_delay * (2 ** attempt)
        print(f"Rate limited. Retrying in {wait_time} seconds...")
        time.sleep(wait_time)
    else:
        print(f"Request failed with status code : {str(response.status_code)}")
        break

if not success:
    print("All retry attempts failed.")
  • 确认账号实际配额:登录OpenAI平台查看账号的速率限制详情,免费试用的配额可能存在变动,或账号下其他API调用消耗了额度。
  • 改用OpenAI官方Python库:官方库已内置速率限制处理、重试逻辑,比手动发送请求更稳定。示例代码:
import argparse
import os
from openai import OpenAI

parser = argparse.ArgumentParser()
parser.add_argument("prompt", help="The Prompt to send to OpenAI API ")
parser.add_argument("file_name", help="Name of the File")
args = parser.parse_args()

client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))

response = client.completions.create(
    model="text-davinci-003",
    prompt=f"Write python script for {args.prompt}. Provide only code, no text",
    max_tokens=100,
    temperature=0.5
)

with open(args.file_name, "w") as file:
    file.write(response.choices[0].text)

内容的提问来源于stack exchange,提问作者geet choudhari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 17:08:13