GPT Python SDK引入了巨大开销/超时不正确
我之前一直在用 openai 的 Python 包 v0.28.1,里面有一个叫 requests_timeout
的参数,使用起来还不错。后来我把它更新到了 ^1.0 版本,结果发现这个超时设置不再按预期工作了(因为他们把参数名从 requests_timeout
改成了 timeout
)。
现在最新版本(1.14.1)有个奇怪的表现:
from openai import OpenAI, APITimeoutError
import os
client = OpenAI(
api_key=os.environ['OPENAI_API_KEY'],
)
for timeout in [0.001, 0.1, 1, 2]:
with log_duration('openai query') as duration_context:
try:
response = client.chat.completions.create( # type: ignore[call-overload]
model="gpt-4-0125-preview",
messages=[{'content': 'describe the universe in 10000 characters', 'role': 'system'}],
temperature=0.0,
max_tokens=450,
top_p=1,
timeout=timeout
)
except APITimeoutError as e:
continue
log_duration 只是用来测量时间的。结果是:
2024-03-20 14:59:19 [info ] openai query duration=2.805093 duration=2.8050930500030518 name=openai query
2024-03-20 14:59:22 [info ] openai query duration=2.844164 duration=2.8441641330718994 name=openai query
2024-03-20 14:59:29 [info ] openai query duration=6.396946 duration=6.396945953369141 name=openai query
2024-03-20 14:59:38 [info ] openai query duration=9.387082 duration=9.387081861495972 name=openai query
这个时间远远超过了设置的超时时间。我们在使用 lambda 函数时遇到了很多超时的问题,但不知道为什么,因为 openai 的超时时间应该要低得多。
我漏掉了什么吗?在 OpenAI 的 >1 版本 Python SDK 中真的有这么大的开销吗?
1 个回答
1
默认情况下,超时的请求会被重试两次,并且每次重试之间会有一点延迟,这种延迟是逐渐增加的。
你可以使用 max_retries
这个选项来设置重试的次数或者关闭重试功能:
from openai import OpenAI
# Configure the default for all requests:
client = OpenAI(
# default is 2
max_retries=0,
)
# Or, configure per-request:
client.with_options(max_retries=5).chat.completions.create(
messages=[
{
"role": "user",
"content": "How can I get the name of the current day in Node.js?",
}
],
model="gpt-3.5-turbo",
)