速率限制錯誤(「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