使用LangChain+Streamlit时遇openai.APIConnectionError连接错误求助
问题:基于LangChain+Streamlit开发时,调用OpenAI API持续触发
openai.APIConnectionError 在基于LangChain和Streamlit开发项目过程中,调用OpenAI API时反复收到openai.APIConnectionError: Connection error错误,已参照OpenAI官方文档调试但未解决。
错误详细栈信息
Traceback (most recent call last): File "C:\Users\HP\anaconda3\envs\astro_bot\Lib\site-packages\streamlit\runtime\scriptrunner\script_runner.py", line 600, in _run_script exec(code, module.__dict__) File "C:\Users\HP\Desktop\vs_codes\astro_bot\bot.py", line 83, in <module> refined_query = query_refiner(conversation_string, query) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\HP\Desktop\vs_codes\astro_bot\utils.py", line 36, in query_refiner response = client.completions.create( ^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\HP\anaconda3\envs\astro_bot\Lib\site-packages\openai\_utils\_utils.py", line 277, in wrapper return func(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\HP\anaconda3\envs\astro_bot\Lib\site-packages\openai\resources\completions.py", line 528, in create return self._post( ^^^^^^^^^^^ File "C:\Users\HP\anaconda3\envs\astro_bot\Lib\site-packages\openai\_base_client.py", line 1240, in post return cast(ResponseT, self.request(cast_to, opts, stream=stream, stream_cls=stream_cls)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\HP\anaconda3\envs\astro_bot\Lib\site-packages\openai\_base_client.py", line 921, in request return self._request( ^^^^^^^^^^^^^^ File "C:\Users\HP\anaconda3\envs\astro_bot\Lib\site-packages\openai\_base_client.py", line 976, in _request return self._retry_request( ^^^^^^^^^^^^^^^^^^^^ File "C:\Users\HP\anaconda3\envs\astro_bot\Lib\site-packages\openai\_base_client.py", line 1053, in _retry_request return self._request( ^^^^^^^^^^^^^^ File "C:\Users\HP\anaconda3\envs\astro_bot\Lib\site-packages\openai\_base_client.py", line 976, in _request return self._retry_request( ^^^^^^^^^^^^^^^^^^^^ File "C:\Users\HP\anaconda3\envs\astro_bot\Lib\site-packages\openai\_base_client.py", line 1053, in _retry_request return self._request( ^^^^^^^^^^^^^^ File "C:\Users\HP\anaconda3\envs\astro_bot\Lib\site-packages\openai\_base_client.py", line 986, in _request raise APIConnectionError(request=request) from err openai.APIConnectionError: Connection error.
相关代码片段
with st.spinner("typing..."): conversation_string = get_conversation_string() # st.code(conversation_string) refined_query = query_refiner(conversation_string, query) def query_refiner(conversation, query): response = client.completions.create( model="gpt-3.5-turbo", prompt=f"""Given the following user query and conversation log, formulate a question that would be the most relevant to provide the user with an answer from a knowledge base.\n\nCONVERSATION LOG: \n{conversation}\n\nQuery: {query}\n\nRefined Query:""", temperature=0.7, max_tokens=256, top_p=1, frequency_penalty=0, presence_penalty=0 ) return response['choices'][0]['text'] def get_conversation_string(): conversation_string = "" for i in range(len(st.session_state['responses'])-1): conversation_string += "Human: "+st.session_state['requests'][i] + "\n" conversation_string += "Bot: "+ st.session_state['responses'][i+1] + "\n" return conversation_string
解决思路
检查网络连通性:
在终端执行curl https://api.openai.com/v1/models测试能否直接访问OpenAI接口,确认本地网络无访问限制,可尝试切换网络(如手机热点)排查问题。配置代理(若需):
若处于受限网络环境,给OpenAI客户端配置代理:from openai import OpenAI client = OpenAI( api_key="你的API密钥", proxy="http://代理地址:端口" # 示例:http://127.0.0.1:7890 )也可通过设置环境变量
HTTP_PROXY和HTTPS_PROXY全局配置代理。修正模型调用方式:
gpt-3.5-turbo属于Chat模型,需使用client.chat.completions.create接口,而非completions.create,错误调用可能间接引发异常。修正后的代码:def query_refiner(conversation, query): response = client.chat.completions.create( model="gpt-3.5-turbo", messages=[ {"role": "system", "content": "根据对话日志和用户查询,生成最适合从知识库获取答案的精炼问题"}, {"role": "user", "content": f"对话日志:\n{conversation}\n\n用户查询:{query}\n\n精炼问题:"} ], temperature=0.7, max_tokens=256 ) return response.choices[0].message.content.strip()验证客户端初始化:
确保OpenAI客户端初始化时正确传入有效API密钥,可添加测试代码验证:models = client.models.list() print(models.data[0].id) # 能打印模型ID说明初始化正常添加重试机制:
针对网络波动导致的连接失败,用tenacity库添加重试逻辑:from tenacity import retry, stop_after_attempt, wait_exponential, retry_if_exception_type from openai import APIConnectionError @retry( stop=stop_after_attempt(3), wait=wait_exponential(multiplier=1, min=2, max=10), retry=retry_if_exception_type(APIConnectionError) ) def query_refiner(conversation, query): # 此处放API调用代码
内容的提问来源于stack exchange,提问作者Segun Odusina
相关产品推荐
相关产品推荐

