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会:

  1. 截取当前手机主屏幕
  2. 识别屏幕上的应用图标
  3. 找到“美团外卖”图标的位置
  4. 模拟点击打开应用

2.2 自动化操作:AI的“手指”

光“看懂”还不够,还得能“操作”。AutoGLM-Phone通过ADB实现自动化控制:

  • 点击操作:模拟手指触摸屏幕特定位置
  • 滑动操作:实现上下滚动、左右切换
  • 文本输入:自动在输入框中填写文字
  • 返回/主页:模拟物理按键操作

这些操作都是通过ADB命令实现的,比如点击操作对应的ADB命令是:

adb shell input tap x y

其中x和y是屏幕坐标。

2.3 智能规划与执行:AI的“思考”

最智能的部分在于规划能力。AI不是简单地执行固定步骤,而是根据当前状态动态调整:

  1. 任务分解:将复杂指令拆解为可执行的子任务
  2. 状态判断:每次操作后检查屏幕变化,确认是否成功
  3. 异常处理:遇到弹窗、登录验证等特殊情况时采取相应措施
  4. 流程优化:学习最优操作路径,提高执行效率

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配置步骤

  1. 从官网下载platform-tools并解压
  2. Win + R 输入 sysdm.cpl → 高级 → 环境变量
  3. 在系统变量Path中添加ADB解压路径(如 C:\platform-tools
  4. 打开命令提示符,输入 adb version 验证是否安装成功

macOS/Linux配置

# 假设解压到Downloads目录
export PATH=$PATH:~/Downloads/platform-tools
# 永久生效可添加到 ~/.bashrc 或 ~/.zshrc
echo 'export PATH=$PATH:~/Downloads/platform-tools' >> ~/.zshrc
手机端设置

要让电脑控制你的手机,需要在手机上开启几个选项:

  1. 开启开发者模式

    • 进入设置 → 关于手机
    • 连续点击“版本号”7次,直到提示“您已处于开发者模式”
  2. 开启USB调试

    • 返回设置 → 系统 → 开发者选项
    • 找到“USB调试”并开启
  3. 安装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执行这个指令时,会:

  1. 解锁手机(如果需要)
  2. 回到主屏幕
  3. 找到美团外卖图标
  4. 点击打开应用

如果想让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的执行逻辑分解

  1. 打开应用:识别主屏幕,找到美团外卖图标并点击
  2. 搜索餐厅:识别搜索框位置,输入“麦当劳”,点击搜索按钮
  3. 选择门店:分析搜索结果,根据距离和评分选择最优门店
  4. 浏览菜单:进入店铺后,识别分类标签,点击“超值套餐”
  5. 选择商品:在商品列表中识别“巨无霸套餐”,点击“加入购物车”
  6. 结算流程:识别购物车图标,点击进入,然后点击“去结算”
  7. 填写信息:识别地址选择界面,点击默认地址
  8. 选择支付:识别支付方式选项,选择“微信支付”
  9. 确认支付:识别确认按钮,完成支付流程

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看到餐厅列表时,它会:

  1. 识别每个餐厅卡片的区域
  2. 提取餐厅名称、评分、距离、月销量等信息
  3. 根据你的指令(如“评分最高的”)计算每个餐厅的得分
  4. 选择得分最高的餐厅并点击进入

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 使用建议

  1. 测试环境先行:先在备用手机或模拟器上测试
  2. 小额支付开始:初次使用从小额订单开始
  3. 人工监督:重要操作保持人工监督
  4. 定期检查:定期检查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实现外卖订购自动化:

  1. 核心原理:AutoGLM-Phone通过视觉语言模型“看懂”手机屏幕,通过ADB自动操作,实现真正的“动口不动手”

  2. 环境搭建:从服务端部署到客户端配置,详细步骤确保你能成功运行

  3. 实战应用:完整的点餐流程演示,从打开App到完成支付的全自动化

  4. 高级技巧:自定义模板、批量处理、智能推荐等提升体验的方法

  5. 安全考虑:内置的安全机制确保支付和隐私安全

  6. 问题解决:常见问题的排查方法和优化建议

8.2 实际应用价值

AutoGLM-Phone的外卖自动化不仅仅是“偷懒”的工具,它在多个场景中都有实际价值:

  • 工作效率:节省每天点餐的10-15分钟,专注更重要的工作
  • 一致性:团队点餐时确保每个人都能按时收到餐品
  • 无障碍辅助:为视障或行动不便人士提供点餐便利
  • 企业应用:公司团餐、会议用餐的自动化管理
  • 智能生活:与其他智能设备联动,实现真正的智能家居

8.3 未来发展方向

随着技术发展,AI手机助理还有很大提升空间:

  1. 多应用协同:不仅点外卖,还能同时处理多个任务
  2. 个性化学习:深度学习用户的偏好,提供更精准推荐
  3. 语音交互:结合语音识别,实现真正的语音控制
  4. 跨平台支持:扩展到iOS等其他移动平台
  5. 企业级集成:与OA、ERP等企业系统深度集成

8.4 开始你的自动化之旅

现在你已经掌握了AutoGLM-Phone的基本使用,可以开始尝试了:

  1. 从简单开始:先尝试“打开美团外卖”这样的简单指令
  2. 逐步复杂:慢慢增加指令复杂度,如搜索、选择、下单
  3. 监控执行:初次使用时保持关注,了解AI的操作逻辑
  4. 优化调整:根据实际情况调整指令和参数
  5. 分享经验:在社区分享你的使用心得和优化技巧

自动化不是要完全取代人工,而是让人从重复性工作中解放出来,专注于更有创造性的任务。AutoGLM-Phone为我们打开了一扇门,让我们看到了AI在日常生活中的实际应用价值。


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

Logo

小龙虾开发者社区是 CSDN 旗下专注 OpenClaw 生态的官方阵地,聚焦技能开发、插件实践与部署教程,为开发者提供可直接落地的方案、工具与交流平台,助力高效构建与落地 AI 应用

更多推荐