速率限制錯誤(「要求過多」、「已達速率限制」)是因為達到貴組織的速率限制而產生,這是每分鐘可提交的請求和 Token 數量上限。如果達到限制,該組織在速率限制重設之前將無法成功提交請求。錯誤訊息如下所示:
gpt-3.5-turbo 在組織 org-exampleorgid123 中已達到每分鐘 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