使用 OpenAI API 处理 Python 脚本中的请求超时错误

Handling Request Timeout Errors in Python Script Using OpenAI API

提问人:Kyle 提问时间:11/5/2023 最后编辑:Brian Tompsett - 汤莱恩Kyle 更新时间:11/5/2023 访问量:164

问:

我正在开发一个 Python 脚本,该脚本使用 OpenAI API 处理大量 Anki 卡片(30,000 张卡片用于 20 个学习目标)。我的目标是评估每张卡片与不同学习目标的相关性。但是,我经常遇到请求超时错误,尽管实现了重试逻辑,但问题仍然存在。我正在寻找有关如何有效管理这些超时错误并确保脚本可靠执行的建议。

openai.error.Timeout:请求超时:
HTTPSConnectionPool(host='api.openai.com', port=443):读取超时。(读取超时=600)

脚本概述:

该脚本执行以下操作:

  1. 从 CSV 文件加载 Anki 卡嵌入和学习目标。
  2. 构造提示以发送到 OpenAI API,以对卡片的相关性进行评分。
  3. 使用实现重试逻辑的自定义装饰器捕获和处理 RateLimitError、APIError 或 ServiceUnavailableError 等异常。
  4. 将结果写入 CSV 文件并跟踪进度,以便在中断时从中断的地方继续。

问题:

  1. 如何改进重试逻辑以更好地处理超时?
  2. 我是否应该考虑实现最大重试计数或最大总等待时间,以避免陷入无限循环?
  3. 有没有办法增加 API 调用的超时设置,以防止这些错误经常发生?
  4. 在使用 OpenAI API 进行大规模处理时,是否有我可能忽略的最佳实践?

其他背景信息:

  • 我正在使用 openai。使用 gpt-3.5-turbo 的 ChatCompletion.create。
  • 该脚本成功处理了一些请求,但间歇性地失败并出现超时。
  • 我不确定该问题是否与 OpenAI API 速率限制或我的网络稳定性有关。

任何见解或建议将不胜感激!

尽管重试逻辑增加了重试之间的等待时间,但我仍然面临请求超时错误。下面是处理重试的脚本部分:

def handle_api_error(func):
    def wrapper(*args, **kwargs):
        max_retries = 5
        backoff_factor = 2
        for attempt in range(max_retries):
            try:
                return func(*args, **kwargs)
            except (RateLimitError, APIError, ServiceUnavailableError) as e:
                wait = backoff_factor ** attempt
                print(f'API Error: {e}. Waiting {wait}s before retrying.')
                time.sleep(wait)
            except requests.exceptions.Timeout as e:
                # Handle timeout specifically if it's a recurring issue
                print(f'Request Timeout: {e}. Adjusting request strategy.')
                # Adjust strategy, e.g., by reducing payload, increasing client-side timeout, etc.
        raise
    return wrapper

python 错误处理 openai-api retry-logic

评论

1赞 LMC 11/5/2023
看看 OpenAI 的建议。重试 10 次

答: 暂无答案