PythonAnywhere部署Telegram AI机器人连接OpenAI失败求助
PythonAnywhere部署Telegram机器人连接OpenAI失败的解决办法
问题现象
在PythonAnywhere上部署对接OpenAI的Telegram机器人后,发送消息机器人返回:Failed to get response: ⚠️ 发生错误 ⚠️ 与OpenAI通信出错,控制台抛出ConnectionRefusedError,无法连接api.openai.com:443。
控制台错误日志(翻译后)
(venv) 12:12 ~/chatGpt $ python bot/main.py 2023-03-28 12:12:17,690 - telegram.ext._application - INFO - 应用已启动 (向Telegram机器人发送消息后,机器人回复:Failed to get response: ⚠️ 发生错误 ⚠️ 与OpenAI通信出错) 2023-03-28 12:12:24,197 - root - INFO - 收到用户@fr1day_pon的新消息 2023-03-28 12:12:24,991 - root - ERROR - ⚠️ <em>发生错误</em> ⚠️ 与OpenAI通信出错 回溯(最近的调用最后): 文件"/home/irore6688/chatGpt/venv/lib/python3.10/site-packages/aiohttp/connector.py",第980行,在_wrap_create_connection中 返回 await self._loop.create_connection(*args, **kwargs) # type: ignore[return-value] # noqa 文件"/usr/local/lib/python3.10/asyncio/base_events.py",第1064行,在create_connection中 引发 exceptions[0] 文件"/usr/local/lib/python3.10/asyncio/base_events.py",第1049行,在create_connection中 sock = await self._connect_sock( 文件"/usr/local/lib/python3.10/asyncio/base_events.py",第960行,在_connect_sock中 await self.sock_connect(sock, address) 文件"/usr/local/lib/python3.10/asyncio/selector_events.py",第500行,在sock_connect中 返回 await fut 文件"/usr/local/lib/python3.10/asyncio/selector_events.py",第535行,在_sock_connect_cb中 引发 OSError(err, f'连接调用失败 {address}') ConnectionRefusedError: [Errno 111] 连接调用失败 ('52.152.96.252', 443) 上述异常直接导致以下异常: 回溯(最近的调用最后): 文件"/home/irore6688/chatGpt/venv/lib/python3.10/site-packages/openai/api_requestor.py",第587行,在arequest_raw中 result = await session.request(**request_kwargs) 文件"/home/irore6688/chatGpt/venv/lib/python3.10/site-packages/aiohttp/client.py",第536行,在_request中 conn = await self._connector.connect( 文件"/home/irore6688/chatGpt/venv/lib/python3.10/site-packages/aiohttp/connector.py",第540行,在connect中 proto = await self._create_connection(req, traces, timeout) 文件"/home/irore6688/chatGpt/venv/lib/python3.10/site-packages/aiohttp/connector.py",第901行,在_create_connection中 _, proto = await self._create_direct_connection(req, traces, timeout) 文件"/home/irore6688/chatGpt/venv/lib/python3.10/site-packages/aiohttp/connector.py",第1206行,在_create_direct_connection中 引发 last_exc 文件"/home/irore6688/chatGpt/venv/lib/python3.10/site-packages/aiohttp/connector.py",第1175行,在_create_direct_connection中 transp, proto = await self._wrap_create_connection( 文件"/home/irore6688/chatGpt/venv/lib/python3.10/site-packages/aiohttp/connector.py",第988行,在_wrap_create_connection中 引发 client_error(req.connection_key, exc) from exc aiohttp.client_exceptions.ClientConnectorError: 无法连接到主机api.openai.com:443 ssl:default [连接调用失败 ('52.152.96.252', 443)] 上述异常直接导致以下异常: 回溯(最近的调用最后): 文件"/home/irore6688/chatGpt/bot/openai_helper.py",第133行,在__common_get_chat_response中 返回 await openai.ChatCompletion.acreate( 文件"/home/irore6688/chatGpt/venv/lib/python3.10/site-packages/openai/api_resources/chat_completion.py",第45行,在acreate中 返回 await super().acreate(*args, **kwargs) 文件"/home/irore6688/chatGpt/venv/lib/python3.10/site-packages/openai/api_resources/abstract/engine_api_resource.py",第217行,在acreate中 response, _, api_key = await requestor.arequest( 文件"/home/irore6688/chatGpt/venv/lib/python3.10/site-packages/openai/api_requestor.py",第300行,在arequest中 result = await self.arequest_raw( 文件"/home/irore6688/chatGpt/venv/lib/python3.10/site-packages/openai/api_requestor.py",第604行,在arequest_raw中 引发 error.APIConnectionError("与OpenAI通信出错") from e openai.error.APIConnectionError: 与OpenAI通信出错 上述异常直接导致以下异常: 回溯(最近的调用最后): 文件"/home/irore6688/chatGpt/bot/telegram_bot.py",第358行,在prompt中 async for content, tokens in stream_response: 文件"/home/irore6688/chatGpt/bot/openai_helper.py",第82行,在get_chat_response_stream中 response = await self.__common_get_chat_response(chat_id, query, stream=True) 文件"/home/irore6688/chatGpt/bot/openai_helper.py",第151行,在__common_get_chat_response中 引发 Exception(f'⚠️ <em>发生错误</em> ⚠️\n{str(e)}') from e Exception: ⚠️ <em>发生错误</em> ⚠️ 与OpenAI通信出错
解决办法
1. 配置PythonAnywhere内置代理
PythonAnywhere免费/基础账户无法直接访问OpenAI,需通过其内置代理转发请求:
- 在代码中设置OpenAI代理:
import openai # 设置PythonAnywhere代理 openai.proxy = "http://proxy.pythonanywhere.com:3128" # 初始化API密钥 openai.api_key = "你的OpenAI API密钥"
- 或在启动机器人前设置环境变量:
export HTTP_PROXY=http://proxy.pythonanywhere.com:3128 export HTTPS_PROXY=http://proxy.pythonanywhere.com:3128
2. 替换OpenAI API镜像地址
若代理无效,可使用第三方OpenAI镜像API,替换代码中的API基础地址:
import openai openai.api_base = "https://api.openai-proxy.com/v1" # 替换为可用的镜像地址 openai.api_key = "你的OpenAI API密钥"
注意选择稳定且支持ChatCompletion接口的镜像。
3. 验证OpenAI API密钥有效性
虽然日志显示连接错误,但仍需确认密钥状态:
在PythonAnywhere控制台执行测试代码:
import openai openai.api_key = "你的API密钥" openai.proxy = "http://proxy.pythonanywhere.com:3128" # 配合代理使用 try: resp = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=[{"role": "user", "content": "测试消息"}] ) print(resp.choices[0].message.content) except Exception as e: print(f"错误信息:{e}")
若返回权限/余额错误,需检查密钥权限或充值;若仍为连接错误,继续排查网络问题。
4. 升级PythonAnywhere账户
免费账户存在外部API访问限制,若上述方法均无效,可升级到付费账户,付费账户无网络访问限制,可直接连接OpenAI。
内容的提问来源于stack exchange,提问作者Bexruz Mahmudov
相关产品推荐
相关产品推荐

