概述
什么是速率限制?
速率限制是 API 对用户或客户端在指定时间段内可以访问服务器的次数施加的限制。
为什么我们有速率限制?
速率限制是 API 的常见做法,它们的实施有几个不同的原因:
它们有助于防止滥用或误用 API。例如,恶意行为者可能会向 API 发送大量请求,以试图使其过载或导致服务中断。通过设置速率限制,OpenAI 可以防止此类活动。
速率限制有助于确保每个人都能公平地访问 API。如果一个人或组织发出过多的请求,可能会使其他人的 API 陷入困境。通过限制单个用户可以发出的请求数量,OpenAI 确保大多数人有机会使用 API 而不会遇到速度下降的情况。
速率限制可以帮助 OpenAI 管理其基础设施上的聚合负载。如果对 API 的请求急剧增加,可能会对服务器造成负担并导致性能问题。通过设置速率限制,OpenAI 可以帮助为所有用户保持流畅和一致的体验。
速率限制如何工作?
如果您的速率限制是每分钟 60 个请求和davinci每分钟 150k 个令牌,您将受到限制,要么达到请求/分钟上限,要么用完令牌——以先发生者为准。例如,如果您的最大请求数/分钟为 60,则您应该能够每秒发送 1 个请求。如果您每 800 毫秒发送 1 个请求,一旦达到速率限制,您只需让程序休眠 200 毫秒即可再发送一个请求,否则后续请求将失败。默认值为 3,000 个请求/分钟,客户可以有效地每 20 毫秒或每 .02 秒发送 1 个请求。
如果我遇到速率限制错误会怎样?
速率限制错误如下所示:
组织 org-{id} 中每分钟请求的 default-text-davinci-002 达到速率限制。限制:20.000000/分钟。电流:24.000000/分钟。
如果您达到速率限制,这意味着您在短时间内发出了太多请求,并且 API 将拒绝满足进一步的请求,直到经过指定的时间量。
错误缓解
我可以采取哪些措施来缓解这种情况?
OpenAI Cookbook 有一个python 笔记本,详细解释了如何避免速率限制错误。
在提供编程访问、批量处理功能和自动社交媒体发布时,您还应该谨慎行事 - 考虑只为受信任的客户启用这些功能。
为防止自动和大量滥用,请在指定时间范围内(每天、每周或每月)为单个用户设置使用限制。考虑对超出限制的用户实施硬上限或人工审查流程。
使用指数退避重试
避免速率限制错误的一种简单方法是使用随机指数退避自动重试请求。使用指数退避重试意味着在遇到速率限制错误时执行短暂的休眠,然后重试不成功的请求。如果请求仍然不成功,则增加睡眠时间并重复该过程。这一直持续到请求成功或达到最大重试次数为止。这种方法有很多好处:
自动重试意味着您可以从速率限制错误中恢复而不会崩溃或丢失数据
指数退避意味着您可以快速尝试第一次重试,同时如果您的前几次重试失败,仍然可以从更长的延迟中获益
将随机抖动添加到延迟有助于重试所有同时命中。
请注意,不成功的请求会影响您的每分钟限制,因此不断重新发送请求将不起作用。
官方详细文档:https://platform.openai.com/docs/guides/rate-limits/error-mitigation