【OpenAI中文文档】API#1:如何应对限流(openai的api有使用限制吗)
I. OpenAI API的使用限制
A. 速率限制
1. OpenAI对API的使用速率有限制,以避免滥用和资源消耗过大。[1]
2. 每分钟的要求次数和令牌数都有独立的限制。[4]
B. 其他限制
1. 使用政策和使用限制等方面也对API的使用进行了限制。[2]
2. 不要钱账户和API key也有使用次数限制。[3]
II. 避免API封号风险的方法
A. 遵照OpenAI的唆使
1. 设置API key时要遵守OpenAI的唆使和规定。[3]
2. 遵从相关的使用政策和使用限制。[3]
B. 注意使用频率和调用次数
1. 如果到达每分钟要求次数的限制,可以将任务分批处理来增加吞吐量。[4]
2. 谨慎注意并限制每天的API调用频率,避免逾额要求。[10]
C. 检查API key和代理的使用情况
1. 检查API key会不会被滥用,保护好自己的API key。[13]
2. 避免使用公共反代接口服务,使用安全可靠的代理。[14]
D. 公道分配资源和调剂需求
1. 当出现速度限制时,可以斟酌升级到更高级别的套餐以取得更大的容量和额度。[11]
2. 公道预估需求,避免超越限制,并根据需要调剂API使用量。[6]
通过遵照OpenAI的规定和设置API使用限制,我们可以免API封号风险,并更好地利用OpenAI API的功能。谨慎使用、公道分配资源和注意调用次数是使用OpenAI API的关键。同时,保护好API key,注意使用安全的代理服务也是避免封号风险的重要措施。
openai的api有使用限制吗的进一步展开说明
如何避免和应对OpenAI API的限流毛病
OpenAI API的使用可能会遇到限流毛病,如”429: ‘Too Many Requests'”或”RateLimitError”。这意味着你的要求超过了API的流量限制。在本文中,我将分享一些技能,帮助你避免和应对与限流相关的毛病。
为何要进行流量限制
流量限制是API使用中的常见操作,其斟酌因素以下:
首先,流量限制可以避免API被滥用和歹意使用。如果某个用户发送过量的要求,试图使后台服务超负荷运行,限流措施可以禁止这类活动的产生。
其次,限流措施确保所有用户能够公平访问API。如果某个用户发送了过量的要求,可能会影响其他用户的正常使用。通过限制单个用户的要求数量,OpenAI确保每一个用户都有机会使用API,并避免出现卡顿问题。
最后,流量限制可以帮助管理API在基础设施上的负载。如果API要求突然激增,可能会对服务器造成影响,致使性能问题。通过设置流量限制,OpenAI可以为所有用户提供安稳且一致的体验。
虽然触达流量上限可能会带来不便,但流量限制也为API用户提供了可靠的运行保障。
默许的流量限制
截至2023年1月,OpenAI API的默许流量限制以下:
– 每分钟最多1000个token。一个token大约是一页文本中的1000多个字符。
还有一些建议关于流量限制的资源,推荐浏览OpenAI关于限流的其他内容。
如何避免限流毛病
依照指数回退进行重试
避免限流毛病的一个简单方法是在重试要求时添加指数回退的等待时间。当遇到限流毛病时,可以短暂等待一段时间,然后再重试之前失败的要求。如果要求依然失败,可以逐步延长等待时间,直到成功或到达最大尝试次数。
这类方法有许多好处:
– 自动重试可以从限流毛病中恢复,避免要求崩溃或数据丢失。
– 指数回退意味着初始的重试时间较短,但随着失败次数的增加而逐步延长。
– 在间隔之间添加随机扰动可以同步要求,避免同时发送大量要求。
请注意,即便是失败的要求也会计入每分钟的要求数量,因此延续重复发送要求是没成心义的。
接下来我将分享一些案例。
案例:使用Tenacity库
Tenacity库是一个 Apache 2.0 许可的通用重试库,适用于任何任务。你可使用 Tenacity 库的 retry 装潢器为要求添加指数回退。
下面是使用 Tenacity 库实现指数回退的例子:
“`python
import openai
from tenacity import retry, stop_after_attempt, wait_random_exponential
@retry(wait=wait_random_exponential(min=1, max=60), stop=stop_after_attempt(6))
def completion_with_backoff(**kwargs):
return openai.Completion.create(**kwargs)
completion_with_backoff(model=”text-davinci-002″, prompt=”Once upon a time,”)
“`
请注意,Tenacity 库是第三方工具,OpenAI不保证其可靠性或安全性。
案例:使用backoff库
另外一个可以用于指数回退和重试的库是 backoff。
类似于 Tenacity,backoff 也是第三方工具,OpenAI 不保证其可靠性或安全性。
“`python
import backoff
import openai
@backoff.on_exception(backoff.expo, openai.error.RateLimitError)
def completions_with_backoff(**kwargs):
return openai.Completion.create(**kwargs)
completions_with_backoff(model=”text-davinci-002″, prompt=”Once upon a time,”)
“`
案例:手动实现等待回退
如果你不想使用第三方库,也能够手动实现等待回退逻辑。
下面是一个手动实现等待回退的例子:
“`python
import random
import time
import openai
def retry_with_exponential_backoff(func, initial_delay: float = 1, exponential_base: float = 2, jitter: bool = True, max_retries: int = 10, errors: tuple = (openai.error.RateLimitError,)):
def wrapper(*args, **kwargs):
num_retries = 0
delay = initial_delay
while True:
try:
return func(*args, **kwargs)
except errors as e:
num_retries += 1
if num_retries > max_retries:
raise Exception(f”Maximum number of retries ({max_retries}) exceeded.”)
delay *= exponential_base * (1 + jitter * random.random())
time.sleep(delay)
except Exception as e:
raise e
return wrapper
@retry_with_exponential_backoff
def completions_with_backoff(**kwargs):
return openai.Completion.create(**kwargs)
completions_with_backoff(model=”text-davinci-002″, prompt=”Once upon a time,”)
“`
以上是一些避免限流毛病的方法。
如何最大化批处理吞吐量
如果你处理的是大量数据集,那末吞吐量可能比延迟更重要。除使用指数回退和重试的方法,你还可以采取其他优化方式来增加吞吐量。
首先,你可以主动在要求之间添加延迟。例如,根据你的流量限制,为每一个要求添加一个延迟时间。这样可让你使用完全的流量限制,同时避免触发限流。
其次,如果你触发了每分钟要求次数的限制,但每分钟的 token 数量还有余量,你可以将多个要求合并为一个要求,以增加吞吐量。这样可以在每分钟内处理更多的 token 数量,特别是对小模型。
下面是一个为要求添加延迟的例子:
“`python
import time
import openai
def delayed_completion(delay_in_seconds: float = 1, **kwargs):
time.sleep(delay_in_seconds)
return openai.Completion.create(**kwargs)
rate_limit_per_minute = 20
delay = 60.0 / rate_limit_per_minute
delayed_completion(delay_in_seconds=delay, model=”text-davinci-002″, prompt=”Once upon a time,”)
“`
通过列表或项目符号突出文章中的重点,以上是一些方法来最大化批处理吞吐量的技能。
要求批处理的例子
对批处理要求,你可以将多个任务集中到一个要求中处理,从而提高吞吐量。
下面是一个批处理要求的例子:
“`python
import openai
num_stories = 10
prompts = [“Once upon a time,”] * num_stories
response = openai.Completion.create(model=”curie”, prompt=prompts, max_tokens=20)
stories = [“”] * len(prompts)
for choice in response.choices:
stories[choice.index] = prompts[choice.index] + choice.text
for story in stories:
print(story)
“`
在批处理要求中,要求任务被集中在一个 API 调用中,这样可以最大化吞吐量。但需要注意的是,响应对象不保证依照提示词的顺序返回,因此需要使用索引字段将响应和相应的提示词进行匹配。
并行处理脚本样例
我们提供了一个并行处理大量 API 要求的样例脚本 api_request_parallel_processor.py。
这个脚本具有以下功能:
– 从文件中流式创建要求,避免内存耗尽。
– 并行发起要求,最大化吞吐量。
– 控制要求数量和 token 数量,保持在流量限制范围内。
– 重试失败的要求,避免数据丢失。
– 记录毛病日志以便追踪要求中的问题。
这个脚本可以直接使用,你也能够根据需要进行修改以满足自己的需求。
openai的api有使用限制吗的常见问答Q&A
问题1:OpenAI API的速率限制是甚么?
答案:OpenAI API的速率限制是指在使用OpenAI API时,对用户或客户端在特定时间段内可以访问服务器的次数施加的限制。
- 具体解释和例子。OpenAI API对每一个用户或客户真个要求次数和令牌数都有限制。例如,不要钱试用用户的速率限制为每分钟20个要求和150,000个令牌。如果用户到达了每分钟的要求次数限制,但仍有可用的令牌容量,用户可以将多个任务分批处理到每一个要求中,以提高吞吐量。
- 其他相关信息。速率限制的目的是确保大多数用户有机会使用API而不会遇到速度降落的情况。另外,速率限制也有助于管理OpenAI的基础设施上的聚合。
问题2:如何避免OpenAI API被封号?
答案:为了不OpenAI API被封号,以下是一些建议:
- 遵守OpenAI的唆使和使用条款,并设置API key以限制API访问权限。
- 避免违背OpenAI的使用策略和使用限制,如限制接口调用次数和关键词使用次数。
- 熟知OpenAI的策略和支持区域等细节信息,确保在合规的范围内使用API。
- 注意速率限制,不要发送逾额的要求,以避免影响其他用户的正常使用。
- 检查API key会不会被滥用,避免将API key泄漏给未经授权的人员。
- 避免使用公共反代接口服务,以避免触碰OpenAI的使用策略。
问题3:OpenAI API的速率限制在哪些方面起作用?
答案:OpenAI API的速率限制在以下方面起作用:
- 每分钟的要求次数限制:限制每一个用户或客户端每分钟可以发送的API要求的次数。
- 每分钟的令牌数限制:如果用户到达了每分钟的要求次数限制,但仍有可用的令牌容量,则可使用剩余的令牌处理更多任务。
速率限制的设定是为了确保API的可延续使用,并避免滥用和过度消耗资源。