ChuanhuChatGPT icon indicating copy to clipboard operation
ChuanhuChatGPT copied to clipboard

[本地部署] 更改API地址后发生了错误:连接超时,终端无报错

Open Peins opened this issue 1 year ago • 5 comments

错误描述

更改API地址后,UI右上角显示:☹️发生了错误:连接超时,无法获取对话。请检查网络连接,或者API-Key是否有效。 image 不更改API地址时,使用代理工具时使用一切正常。

复现操作

你之前干了什么,然后出现了错误呢?例如:

  1. 正常完成本地部署
  2. 切换API地址并确定,具体可看下面终端输出
  3. ChatGPT 没有输出内容,UI右上角显示:☹️发生了错误:连接超时,无法获取对话。请检查网络连接,或者API-Key是否有效
  4. postman使用本API地址一切正常 image

错误截图

image

终端(控制台)中的错误报告

image

川虎的温馨提示:访问 http://localhost:7860 查看界面
Running on local URL:  http://127.0.0.1:7860

To create a public link, set `share=True` in `launch()`.
INFO:root:API地址更改为了https://*******.xyz/v1/chat/completions
INFO:root:API密钥更改为了sk-P*******************************************a29B
INFO:root:输入为:在
INFO:root:使用流式传输
INFO:root:实时回答模式
INFO:root:输入token计数: 19
INFO:root:传输完毕。当前token计数为[19]
INFO:root:回答为:
INFO:root:输入为:你好,你是谁?
INFO:root:使用流式传输
INFO:root:实时回答模式
INFO:root:输入token计数: 15
INFO:root:传输完毕。当前token计数为[19, 15]
INFO:root:回答为:
INFO:root:输入为:你是谁
INFO:root:使用流式传输
INFO:root:实时回答模式
INFO:root:输入token计数: 11
INFO:root:传输完毕。当前token计数为[19, 15, 11]
INFO:root:回答为:

运行环境

桌面系统

请填写以下列表:

  • OS: Windows10 LTSC
  • Browser: Chrome

运行依赖

> pip show gradio
Name: gradio
Version: 3.22.1
> python --version
Python 3.11.0

Peins avatar Mar 22 '23 08:03 Peins

这个老问题了,之前也好多人遇到过(包括我),去看一下readme里的疑难杂症解决→常见问题→配置代理,基本就可以解决啦。

我没有代理啊,只有cf woker或者云函数反代,只能用这个更改API地址,我qqbot用的这个API地址都是正常的。

Peins avatar Mar 23 '23 04:03 Peins

看来是bug,打了个日志,API地址并没有修改成功 在源代码打日志的地方:chat_func.py:

    # 如果有代理,使用代理发送请求,否则使用默认设置发送请求
    if proxies:
        response = requests.post(
            API_URL,
            headers=headers,
            json=payload,
            stream=True,
            timeout=timeout,
            proxies=proxies,
        )
    else:
        #打日志
        print("no proxy:"+API_URL)
        response = requests.post(
            API_URL,
            headers=headers,
            json=payload,
            stream=True,
            timeout=timeout,
        )
    return response

更改API地址确认后发送提问,终端返回:

川虎的温馨提示:访问 http://localhost:7860 查看界面
Running on local URL:  http://127.0.0.1:7860 

To create a public link, set `share=True` in `launch()`.
INFO:root:API地址更改为了https://******.xyz/v1/chat/completions 
INFO:root:API密钥更改为了sk-P*******************************************a29B 
INFO:root:输入为:你是谁 
INFO:root:使用流式传输 
INFO:root:实时回答模式
INFO:root:输入token计数: 23 
no proxy:https://api.openai.com/v1/chat/completions 
Traceback (most recent call last): 
  File "G:\git-clone\ChuanhuChatGPT2\venv\lib\site-packages\urllib3\connection.py", line 174, in _new_conn 
    conn = connection.create_connection(
  File "G:\git-clone\ChuanhuChatGPT2\venv\lib\site-packages\urllib3\util\connection.py", line 95, in create_connection
    raise err
  File "G:\git-clone\ChuanhuChatGPT2\venv\lib\site-packages\urllib3\util\connection.py", line 85, in create_connection
    sock.connect(sa)
TimeoutError: [WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。

从终端可见,更改API地址并没有生效,日志输出的还是https://api.openai.com/v1/chat/completions

Peins avatar Mar 23 '23 06:03 Peins

可能是因为chat_func.py已经在导入presets.py模块并加载了它的API_URL值,所以即使在utils.py模块中修改了它,chat_func.py仍然使用之前加载的原始值。 我在presets.py中加入了更新全局参数API_URL的函数,并在utils.py中def change_api_url(url):调用:

def update_api(url):
    global API_URL
    API_URL = url
    print("presets更改API:"+API_URL)

并将chat_func.py中的stream=False时,更改API地址后可以在非流式情况下正常使用:

    # 如果有代理,使用代理发送请求,否则使用默认设置发送请求
    if proxies:
        response = requests.post(
            API_URL,
            headers=headers,
            json=payload,
            stream=True,
            timeout=timeout,
            proxies=proxies,
        )
    else:
        print("发送请求时的:"+presets.API_URL)
        response = requests.post(
            presets.API_URL,
            headers=headers,
            json=payload,
            stream=False,
            timeout=timeout,
        )
    return response

utils.py:

def change_api_url(url):
    global API_URL
    API_URL = url
    presets.update_api(url)
    a = API_URL
    msg = f"API地址更改为了{API_URL}"
    logging.info(msg)
    return msg

python新手,只能努力到“更改API地址后可以在非流式情况下正常使用”这里了。也不是很懂为什么UI选项为非流式的时候requests.post的还是stream=True。

Peins avatar Mar 23 '23 09:03 Peins

最新的代码或许已经解决了该错误。请尝试更新一下看看。

Keldos-Li avatar Apr 14 '23 13:04 Keldos-Li