速率限制错误(“Too Many Requests”、“Rate limit reached”)是由于达到你所在组织的速率限制而导致的;速率限制是指每分钟可提交的请求和 Token 的最大数量。如果达到该限制,在速率限制重置之前,该组织将无法成功提交请求。错误消息如下所示:
组织 org-exampleorgid123 中 gpt-3.5-turbo 的每分钟 Token 数已达到速率限制。
限制:10000.000000 / 分钟。当前:10020.000000 / 分钟。 我们建议使用指数退避来处理这些错误。指数退避是指在遇到速率限制错误时短暂等待,然后重试未成功的请求。如果请求仍未成功,则延长等待时间并重复这一过程。这一过程会持续进行,直到请求成功或达到最大重试次数。
由于未成功的请求也会计入你的每分钟限制,持续重复发送同一请求并不可行。速率限制可能会应用于更短的时间段——例如,在 60 RPM 限制下每秒 1 个请求——这意味着短时间内的大量请求突增也可能导致速率限制错误。指数退避通过拉开请求间隔来降低这些错误发生的频率,因此效果很好。
在 Python 中,指数退避解决方案可能如下所示:
from openai import OpenAI, RateLimitError
import backoff
client = OpenAI()
@backoff.on_exception(backoff.expo, RateLimitError)
def completions_with_backoff(**kwargs):
response = client.completions.create(**kwargs)
return response