GPT Python SDK引入了巨大开销/超时不正确

1 投票
1 回答
31 浏览
提问于 2025-04-13 16:33

我之前一直在用 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",
)

撰写回答