You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 14:51:06