0相关详细内容可以参考Open-AutoGLM 远程使用完整指南
Open-AutoGLM是由智谱AI在2024年10月推出的开源手机操作智能体框架。该项目基于AutoGLM模型构建,代表了在移动设备自动化领域的重要突破。与传统的移动自动化框架不同,Open-AutoGLM能够通过视觉理解和自然语言指令来完成复杂的手机操作任务,使用户仅需描述高层意图即可实现端到端的自动化流程。官方项目地址为GitHub仓库。
该框架的核心创新在于整合了多模态视觉理解、智能规划和设备控制能力。用户可以通过自然语言描述需求,例如"打开电商应用并搜索特定商品",系统会自动解析用户意图、分析当前屏幕内容、规划执行步骤,并通过ADB(Android Debug Bridge)实现对物理设备的精确控制。这种端到端的自动化能力在移动应用测试、流程自动化和辅助功能等领域具有重大应用价值。
Open-AutoGLM目前支持超过50款主流应用,涵盖社交通讯、电商购物、生产力工具、媒体娱乐和旅游导航等多个领域。这些应用包括WhatsApp、Telegram、Amazon、eBay、Gmail、Google Calendar、Google Drive、Chrome、Google Maps和Booking.com等国际应用,以及微信、QQ、淘宝、美团等中文应用。这广泛的应用支持使得框架能够适应不同用户的实际需求。
在完成了环境配置和模型服务准备后,用户可以开始使用Open-AutoGLM框架。最直接的使用方式是保持USB连接,在本地计算机上执行任务。
最简单的用法是单次任务执行模式。用户通过命令行指定要执行的任务,框架执行完成后自动退出:
python main.py \
--base-url http://localhost:8000/v1 \
--model autoglm-phone-9b-multilingual \
"打开Chrome浏览器并搜索Python教程"

若使用第三方服务,则修改--base-url和--model参数,并添加--apikey参数。
对于需要执行多个连续任务的场景,可以使用交互模式。启动时不指定任务,框架会进入交互式命令提示符,等待用户输入任务描述:
python main.py \
--base-url http://localhost:8000/v1 \
--model autoglm-phone-9b-multilingual
进入后可以逐个输入任务:
> 打开Gmail应用
> 撰写邮件给support@example.com
> 输入邮件主题和内容
> 发送邮件
交互模式下,每个任务执行完毕后框架会返回提示符,允许用户输入下一个任务。这对于需要观察和验证每一步执行结果的场景特别有用。
ADB提供了两种WiFi调试方式。较早的Android版本需要使用TCP/IP模式进行设置,这需要经过USB中介步骤。较新的Android设备(11及以后)支持原生的无线调试功能,使用更为便捷。
对于支持原生无线调试的设备(Android 11+):
首先,确保计算机和Android设备连接到同一个无线网络。在设备上进入开发者选项,找到"无线调试"或"Wireless Debugging"选项,启用它。启用后,设备屏幕会显示一个IP地址和端口号的配对码。

在计算机端,打开命令行并执行:
adb connect 192.168.1.100:5555
其中IP地址和端口需要替换为设备屏幕上显示的实际值。连接成功后,可以验证:
adb devices
输出应该包含该设备的连接信息,形式为192.168.1.100:5555 device。
对于较早的Android版本或特定设备:
这种方案需要先通过USB建立初始连接,然后通过ADB命令启用TCP/IP监听模式。首先用USB线连接设备,确认adb devices能识别设备,然后执行:
adb tcpip 5555
这条命令会使设备启动TCP/IP监听模式,监听端口5555。此后可以断开USB线,计算机可以通过网络连接到设备。获取设备的IP地址可以通过在设备上查看WiFi设置获得,或在系统设置的关于手机页面找到IP地址字段。然后执行:
adb connect 192.168.1.100:5555
成功连接后,可以像使用本地USB连接一样使用Open-AutoGLM框架:
python main.py \
--device-id 192.168.1.100:5555 \
--base-url http://localhost:8000/v1 \
--model autoglm-phone-9b-multilingual \
"打开设备应用"
参数--device-id用于指定特定的设备,这在需要同时连接多个设备时特别有用。
Open-AutoGLM支持同时连接和控制多个Android设备,这对于批量自动化测试或多设备场景特别有价值。查看当前连接的所有设备的命令为:
adb devices -l
该命令会输出更详细的设备信息,包括设备序列号、连接模式和硬件型号。
通过Python API实现多设备的并发控制,可以充分利用计算机的多核处理能力。以下是一个实际的代码示例:
from concurrent.futures import ThreadPoolExecutor
from phone_agent import PhoneAgent
from phone_agent.model import ModelConfig
from phone_agent.adb import list_devices
# 获取所有已连接设备的列表
devices = list_devices()
# 创建模型配置
model_config = ModelConfig(
base_url="http://localhost:8000/v1",
model_name="autoglm-phone-9b-multilingual",
)
def execute_task_on_device(device_id, task_description):
"""在指定设备上执行任务的函数"""
try:
agent = PhoneAgent(
model_config=model_config,
device_id=device_id
)
result = agent.run(task_description)
return {
'device_id': device_id,
'status': 'success',
'result': result
}
except Exception as e:
return {
'device_id': device_id,
'status': 'failed',
'error': str(e)
}
# 定义要在各设备上执行的任务列表
tasks = {
devices[0].device_id: "打开设置应用",
devices[1].device_id: "打开Chrome浏览器",
devices[2].device_id: "打开Gmail应用",
}
# 使用线程池实现并发执行
with ThreadPoolExecutor(max_workers=min(3, len(devices))) as executor:
# 提交所有任务
futures = {
device_id: executor.submit(execute_task_on_device, device_id, task)
for device_id, task in tasks.items()
}
# 收集执行结果
results = {}
for device_id, future in futures.items():
try:
results[device_id] = future.result(timeout=300) # 5分钟超时
except Exception as e:
results[device_id] = {
'device_id': device_id,
'status': 'timeout',
'error': str(e)
}
# 输出执行结果
for device_id, result in results.items():
if result['status'] == 'success':
print(f"设备 {device_id}: 任务成功完成")
else:
print(f"设备 {device_id}: 任务失败 - {result.get('error', '未知原因')}")
在这个示例中,ThreadPoolExecutor的max_workers参数限制了同时执行的线程数,这很重要,因为模型服务的并发处理能力有限。通常max_workers设置为3-5是合理的平衡。
对于复杂的任务或需要理解框架决策过程的情况,用户可以启用详细日志输出。在命令行中添加--verbose参数:
python main.py \
--verbose \
--base-url http://localhost:8000/v1 \
--model autoglm-phone-9b-multilingual \
"任务描述"
详细模式会输出每一步的决策过程和执行动作,例如:
==================================================
思考过程:
--------------------------------------------------
当前屏幕在应用首页,需要打开搜索功能
--------------------------------------------------
执行的动作:
{
"_metadata": "do",
"action": "Tap",
"element": [500, 100]
}
==================================================
这对于理解框架的行为、调试失败案例和优化提示词都非常有帮助。

认证作者
支持自启动