AutoGLM-Phone生活管家:外卖订购流程自动化详解
本文介绍了基于智谱开源框架Open-AutoGLM的手机端AI Agent——AutoGLM-Phone,它能自动化完成外卖订购等手机操作任务。用户可在星图GPU平台上自动化部署该镜像,快速搭建服务端环境,实现通过自然语言指令让AI自动完成打开应用、搜索餐厅、选择菜品、下单支付等全流程,显著提升生活效率。
AutoGLM-Phone生活管家:外卖订购流程自动化详解
1. 引言:让手机自己“干活”的智能助理
想象一下这个场景:你正忙着写代码,肚子饿了想点个外卖。通常你得解锁手机、打开外卖App、搜索餐厅、浏览菜单、选择菜品、填写地址、完成支付……整个过程至少需要5-10分钟。但如果有个AI助理能帮你自动完成这一切呢?
这就是今天要介绍的 AutoGLM-Phone——一个能“看懂”手机屏幕并自动操作的AI智能助理。它基于智谱开源的Open-AutoGLM框架,通过视觉语言模型理解屏幕内容,再通过ADB(Android调试桥)自动操控你的手机。你只需要用自然语言说一句“帮我点一份附近评分最高的麻辣烫”,剩下的就交给它了。
本文将带你深入了解如何用AutoGLM-Phone实现外卖订购的完整自动化流程。无论你是开发者想集成这个功能,还是普通用户想体验AI自动点餐,都能从这篇文章中找到实用的解决方案。
2. AutoGLM-Phone核心原理:它如何“看懂”并操作手机?
在深入外卖订购的具体实现前,我们先简单了解一下AutoGLM-Phone的工作原理。理解了这些,你就能更好地配置和使用它。
2.1 多模态屏幕理解:AI的“眼睛”
AutoGLM-Phone的核心是一个视觉语言模型(VLM),它就像AI的“眼睛”和“大脑”:
- 屏幕截图分析:每隔一段时间(可配置)截取手机屏幕
- 元素识别:识别屏幕上的按钮、文本框、图片、文字等UI元素
- 意图理解:结合你的指令(如“点外卖”)和当前屏幕状态,理解下一步该做什么
举个例子,当你说“打开美团外卖”时,AI会:
- 截取当前手机主屏幕
- 识别屏幕上的应用图标
- 找到“美团外卖”图标的位置
- 模拟点击打开应用
2.2 自动化操作:AI的“手指”
光“看懂”还不够,还得能“操作”。AutoGLM-Phone通过ADB实现自动化控制:
- 点击操作:模拟手指触摸屏幕特定位置
- 滑动操作:实现上下滚动、左右切换
- 文本输入:自动在输入框中填写文字
- 返回/主页:模拟物理按键操作
这些操作都是通过ADB命令实现的,比如点击操作对应的ADB命令是:
adb shell input tap x y
其中x和y是屏幕坐标。
2.3 智能规划与执行:AI的“思考”
最智能的部分在于规划能力。AI不是简单地执行固定步骤,而是根据当前状态动态调整:
- 任务分解:将复杂指令拆解为可执行的子任务
- 状态判断:每次操作后检查屏幕变化,确认是否成功
- 异常处理:遇到弹窗、登录验证等特殊情况时采取相应措施
- 流程优化:学习最优操作路径,提高执行效率
3. 环境搭建:从零开始配置你的AI手机管家
要让AutoGLM-Phone帮你点外卖,首先需要搭建好运行环境。这个过程分为服务端和客户端两部分,服务端运行AI模型,客户端控制你的手机。
3.1 服务端部署:让AI模型跑起来
服务端需要较强的GPU算力,建议使用云服务器。以下是基于vLLM的部署步骤:
# 1. 准备环境(以Ubuntu 22.04为例)
sudo apt update
sudo apt install -y python3-pip git
# 2. 克隆仓库
git clone https://github.com/zai-org/Open-AutoGLM
cd Open-AutoGLM
# 3. 安装依赖
pip install -r requirements.txt
# 4. 下载模型(以autoglm-phone-9b为例)
# 模型较大,建议提前下载或使用镜像源
# 5. 启动vLLM服务
python -m vllm.entrypoints.openai.api_server \
--model /path/to/autoglm-phone-9b \
--served-model-name autoglm-phone-9b \
--max-model-len 8192 \
--gpu-memory-utilization 0.9 \
--port 8800
关键参数说明:
--max-model-len 8192:设置模型最大上下文长度--gpu-memory-utilization 0.9:GPU内存使用率,根据显存调整--port 8800:服务监听端口,后续客户端会连接这个端口
启动成功后,你会看到类似这样的输出:
INFO 07-15 10:30:15 api_server.py:150] OpenAI API server started on http://0.0.0.0:8800
INFO 07-15 10:30:15 api_server.py:151] Serving model autoglm-phone-9b...
3.2 客户端配置:连接你的手机
服务端准备好后,需要在本地电脑配置控制端。以下是详细步骤:
硬件与环境准备
- 操作系统:Windows 10/11、macOS 10.15+ 或 Linux
- Python版本:建议 Python 3.10+
- 安卓设备:Android 7.0+ 的真机或模拟器
- ADB工具:Android调试桥,用于连接和控制手机
Windows ADB配置步骤:
- 从官网下载platform-tools并解压
- Win + R 输入
sysdm.cpl→ 高级 → 环境变量 - 在系统变量Path中添加ADB解压路径(如
C:\platform-tools) - 打开命令提示符,输入
adb version验证是否安装成功
macOS/Linux配置:
# 假设解压到Downloads目录
export PATH=$PATH:~/Downloads/platform-tools
# 永久生效可添加到 ~/.bashrc 或 ~/.zshrc
echo 'export PATH=$PATH:~/Downloads/platform-tools' >> ~/.zshrc
手机端设置
要让电脑控制你的手机,需要在手机上开启几个选项:
-
开启开发者模式:
- 进入设置 → 关于手机
- 连续点击“版本号”7次,直到提示“您已处于开发者模式”
-
开启USB调试:
- 返回设置 → 系统 → 开发者选项
- 找到“USB调试”并开启
-
安装ADB Keyboard(重要):
- 下载ADB Keyboard的APK文件
- 安装后进入设置 → 系统 → 语言和输入法
- 将默认键盘改为“ADB Keyboard”
这个步骤很关键,因为AI需要通过ADB输入文字,而普通输入法不支持ADB控制。
部署控制端代码
在本地电脑上运行:
# 克隆仓库
git clone https://github.com/zai-org/Open-AutoGLM
cd Open-AutoGLM
# 安装依赖
pip install -r requirements.txt
pip install -e .
连接设备
有两种方式连接手机:
USB连接(推荐,稳定):
# 用USB线连接手机和电脑
adb devices
# 正常输出应显示设备ID,如:
# List of devices attached
# 1234567890ABCDEF device
WiFi连接(无线控制):
# 先用USB连接一次
adb tcpip 5555
# 断开USB,查看手机IP(在设置-关于手机-状态信息中)
adb connect 192.168.1.100:5555 # 替换为你的手机IP
4. 外卖订购实战:让AI帮你自动点餐
环境配置好后,我们进入最实用的部分——让AI自动点外卖。我将以美团外卖为例,展示完整的自动化流程。
4.1 基础指令:打开外卖App并搜索
让我们从最简单的指令开始:
# 启动AI代理,让它打开美团外卖
python main.py \
--device-id 192.168.1.100:5555 \
--base-url http://你的服务器IP:8800/v1 \
--model "autoglm-phone-9b" \
"打开美团外卖App"
AI执行这个指令时,会:
- 解锁手机(如果需要)
- 回到主屏幕
- 找到美团外卖图标
- 点击打开应用
如果想让AI搜索特定餐厅,可以这样:
python main.py \
--device-id 192.168.1.100:5555 \
--base-url http://你的服务器IP:8800/v1 \
--model "autoglm-phone-9b" \
"在美团外卖中搜索'麦当劳'"
4.2 完整外卖订购流程
现在来看一个完整的点餐示例。假设你想点一份麦当劳的套餐:
# 使用Python API实现更复杂的控制逻辑
from phone_agent.agent import PhoneAgent
from phone_agent.adb import ADBConnection
# 初始化连接
conn = ADBConnection()
conn.connect("192.168.1.100:5555")
# 创建AI代理
agent = PhoneAgent(
device_id="192.168.1.100:5555",
base_url="http://你的服务器IP:8800/v1",
model_name="autoglm-phone-9b"
)
# 完整的点餐指令
order_instruction = """
请帮我完成以下外卖订购流程:
1. 打开美团外卖App
2. 在搜索框输入'麦当劳'
3. 选择距离最近、评分最高的麦当劳门店
4. 进入店铺后,选择'超值套餐'分类
5. 找到'巨无霸套餐'并加入购物车
6. 进入购物车,点击'去结算'
7. 选择配送地址(使用默认地址)
8. 选择支付方式为'微信支付'
9. 确认订单并完成支付
注意:如果遇到登录页面,请暂停并等待人工处理。
如果商品缺货,请选择类似的替代套餐。
"""
# 执行指令
result = agent.run(instruction=order_instruction)
print(f"执行结果: {result}")
AI的执行逻辑分解:
- 打开应用:识别主屏幕,找到美团外卖图标并点击
- 搜索餐厅:识别搜索框位置,输入“麦当劳”,点击搜索按钮
- 选择门店:分析搜索结果,根据距离和评分选择最优门店
- 浏览菜单:进入店铺后,识别分类标签,点击“超值套餐”
- 选择商品:在商品列表中识别“巨无霸套餐”,点击“加入购物车”
- 结算流程:识别购物车图标,点击进入,然后点击“去结算”
- 填写信息:识别地址选择界面,点击默认地址
- 选择支付:识别支付方式选项,选择“微信支付”
- 确认支付:识别确认按钮,完成支付流程
4.3 智能决策:当AI遇到选择困难
外卖订购中经常需要做选择,比如“评分最高的”、“距离最近的”、“优惠最大的”。AutoGLM-Phone如何理解这些模糊指令?
评分判断逻辑:
# AI内部的处理逻辑(简化示意)
def select_best_restaurant(restaurants):
"""
根据评分、距离、销量等多因素选择最佳餐厅
"""
best_score = -1
best_restaurant = None
for restaurant in restaurants:
# 综合评分(评分权重0.6,距离权重0.3,销量权重0.1)
score = (restaurant.rating * 0.6 +
(1 - restaurant.distance_norm) * 0.3 +
restaurant.sales_norm * 0.1)
if score > best_score:
best_score = score
best_restaurant = restaurant
return best_restaurant
实际执行时的屏幕分析: 当AI看到餐厅列表时,它会:
- 识别每个餐厅卡片的区域
- 提取餐厅名称、评分、距离、月销量等信息
- 根据你的指令(如“评分最高的”)计算每个餐厅的得分
- 选择得分最高的餐厅并点击进入
4.4 异常处理:当流程不顺利时
实际点餐过程中会遇到各种意外情况,AI需要能够应对:
情况1:商品缺货
AI识别到“商品已售罄”提示
→ 执行备选方案:寻找类似商品
→ 如果找不到,暂停并提示用户
情况2:登录验证
AI识别到登录页面
→ 暂停执行
→ 通过API回调通知用户
→ 等待人工登录后继续
情况3:网络异常
AI检测到网络错误提示
→ 等待3秒后重试
→ 如果连续失败3次,停止执行并报错
对应的代码处理:
class OrderAgent:
def handle_exception(self, screen_info):
"""处理执行过程中的异常情况"""
# 检查是否在登录页面
if self.is_login_page(screen_info):
print("检测到登录页面,暂停执行")
self.pause_execution()
self.notify_user("需要登录,请手动登录后继续")
return "PAUSED_FOR_LOGIN"
# 检查商品是否缺货
if "已售罄" in screen_info.text or "缺货" in screen_info.text:
print("商品缺货,寻找替代品")
return self.find_alternative()
# 检查网络错误
if "网络异常" in screen_info.text or "加载失败" in screen_info.text:
print("网络异常,等待重试")
time.sleep(3)
return "RETRY"
return "CONTINUE"
5. 高级技巧:优化你的AI点餐体验
掌握了基础用法后,我们来探讨一些提升体验的高级技巧。
5.1 自定义指令模板
如果你经常点同一家店,可以创建指令模板:
# 麦当劳点餐模板
mcdonalds_template = """
打开美团外卖
搜索'麦当劳'
选择{门店选择条件}
进入店铺后选择'{套餐名称}'
加入购物车
去结算
使用默认地址
选择{支付方式}
确认订单
"""
# 使用模板
def order_mcdonalds(store_condition="距离最近", meal="巨无霸套餐", payment="微信支付"):
instruction = mcdonalds_template.format(
门店选择条件=store_condition,
套餐名称=meal,
支付方式=payment
)
agent.run(instruction=instruction)
5.2 多任务批量处理
如果你需要为团队点餐,可以批量处理:
def batch_order(orders):
"""
批量点餐功能
orders: 列表,每个元素是(餐厅, 菜品, 备注)
"""
results = []
for restaurant, meal, note in orders:
instruction = f"""
打开美团外卖
搜索'{restaurant}'
选择评分最高的门店
找到'{meal}'并加入购物车
{'备注:' + note if note else ''}
"""
result = agent.run(instruction=instruction)
results.append((restaurant, result))
# 等待3秒,避免操作过快
time.sleep(3)
# 最后统一结算
checkout_instruction = """
进入购物车
去结算
使用默认地址
选择微信支付
确认所有订单
"""
agent.run(instruction=checkout_instruction)
return results
5.3 智能推荐系统
结合你的点餐历史,AI可以学习你的偏好:
class PersonalizedOrderAgent:
def __init__(self, user_id):
self.user_id = user_id
self.order_history = self.load_history()
self.preferences = self.analyze_preferences()
def load_history(self):
"""加载用户点餐历史"""
# 从数据库或文件加载
pass
def analyze_preferences(self):
"""分析用户偏好"""
preferences = {
'cuisine': {}, # 菜系偏好
'restaurant': {}, # 餐厅偏好
'price_range': (0, 0), # 价格区间
'delivery_time': 30, # 期望配送时间
}
# 分析历史订单数据
for order in self.order_history:
# 统计菜系频率
# 统计餐厅选择
# 计算平均价格
# 分析配送时间偏好
pass
return preferences
def recommend(self, time_of_day, weather=None):
"""根据时间、天气推荐餐品"""
recommendations = []
# 早餐推荐逻辑
if time_of_day == "morning":
if "中式早餐" in self.preferences['cuisine']:
recommendations.append("豆浆油条套餐")
else:
recommendations.append("西式早餐套餐")
# 午餐推荐逻辑
elif time_of_day == "noon":
# 根据天气推荐
if weather == "hot":
recommendations.append("凉面套餐")
else:
recommendations.append("热汤面套餐")
# 晚餐推荐逻辑
elif time_of_day == "evening":
recommendations.append(self.preferences.get('favorite_dinner', "家常菜套餐"))
return recommendations
5.4 与其他系统集成
AutoGLM-Phone可以与企业系统集成,实现更智能的点餐管理:
class EnterpriseOrderSystem:
def __init__(self):
self.agent = PhoneAgent(...)
self.calendar_api = CalendarAPI()
self.expense_api = ExpenseAPI()
def team_lunch_order(self, team_id, budget_per_person):
"""团队午餐订购"""
# 1. 从日历获取会议时间
meeting_time = self.calendar_api.get_team_meeting_time(team_id)
# 2. 计算送餐时间(会议前30分钟)
delivery_time = meeting_time - timedelta(minutes=30)
# 3. 获取团队成员饮食偏好
preferences = self.get_team_preferences(team_id)
# 4. 根据预算和偏好选择餐厅
restaurant = self.select_restaurant(preferences, budget_per_person)
# 5. 生成订购指令
instruction = f"""
打开美团外卖
搜索'{restaurant.name}'
选择'{restaurant.branch}'
订购以下餐品:
{self.generate_order_list(preferences)}
配送时间选择:{delivery_time.strftime('%H:%M')}
配送地址:{self.office_address}
备注:团队午餐,会议编号{team_id}
使用公司账户支付
"""
# 6. 执行订购
result = self.agent.run(instruction=instruction)
# 7. 记录到报销系统
self.expense_api.record_order(team_id, result.order_id, result.amount)
return result
6. 安全与隐私考虑
使用AI自动操作手机涉及安全隐私,需要注意以下几点:
6.1 敏感操作确认机制
AutoGLM-Phone内置了安全机制:
- 支付确认:涉及支付时暂停,等待人工确认
- 权限申请:遇到权限弹窗时暂停执行
- 登录保护:识别到登录页面自动暂停
# 安全检测示例
def safety_check(screen_info, next_action):
"""检查下一步操作是否安全"""
risky_actions = ["支付", "确认订单", "删除", "卸载", "格式化"]
# 检查是否为风险操作
for risk in risky_actions:
if risk in next_action:
print(f"检测到风险操作: {next_action}")
return False
# 检查是否在支付页面
if self.is_payment_page(screen_info):
print("在支付页面,需要人工确认")
return False
# 检查是否有权限弹窗
if self.has_permission_popup(screen_info):
print("检测到权限申请,需要人工处理")
return False
return True
6.2 数据隐私保护
- 本地处理:屏幕截图和操作记录可在本地处理,不上传云端
- 临时数据:敏感信息(地址、支付信息)不长期存储
- 用户控制:用户可以随时查看和删除操作记录
6.3 使用建议
- 测试环境先行:先在备用手机或模拟器上测试
- 小额支付开始:初次使用从小额订单开始
- 人工监督:重要操作保持人工监督
- 定期检查:定期检查AI的操作记录
7. 常见问题与解决方案
在实际使用中,你可能会遇到一些问题。以下是常见问题的解决方法:
7.1 连接问题
问题:adb devices 显示设备离线或无设备 解决:
# 1. 重新插拔USB线
# 2. 重启ADB服务
adb kill-server
adb start-server
# 3. 重新授权USB调试(手机上查看)
# 4. 更换USB线或接口
问题:WiFi连接不稳定 解决:
# 1. 确保手机和电脑在同一网络
# 2. 关闭手机防火墙或杀毒软件
# 3. 使用USB连接更稳定
7.2 识别问题
问题:AI找不到应用图标 解决:
# 调整截图质量
agent.set_screenshot_quality(quality=90) # 提高截图质量
# 增加识别等待时间
agent.set_wait_time(before_action=1.0) # 操作前等待1秒
# 使用精确的应用包名
instruction = "打开包名为 com.sankuai.meituan 的应用"
问题:AI点击位置不准确 解决:
# 校准屏幕坐标
agent.calibrate_screen()
# 使用相对坐标而非绝对坐标
agent.use_relative_coordinates(True)
# 增加点击容错范围
agent.set_tap_tolerance(pixels=10) # 10像素容错
7.3 性能优化
如果AI响应慢或操作卡顿:
# 1. 降低截图频率(默认0.5秒)
agent.set_screenshot_interval(interval=1.0) # 改为1秒
# 2. 使用缓存减少重复识别
agent.enable_element_cache(True)
# 3. 优化模型参数(服务端)
# 修改vLLM启动参数
python -m vllm.entrypoints.openai.api_server \
--model /path/to/model \
--max-model-len 4096 \ # 减少上下文长度
--gpu-memory-utilization 0.8 \ # 降低显存使用
--enforce-eager \ # 禁用图优化,减少内存
--port 8800
7.4 特定应用适配
不同外卖App的界面结构不同,可能需要特殊处理:
# 美团外卖专用适配
def meituan_special_handling(agent):
"""处理美团外卖的特殊情况"""
# 美团经常有弹窗广告
def close_popup():
popup_selectors = [
"关闭按钮", "跳过广告", "我知道了", "不再提醒"
]
for selector in popup_selectors:
if agent.find_element(selector):
agent.tap(selector)
return True
return False
# 在每次操作前检查弹窗
agent.add_pre_action_hook(close_popup)
# 美团搜索框有时需要点击两次
def double_tap_search():
if agent.current_activity == "com.sankuai.meituan.homepage":
agent.tap("搜索框")
time.sleep(0.5)
agent.tap("搜索框") # 第二次点击
agent.add_action_hook("搜索", double_tap_search)
# 饿了么专用适配
def eleme_special_handling(agent):
"""处理饿了么的特殊情况"""
# 饿了么的购物车图标位置特殊
def find_eleme_cart():
# 先尝试常规位置
if agent.find_element("购物车"):
return "购物车"
# 尝试底部导航栏
screen_height = agent.get_screen_height()
cart_y = screen_height - 100 # 底部向上100像素
# 在底部区域寻找购物车图标
return agent.find_element_at_region(
x_range=(0, agent.get_screen_width()),
y_range=(cart_y-50, cart_y+50),
text="购物车"
)
agent.register_element_finder("购物车", find_eleme_cart)
8. 总结与展望
8.1 本文要点回顾
通过本文,我们全面了解了如何使用AutoGLM-Phone实现外卖订购自动化:
-
核心原理:AutoGLM-Phone通过视觉语言模型“看懂”手机屏幕,通过ADB自动操作,实现真正的“动口不动手”
-
环境搭建:从服务端部署到客户端配置,详细步骤确保你能成功运行
-
实战应用:完整的点餐流程演示,从打开App到完成支付的全自动化
-
高级技巧:自定义模板、批量处理、智能推荐等提升体验的方法
-
安全考虑:内置的安全机制确保支付和隐私安全
-
问题解决:常见问题的排查方法和优化建议
8.2 实际应用价值
AutoGLM-Phone的外卖自动化不仅仅是“偷懒”的工具,它在多个场景中都有实际价值:
- 工作效率:节省每天点餐的10-15分钟,专注更重要的工作
- 一致性:团队点餐时确保每个人都能按时收到餐品
- 无障碍辅助:为视障或行动不便人士提供点餐便利
- 企业应用:公司团餐、会议用餐的自动化管理
- 智能生活:与其他智能设备联动,实现真正的智能家居
8.3 未来发展方向
随着技术发展,AI手机助理还有很大提升空间:
- 多应用协同:不仅点外卖,还能同时处理多个任务
- 个性化学习:深度学习用户的偏好,提供更精准推荐
- 语音交互:结合语音识别,实现真正的语音控制
- 跨平台支持:扩展到iOS等其他移动平台
- 企业级集成:与OA、ERP等企业系统深度集成
8.4 开始你的自动化之旅
现在你已经掌握了AutoGLM-Phone的基本使用,可以开始尝试了:
- 从简单开始:先尝试“打开美团外卖”这样的简单指令
- 逐步复杂:慢慢增加指令复杂度,如搜索、选择、下单
- 监控执行:初次使用时保持关注,了解AI的操作逻辑
- 优化调整:根据实际情况调整指令和参数
- 分享经验:在社区分享你的使用心得和优化技巧
自动化不是要完全取代人工,而是让人从重复性工作中解放出来,专注于更有创造性的任务。AutoGLM-Phone为我们打开了一扇门,让我们看到了AI在日常生活中的实际应用价值。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。
更多推荐


所有评论(0)