AutoGLM-Phone连接被拒?云服务器端口放行设置教程
你兴冲冲地配置好AutoGLM-Phone控制端,输入指令准备让AI替你刷小红书、关注博主、自动点外卖——结果命令行弹出一行冰冷的报错:Connection refused。不是手机没连上,不是ADB没启动,而是请求压根没抵达云端模型服务。问题出在哪?十有八九,是云服务器那扇“门”还关着:端口没放行。
这不是代码bug,也不是模型故障,而是一个常被忽略却至关重要的工程细节:云服务器防火墙必须明确允许外部流量进入你部署的AI服务端口。本文不讲大模型原理,不堆参数调优,只聚焦一个实操痛点——当AutoGLM-Phone提示“连接被拒”,如何快速定位、精准修复云服务器端口放行问题,并完成从本地电脑到真机的全链路打通。
1. 理解AutoGLM-Phone的通信架构:为什么端口放行是关键一环
AutoGLM-Phone不是单机运行的App,它是一个典型的“客户端-服务端”协同框架。理解它的数据流向,是解决连接问题的第一步。
1.1 它到底在和谁“对话”?
AutoGLM-Phone的控制逻辑分三层:
最底层:你的安卓手机
它是执行终端,负责显示界面、响应点击、输入文字。所有操作都通过ADB(Android Debug Bridge)这条“数字脐带”来完成。中间层:你的本地电脑(控制端)
你在这里运行main.py,它像一个指挥官:接收你的自然语言指令(如“打开微信发红包”),解析意图,然后通过ADB向手机发送具体操作命令(点击坐标、输入文本等)。最上层:云服务器(AI大脑)
这才是真正的智能核心。本地控制端本身不运行大模型,它会把手机当前屏幕截图、任务描述、历史动作等信息,打包成API请求,发送给部署在云服务器上的autoglm-phone-9b模型服务。模型推理完成后,再把下一步操作指令(比如“点击坐标(520, 880)”)返回给本地控制端。
关键点来了:本地控制端与云服务器之间的通信,走的是标准的HTTP协议。默认情况下,vLLM或FastAPI服务会监听在某个端口上(例如
8800)。这个端口,就是云服务器面向公网的“窗口”。如果这个窗口被防火墙锁死,无论你的ADB多么顺畅,指令永远无法抵达AI大脑,必然报错Connection refused。
1.2 “连接被拒”的真实含义
Connection refused这个错误,操作系统层面的含义非常明确:你的本地电脑成功发出了TCP连接请求,但目标IP和端口上没有任何进程在监听,或者该端口被防火墙主动拒绝了连接。
它和Timeout(超时)有本质区别:
Timeout:请求发出去了,但石沉大海,没人应答 → 可能是网络不通、服务器宕机、或端口被屏蔽。Connection refused:请求发到了,但对方直接说“我不认识你,不接” →几乎可以100%锁定为云服务器端口未开放或服务未启动。
所以,当你看到这个报错,请立刻停止检查手机USB线,转而登录你的云服务器后台。
2. 云服务器端口放行实战:三步搞定,覆盖主流平台
端口放行不是玄学,它就是给服务器防火墙下一条清晰的“放行令”。不同云厂商控制台界面略有差异,但核心逻辑完全一致:找到防火墙规则,添加一条入站规则,允许指定端口的TCP流量。
2.1 阿里云ECS:安全组是你的第一道防线
阿里云的安全组,本质上就是一个虚拟的、基于云服务器的防火墙。
- 登录阿里云控制台,进入ECS实例列表。
- 找到你部署AutoGLM-Phone服务的那台云服务器,点击其实例ID进入详情页。
- 在左侧菜单栏,点击“安全组”。
- 找到该实例绑定的安全组,点击右侧的“配置规则”。
- 在“入方向”规则页,点击“手动添加”。
- 填写以下关键信息(其余保持默认):
- 授权策略:允许
- 协议类型:
自定义TCP - 端口范围:填入你实际映射的端口,例如
8800/8800(表示只开放8800这一个端口) - 授权对象:
0.0.0.0/0(允许所有IP访问)- 生产环境建议限制为你的本地电脑公网IP,更安全。*
- 点击“确定”,规则立即生效。
验证小技巧:添加规则后,无需重启服务器。你可以立刻在本地电脑用
telnet <云服务器IP> 8800测试。如果出现黑屏(光标闪烁),说明端口已通;如果提示“无法连接”,说明规则未生效或服务未启动。
2.2 腾讯云CVM:网络ACL与安全组双保险
腾讯云采用“网络ACL + 安全组”双重防护,但日常使用中,安全组是主要管理入口。
- 登录腾讯云控制台,进入云服务器CVM列表。
- 找到目标服务器,点击其实例ID。
- 在实例详情页,找到“安全组”标签页,点击右侧的“管理规则”。
- 在“入站规则”页,点击“添加规则”。
- 设置如下:
- 协议类型:TCP
- 端口范围:
8800 - 源IP地址:
0.0.0.0/0 - 策略:允许
- 点击“完成”。
注意:腾讯云的网络ACL(子网级防火墙)默认是放行所有流量的,如果你没动过它,基本不用管。优先排查安全组规则。
2.3 华为云ECS:安全组规则需精确匹配
华为云的安全组规则配置最为细致,务必注意“协议”和“端口”的填写格式。
- 登录华为云控制台,进入弹性云服务器ECS。
- 找到目标服务器,在其操作列点击“更多” → “安全组”。
- 在安全组列表中,点击你正在使用的安全组名称。
- 在“入方向规则”页,点击“添加规则”。
- 关键字段设置:
- 协议:
TCP - 端口:
8800(不是8800/8800,华为云此处只填单个端口号) - 源地址:
0.0.0.0/0 - 策略:
允许
- 协议:
- 点击“确定”。
3. 本地控制端完整配置指南:从零开始打通全链路
端口放行只是打通了“云”的一端。要让AI真正接管你的手机,本地电脑的每一步配置都必须严丝合缝。
3.1 ADB环境:让电脑“认得”你的手机
ADB是整个自动化流程的基石。没有它,一切指令都是空中楼阁。
Windows用户:
- 下载Android SDK Platform-Tools。
- 解压到一个无中文、无空格的路径,例如
C:\adb。 Win + R输入sysdm.cpl→ “高级”选项卡 → “环境变量” → 在“系统变量”中找到Path→ “编辑” → “新建” → 粘贴C:\adb。- 打开新命令行窗口,输入
adb version。若显示版本号,则配置成功。
macOS用户:
- 下载Platform-Tools并解压。
- 打开终端,执行以下命令(将路径替换为你自己的解压路径):
echo 'export PATH=$PATH:~/Downloads/platform-tools' >> ~/.zshrc source ~/.zshrc- 输入
adb version验证。
3.2 手机端设置:开启“调试权限”的三把钥匙
仅仅安装ADB还不够,手机必须主动授权。
开启开发者模式:
进入手机“设置” → “关于手机” → 连续点击“版本号”7次,直到提示“您现在处于开发者模式”。开启USB调试:
返回“设置” → “系统” → “开发者选项” → 找到并开启“USB调试”。首次开启时,手机会弹出授权窗口,勾选“始终允许”,点击“确定”。安装ADB Keyboard(关键!):
AutoGLM-Phone需要向手机输入文字(比如搜索关键词),这依赖于一个特殊的输入法。- 前往GitHub搜索
adb-keyboard,下载最新版APK。 - 在手机上安装。
- 进入“设置” → “语言与输入法” → 将默认输入法切换为“ADB Keyboard”。
这是实现“自动打字”的唯一方式,切勿跳过。
- 前往GitHub搜索
3.3 启动控制端:让AI开始工作
一切就绪后,启动流程清晰明了:
确保设备已连接:
USB线连接手机与电脑,或确保手机与电脑在同一WiFi下。
在命令行输入adb devices,输出应类似:List of devices attached 1234567890abcdef device克隆并安装控制端:
git clone https://github.com/zai-org/Open-AutoGLM cd Open-AutoGLM pip install -r requirements.txt pip install -e .发起AI指令(核心命令):
python main.py \ --device-id 1234567890abcdef \ --base-url http://123.45.67.89:8800/v1 \ --model "autoglm-phone-9b" \ "打开小红书搜索美食"--device-id:来自adb devices的输出。--base-url:http://+ 你的云服务器公网IP+:+ 你放行的端口 +/v1。
务必确认这个URL能在浏览器里直接访问(返回JSON错误是正常的,说明端口通了)。
4. 排查清单:5分钟定位90%的连接问题
当Connection refused再次出现,请按此顺序快速排查:
| 检查项 | 如何验证 | 正确表现 | 错误表现 |
|---|---|---|---|
| 云服务器服务是否运行? | SSH登录服务器,执行ps aux | grep vllm | 显示vLLM进程及其端口参数 | 无任何输出 |
| 云服务器端口是否放行? | 本地执行telnet <云IP> <端口> | 光标闪烁(连接成功) | Could not open connection |
| 云服务器端口是否被占用? | SSH登录后执行lsof -i :8800或netstat -tuln | grep 8800 | 显示vLLM进程监听 | 显示LISTEN但不是你的进程,或无输出 |
| 本地网络能否访问云服务器? | 本地执行ping <云IP> | 有正常回复 | Request timed out |
| base-url地址是否拼写正确? | 将--base-url后的URL粘贴到浏览器地址栏 | 返回{"detail":"Not Found"}或类似JSON | 浏览器提示“无法访问此网站” |
终极建议:首次部署时,先在云服务器本地用
curl测试服务是否健康:curl http://localhost:8800/v1/models如果这一步都失败,问题100%出在服务启动环节,与端口放行无关。
5. 远程ADB的进阶玩法:摆脱USB线,实现真·无线控制
USB线虽然稳定,但限制了使用场景。WiFi远程ADB让你的手机真正“自由”。
5.1 一次配置,永久受益
- 首次必须用USB连接:
将手机用USB线连到电脑,确保adb devices能识别。 - 开启手机的TCP/IP模式:
adb tcpip 5555 # 输出:restarting in TCP mode port: 5555 - 断开USB线,连接同一WiFi。
在手机“设置”→“关于手机”里找到“IP地址”,记下它(如192.168.1.100)。 - 通过WiFi连接:
adb connect 192.168.1.100:5555 # 输出:connected to 192.168.1.100:5555
从此,只要手机和你的控制电脑在同一局域网,你就可以用--device-id 192.168.1.100:5555参数,彻底告别USB线。
5.2 Python API:为你的自动化脚本注入灵魂
除了命令行,Open-AutoGLM也提供了简洁的Python接口,方便集成到更复杂的业务逻辑中:
from phone_agent.adb import ADBConnection # 创建ADB连接管理器 conn = ADBConnection() # 连接WiFi设备 success, msg = conn.connect("192.168.1.100:5555") print(f"连接结果: {msg}") # 成功则输出 "Connected successfully" # 获取设备IP(用于后续调试) ip = conn.get_device_ip() print(f"设备IP: {ip}") # 断开连接 conn.disconnect("192.168.1.100:5555")这段代码的核心价值在于:它把ADB连接这个“脏活累活”封装成了几个函数调用,让你可以把精力全部放在AI指令的设计和业务流程的编排上。
总结
AutoGLM-Phone的“连接被拒”,从来不是一个孤立的技术故障,而是一条完整数据链路上某个环节的失守。本文带你穿透表象,直击本质:
- 它不是手机的问题,而是云服务器那扇未开启的“门”;
- 它不是模型的问题,而是服务进程与防火墙规则之间的一场无声博弈;
- 它不是你的问题,而是所有AI Agent落地时必经的、充满烟火气的工程实践。
从阿里云安全组的一行规则,到手机设置里那个被反复点击7次的“版本号”,再到命令行里那个精确到毫秒的--base-url参数——正是这些看似琐碎的细节,共同构筑了AI从“能跑”到“能用”的坚实桥梁。
现在,你已经掌握了端口放行的全部要点。回到你的云服务器控制台,打开安全组,添加那条至关重要的入站规则。然后,深吸一口气,再次运行python main.py。这一次,当AI开始流畅地为你滑动屏幕、点击图标、输入文字时,你会明白:所谓前沿技术,不过是把每一个“理所当然”的步骤,都亲手走了一遍。
--- > **获取更多AI镜像** > > 想探索更多AI镜像和应用场景?访问 [CSDN星图镜像广场](https://ai.csdn.net/?utm_source=mirror_blog_end),提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。