我一直在使用openai python packge v0.28.1和requests_timeout param工作正常. 然后我更新到^1.版本中,才发现超时不再按预期工作(他们已经将param名称从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

这比暂停多了很多我们已经得到了一堆的暂停在我们的游戏,但不知道为什么,因为暂停在openai应该是如此低.

我错过了什么?OpenAI的1 python SDK有这么大的开销吗?>

推荐答案

默认情况下,超时的请求重试两次,并以短的指数回退.

您可以使用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",
)

Python相关问答推荐

我从带有langchain的mongoDB中的vector serch获得一个空数组

如何检测背景有噪的图像中的正方形

Pandas 有条件轮班操作

优化pytorch函数以消除for循环

如何将多进程池声明为变量并将其导入到另一个Python文件

如何使用Python以编程方式判断和检索Angular网站的动态内容?

实现自定义QWidgets作为QTimeEdit的弹出窗口

mypy无法推断类型参数.List和Iterable的区别

为什么常规操作不以其就地对应操作为基础?

在电影中向西北方向对齐""

为什么dict. items()可以快速查找?

Python:从目录内的文件导入目录

为什么我只用exec()函数运行了一次文件,而Python却运行了两次?

PYTHON中的pd.wide_to_long比较慢

以极轴表示的行数表达式?

正在try 让Python读取特定的CSV文件

如何获取给定列中包含特定值的行号?

更新包含整数范围的列表中的第一个元素

在不降低分辨率的情况下绘制一组数据点的最外轮廓

为什么这个正则表达式没有捕获最后一次输入?