OpenAI API从0.28升级至1.2.2后出现APIConnectionError问题
问题排查与修复方案
核心问题分析
你遇到的APIConnectionError主要源于两个关键问题:
- 配置未正确传递:
_get_completion函数直接使用常量文件的固定配置,未接收TextCompletion类初始化时传入的测试配置,导致客户端连接到错误的端点。 - 全局配置冗余且无效:v1.x版本的
AzureOpenAI客户端是独立实例,不需要设置openai.api_type等全局变量,这些配置对客户端无作用,反而可能造成混淆。
修复步骤与代码修改
1. 传递配置到API调用函数
修改TextCompletion的predict方法,将实例持有的配置传递给_get_completion;同时更新_get_completion函数,使用传入的配置初始化客户端。
修改后的主文件代码:
ROLE_KEY = 'role' ROLE_VALUE = 'user' CONTENT_KEY = 'content' @backoff.on_exception( backoff.expo, (openai.APIError, openai.Timeout, openai.RateLimitError, KeyError, openai.APIConnectionError), max_tries=1 ) def _get_completion(it_app: str, config: dict): """ Function to make an API call to OpenAI Chat Completion endpoint and receive a response. """ prompt = it_app messages = [{ROLE_KEY: ROLE_VALUE, CONTENT_KEY: prompt}] try: client = AzureOpenAI( azure_endpoint=config[const.OPENAI_API_BASE], api_key=config[const.OPENAI_API_KEY], api_version=config[const.OPENAI_API_VERSION] ) response = client.chat.completions.create( model=config.get(const.OPENAI_API_ENGINE, const.OPENAI_API_ENGINE), messages=messages, temperature=const.OPENAI_API_TEMPERATURE, ) return response.choices[0].message.content except (openai.BadRequestError, openai.APIConnectionError) as e: print(f"请求错误: {str(e)}") return None class TextCompletion(): def __init__(self, config: dict[str, str]): """ :param config: dictionary containing the required Azure OpenAI configuration keys """ self.config = config def predict(self, model_input: str): openai_results = _get_completion(model_input, self.config) return openai_results
2. 确保Azure端点URL完整
检查配置中的OPENAI_API_BASE必须是完整的HTTPS URL,格式为:
https://<你的Azure资源名称>.openai.azure.com/
缺少协议头(https://)或域名不完整会直接导致连接失败。
3. 修正测试配置的参数匹配
确保测试代码中的OPENAI_API_ENGINE值与Azure门户中部署的模型名称完全一致,避免因模型名称错误引发的间接连接问题。
修改后的测试代码(示例):
config = { const.OPENAI_API_BASE : 'https://your-resource-name.openai.azure.com/', const.OPENAI_API_ENGINE : 'gpt-35-turbo-0613', const.OPENAI_API_KEY : 'your-actual-api-key', const.OPENAI_API_TYPE : 'azure', const.OPENAI_API_VERSION : '2023-05-15', } text_completion = TextCompletion(config) print(text_completion.predict(model_input='which game is famous in India?'))
4. 扩展异常捕获范围
在backoff装饰器的异常列表中加入openai.APIConnectionError,确保连接类错误能被正确捕获处理;同时在try-except块中新增该异常类型,方便调试错误详情。
额外验证点
- 确认Azure资源的网络权限:如果你的Azure OpenAI资源配置了虚拟网络限制,需确保运行代码的环境在允许访问的网络范围内。
- 检查API密钥有效性:确保配置中的API密钥未过期,且拥有对应模型部署的调用权限。
内容的提问来源于stack exchange,提问作者Pushpendra Singh
相关产品推荐
相关产品推荐

