我想捕获OpenAI API发送的所有5xx
错误(例如500
),这样我可以在放弃并报告异常之前进行重试。
目前我的做法大致如下:
try: response = openai.ChatCompletion.create(req)except InvalidRequestError as e: reportErrorexcept ServiceUnavailableError as e: retryexcept Exception as e: response = f"Exception: {e}" raise Exception(response)
一些5xx
错误被捕获为未知错误(最后一种情况),我想捕获这些错误,以便像处理ServiceUnavailableError
一样进行重试。但我不知道如何捕获所有5xx
错误以进行重试。文档只讲述了如何捕获具体命名的错误。
回答:
所有5xx
错误都属于ServiceUnavailableError
。请查看官方OpenAI文档:
类型 | 概述 |
---|---|
APIError | 原因:我们这边的故障。 解决方案:在短暂等待后重试请求,如果问题持续存在,请联系我们。 |
Timeout | 原因:请求超时。 解决方案:在短暂等待后重试请求,如果问题持续存在,请联系我们。 |
RateLimitError | 原因:您已达到分配的速率限制。 解决方案:控制您的请求频率。请阅读我们的速率限制指南了解更多信息。 |
APIConnectionError | 原因:连接到我们的服务时出现问题。 解决方案:检查您的网络设置、代理配置、SSL证书或防火墙规则。 |
InvalidRequestError | 原因:您的请求格式错误或缺少一些必需的参数,例如令牌或输入。 解决方案:错误消息应告知您具体的错误。查看您调用的特定API方法的文档,确保您发送的参数有效且完整。您可能还需要检查请求数据的编码、格式或大小。 |
AuthenticationError | 原因:您的API密钥或令牌无效、已过期或已被撤销。 解决方案:检查您的API密钥或令牌,确保其正确且有效。您可能需要从您的账户仪表板生成一个新的密钥。 |
ServiceUnavailableError | 原因:我们的服务器出现问题。 解决方案:在短暂等待后重试请求,如果问题持续存在,请联系我们。查看状态页面。 |
处理ServiceUnavailableError
的方式如下:
try: # 在这里进行您的OpenAI API请求 response = openai.Completion.create(prompt="Hello world", model="text-davinci-003")except openai.error.ServiceUnavailableError as e: # 在这里处理5xx错误 print(f"OpenAI API请求错误: {e}") pass