用Open-AutoGLM做了个自动搜美食AI,全过程分享

用Open-AutoGLM做了个自动搜美食AI,全过程分享

你有没有过这样的时刻:深夜刷着小红书,看到一张热气腾腾的烤鱼图,馋得立刻想搜“附近哪家川菜馆最地道”,但手指刚点开APP,又懒得打字、翻页、比价……要是能直接说一句“帮我找3公里内评分4.7以上、人均120左右的川菜馆”,手机就自动打开小红书、输入关键词、筛选排序、截图发给你——这算不算一种“懒人刚需”?

这次,我真把它做出来了。没改一行模型代码,没写一个UI界面,只靠智谱开源的 Open-AutoGLM 镜像,搭配一台旧安卓手机和一台普通笔记本,从零跑通了整套“自然语言→自动操作→结果返回”的闭环。整个过程不依赖云服务API调用,不走网页爬虫,不越狱不root,纯靠视觉理解+ADB自动化+多步任务规划。

下面这篇,就是我亲手踩坑、反复调试、最终稳定运行的全流程实录。没有PPT式概括,没有概念堆砌,只有真实命令、失败截图(文字还原)、关键配置和可复现的提示词。如果你也有一台闲置安卓机,愿意花90分钟动手试试,这篇文章就是为你写的。

1. 先搞懂它到底在做什么

1.1 不是“语音助手”,也不是“APP插件”

很多人第一反应是:“这不就是Siri+截图识别?”——错。Open-AutoGLM 的核心能力,是把手机屏幕当成一张实时更新的画布,把用户指令翻译成一连串带语义的动作序列,并精准执行

它不调用APP内部接口,不依赖SDK,不破解协议。它干的是三件事:

  • :每秒截一次屏,用OCR+视觉语言模型识别按钮文字、图标位置、列表结构、当前页面类型(比如“搜索页”还是“详情页”)
  • :结合你的自然语言指令(如“找美食”),推理出下一步该点哪里、输什么、滑到哪、等多久
  • :通过 ADB 发送 input tap x yinput text "川菜"input swipe 等指令,模拟真人操作

换句话说:它不是在“用APP”,而是在“操作手机”——就像你在旁边看着,手把手教一个新手完成任务。

1.2 和传统自动化工具的本质区别

工具类型依赖前提指令灵活性抗界面变化能力是否需要预设规则
Auto.js / Tasker需要提前录制坐标或写XPath极低(只能执行固定路径)差(换图标/布局就崩)必须写死每一步
Appium / UI Automator需APP提供Accessibility ID中(支持简单条件判断)中(依赖控件ID稳定性)需大量断言和分支
Open-AutoGLM仅需ADB权限+屏幕可见高(支持多轮对话、模糊意图)强(靠视觉理解,非坐标绑定)无需预设,全靠模型实时推理

举个例子:你说“把小红书里那个蓝色招牌的火锅店加到收藏”,传统脚本必须知道“蓝色招牌”对应哪个元素ID;而Open-AutoGLM会先识别所有带“火锅”字样的卡片,再筛选背景色偏蓝的,最后定位“收藏”按钮并点击——整个过程动态决策,不硬编码。

2. 硬件与环境准备:三样东西,缺一不可

别跳过这步。我卡在这儿整整两天,因为漏了一个细节:ADB Keyboard没设为默认输入法。结果AI一直“想输字却输不出”,在搜索框前干瞪眼。

2.1 我的实际设备清单(亲测可用)

  • 手机端:小米10(Android 12),已开启开发者模式、USB调试、安装ADB Keyboard(v1.2.3)
  • 电脑端:MacBook Pro M1(macOS 14.5),Python 3.11.9,已配好ADB环境变量
  • 网络:手机与电脑同连2.4GHz WiFi(避免5GHz频段导致ADB连接超时)

注意:iOS设备不支持。Open-AutoGLM目前仅适配Android,且要求Android 7.0+。模拟器(如BlueStacks)理论上可行,但实测响应延迟高、OCR识别率下降约40%,建议优先用真机。

2.2 手机设置避坑指南

很多教程只说“开启USB调试”,但实际有三个隐藏关卡:

  1. 开发者选项里的“USB调试(安全设置)”必须勾选
    (路径:设置 → 开发者选项 → 拉到底 → 勾选“USB调试(安全设置)”)
    不勾这个,ADB连接后无法发送input text指令

  2. ADB Keyboard必须设为“默认输入法”且“启用”
    (路径:设置 → 语言与输入法 → 虚拟键盘 → 勾选ADB Keyboard → 设为默认)
    否则AI输入文字时,屏幕键盘不弹出,指令直接丢失

  3. 关闭“MIUI优化”或“华为纯净模式”等系统级限制
    (路径:设置 → 更多设置 → 授权管理 → 找到“ADB”相关权限 → 全部允许)
    某些国产ROM会拦截ADB的input指令,表现为“点击无反应”

2.3 ADB环境验证:三行命令定生死

在终端执行以下命令,每一步都必须返回预期结果:

# 1. 查看ADB是否识别设备(USB连接时)
adb devices
#  正确输出示例:List of devices attached \n XXXXXXXX	device

# 2. 测试能否截图(验证屏幕读取能力)
adb shell screencap -p /sdcard/screen.png && adb pull /sdcard/screen.png ./test.png
#  成功后,本地会生成test.png,打开确认是当前手机屏幕

# 3. 测试能否输入文字(验证ADB Keyboard生效)
adb shell input text "test"
#  手机屏幕上应实时出现“test”二字(若无反应,回看2.2第2条)

如果第3步失败,请立即检查ADB Keyboard设置——这是新手最高频的卡点。

3. 部署Open-AutoGLM控制端:四步到位

官方文档提到“需部署云端模型”,但其实完全可以用CSDN星图镜像广场提供的预置服务,省去自己搭vLLM的麻烦。我用的就是镜像名称为 Open-AutoGLM – 智谱开源的手机端AI Agent框架 的版本,已内置 autoglm-phone-9b 模型和API服务。

3.1 克隆代码 & 安装依赖

# 创建干净工作目录
mkdir ~/auto-glm-food && cd ~/auto-glm-food

# 克隆官方仓库(注意:用zai-org主分支,非fork)
git clone https://github.com/zai-org/Open-AutoGLM
cd Open-AutoGLM

# 创建虚拟环境(推荐,避免包冲突)
python -m venv venv
source venv/bin/activate  # macOS/Linux
# venv\Scripts\activate  # Windows

# 安装依赖(requirements.txt已适配镜像环境)
pip install -r requirements.txt
pip install -e .

提示:pip install -e . 是关键。它让Python能直接导入 phone_agent 模块,否则运行 main.py 会报 ModuleNotFoundError

3.2 获取设备ID与服务地址

  • 设备ID:运行 adb devices,复制输出中 device 前的那一串字符(如 1234567890ABCDEF
  • 服务地址:登录CSDN星图镜像广场,找到已启动的 Open-AutoGLM 实例,复制其公网IP和映射端口(如 http://118.193.222.105:8800/v1

注意:镜像默认开放端口为 8800,若被占用会自动顺延。务必在镜像控制台确认实际端口,不要硬写8800。

3.3 启动代理:一条命令启动全自动

Open-AutoGLM 目录下,执行:

python main.py \
  --device-id 1234567890ABCDEF \
  --base-url http://118.193.222.105:8800/v1 \
  --model "autoglm-phone-9b" \
  "打开小红书,搜索'川菜',按人气排序,截图前三家店铺的名称和评分"

成功启动后,你会看到终端持续滚动日志:

[INFO] Capturing screen...
[INFO] Sending image to model...
[INFO] Model response: {"action": "tap", "x": 520, "y": 180, "desc": "点击搜索框"}
[INFO] Executing ADB command: input tap 520 180
[INFO] Waiting for keyboard...

此时手机屏幕会自动亮起,依次完成:解锁(若锁屏)、打开小红书、点击搜索栏、输入“川菜”、点击搜索、等待加载、按人气排序、截图——全程无需人工干预。

4. 我的“搜美食”实战:从指令到结果的完整链路

光说没用。下面是我真实跑通的全流程记录,含每一步的意图解析逻辑、失败原因和修复方法

4.1 第一版指令(失败)

"帮我找附近的川菜馆"

结果:AI在小红书首页反复点击“发现”页签,卡住不动。
原因分析:

  • “附近”是模糊地理概念,小红书未授权定位时无法获取;
  • 模型将“附近”误解为“当前页面的附近区域”,试图滑动屏幕找地图入口;
  • 缺少明确动作锚点(如“搜索框”“放大镜图标”)。

4.2 第二版指令(部分成功)

"打开小红书,点放大镜,输入'川菜',点搜索,截图结果页"

进展:成功打开APP、定位搜索框、输入文字、触发搜索。
卡点:搜索结果页加载慢,AI未等待直接截图,得到空白页。
🔧 修复:在指令末尾加等待提示
"...点搜索,等待3秒,截图结果页"

4.3 最终稳定版指令(推荐直接复用)

"打开小红书APP,等待APP加载完成,点击顶部搜索框(图标为放大镜),输入'川菜',点击搜索按钮,等待结果页完全加载(进度条消失),按人气排序,截图显示前五家店铺的完整卡片(含店名、评分、人均)"

效果:

  • 手机自动完成全部操作;
  • 截图保存在电脑端 ./outputs/ 目录;
  • 终端日志清晰标注每步耗时(平均单任务127秒);
  • 识别准确率:5家店铺中,4家店名+评分提取正确(1家因字体模糊识别为“XX老灶”→“XX老烦”,人工可校对)。

关键技巧:给AI“时间感”和“完成态描述”比给坐标更重要。用“等待进度条消失”“等待卡片全部显示”替代“等待2秒”,容错率提升3倍。

5. 进阶玩法:让AI不止于“搜”,还能“比”和“记”

Open-AutoGLM 的真正潜力,在于多步任务串联。我基于美食场景拓展了两个实用功能:

5.1 功能一:跨APP比价(小红书+大众点评)

"先在小红书搜索'川菜',截图前三家店名;再打开大众点评,依次搜索这三家店名,截图每家的评分和人均消费;最后对比三张截图,输出哪家性价比最高(评分/人均比值最大)"

实现效果:

  • AI自动切换APP、记忆上一步结果、分步执行;
  • 最终在终端打印结论:【结论】'蜀大侠火锅'性价比最高(4.8分/138元 = 0.0348)
  • 所有截图按步骤命名存档(step1_xiaohongshu.png, step2_dianping_shudaxia.png)。

5.2 功能二:建立个人美食库(自动归档)

"今天搜到的川菜馆,把店名、评分、人均、小红书笔记链接(从分享按钮复制)存入备忘录,标题为'2025-04-12 美食候选'"

实现效果:

  • AI识别小红书笔记页的“分享”按钮并点击;
  • 在弹出菜单中选择“复制链接”;
  • 切换到系统备忘录APP,新建笔记,粘贴内容;
  • 标题自动按日期格式化。

底层原理:Open-AutoGLM 的 action 类型不仅支持 tap/text,还支持 long_pressswipebackhomecopy 等12种原子操作,组合起来就是无限可能。

6. 常见问题与我的解决方案

整理了实测中最高频的5个问题,附带根因和一句话解法:

  • Q:AI总在某个页面循环点击,不推进?
    A:检查该页面是否有动态加载内容(如瀑布流)。在指令中加入 "等待'加载更多'文字出现""滑动一次" 显式触发。

  • Q:输入文字后,APP弹出软键盘但AI不点搜索?
    A:多数APP的“搜索”按钮是图片而非文字。改指令为 "点击右上角带放大镜图标的按钮",模型更易识别图标。

  • Q:截图模糊,OCR识别错误?
    A:在 main.py 中修改 screenshot_quality 参数(默认80),设为95;或手机设置中关闭“自适应亮度”。

  • Q:WiFi连接不稳定,ADB频繁断开?
    A:改用USB连接 + adb usb 命令强制切回USB模式;或在指令前加 adb reconnect 自动重连。

  • Q:遇到登录页/验证码,AI卡住?
    A:镜像已内置人工接管机制。当检测到“登录”“验证码”字样,终端会暂停并提示 Human intervention required,你手动操作后输入 continue 即可恢复。

7. 总结:它不是玩具,而是新工作流的起点

回看这次实践,Open-AutoGLM 给我的最大启发,不是“AI能点手机”,而是它重新定义了人机协作的颗粒度

过去我们用自动化工具,目标是“代替重复劳动”;而Open-AutoGLM 让我们开始思考:“哪些决策可以外包给AI,哪些必须人来把关?”

  • 它自动执行确定性动作(点、输、滑、截);
  • 它把模糊需求转为结构化步骤;
  • 它把跨APP的碎片信息,聚合成可行动的结论。

这不是终点。下一步,我计划:
将指令语音化(接入Whisper本地模型);
把结果自动发微信给朋友(调用WeChatPY);
用OCR识别截图中的电话号码,一键拨号。

技术永远在进化,但核心没变:好的工具,从不问“你能做什么”,而是先听懂“你想做什么”。


获取更多AI镜像

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

源码直接下载地址: https://pan.quark.cn/s/95437fdf229e Intel I-219V网卡驱动是一款专门为Intel的I-219V千兆以太网控制器而研发的驱动程序,其主要作用在于保障在Ubuntu 16.04操作系统环境下的正常运作以及优化系统性能。Intel I-219V作为一款广泛应用的内置网络接口控制器(NIC),常被集成在台式机及笔记本电脑的主板上,负责提供高速的网络连接服务。Intel公司所提供的e1000e驱动是与此硬件相配套的开源驱动解决方案,其中版本3.3.5.3是专门针对该硬件设备的定制版本。此驱动包含了不可或缺的源代码部分,赋予开发者和系统管理者按照特定需求进行编译和定制的权限,从而能够适应多样化的系统配置或针对特定情形进行问题解决。源代码的可用性同样表明用户有能力依据Linux内核的更新情况来升级驱动,确保与最新技术标准的兼容性。在Ubuntu 16.04系统中成功编译的驱动意味着它已经通过了严苛的测试流程,并能够与该版本的Linux内核实现良好兼容。Ubuntu 16.04,其代号为Xenial Xerus,是一个长期支持(LTS)的版本,因此对于那些追求系统稳定性和安全保障的用户群体而言具有特殊的意义。驱动程序的兼容性保障了I-219V网卡能够在该系统平台上实现无缝运行,提供稳定可靠的网络连接,这既包括局域网(LAN)的连接,也可能涵盖通过Wi-Fi桥接实现的无线网络连接。驱动程序的核心职责涵盖了网络接口的初始化与管理、数据包的接收与发送处理,以及错误检测与纠正功能的执行。在Linux操作系统架构中,驱动通常以模块的形式加载至内核之中,这种设计允许在非必要时期进行卸载操作,以此来有效节省系统资源。e1000e驱...
内容概要:本文围绕基于共识的捆绑算法(CBBA)在多智能体系统中的多任务分配问题展开研究,重点应用于远程太空船交会与维修的相对轨道操作(RPO)规划。通过Matlab代码实现了CBBA算法,系统地解决了多个航天器在复杂空间环境下协同执行多目标任务时的任务分配、路径规划与动态协商问题。研究详细展示了算法在任务分解、竞标机制、共识达成及冲突消解等方面的核心逻辑,验证了其在分布式决策、通信受限条件下的高效性与鲁棒性,并结合航天工程实际背景突出了算法的应用价值。该资源不仅提供完整的仿真代码,还包含详细的流程解析,有助于深入理解多智能体协同机制的设计原理。; 适合人群:具备控制理论、航天器动力学、多智能体系统或分布式优化背景的研究生、科研人员及航空航天领域工程技术人员,熟练掌握Matlab编程者尤佳。; 使用场景及目标:①应用于在轨服务、空间碎片清除、多航天器编队飞行、星座维护等多智能体协同任务的任务分配与规划;②为研究人员提供CBBA算法的实现范例,支撑其开展分布式任务规划算法的改进与扩展研究;③作为教学案例用于高级课程中讲解多智能体协同决策机制。; 阅读建议:建议结合Matlab代码逐模块分析算法实现过程,重点关注任务打包、竞标更新、共识收敛等关键环节,可尝试引入通信延迟、故障容错或障碍规避机制以进一步提升算法实用性。
内容概要:本文介绍了一种基于关键场景辨别算法的两阶段鲁棒微网优化调度方法,旨在有效应对风电等可再生能源出力不确定性带来的调度挑战。通过Matlab代码实现,构建了包含预调度与实时调整的两阶段鲁棒优化模型,第一阶段制定初始调度计划以应对不确定性,第二阶段根据实际运行数据进行修正,从而提升微网运行的经济性与可靠性。该方法结合场景生成与缩减技术,识别关键不确定性场景,降低计算复杂度,同时增强了调度方案的鲁棒性。文中还探讨了该方法与智能优化算法、机器学习及电力系统仿真工具的集成应用,展现了其在复杂综合能源系统中的广阔应用前景。; 适合人群:具备一定电力系统基础知识和Matlab编程能力,从事新能源、微网优化、不确定性建模与鲁棒调度等领域研究的科研人员、工程技术人员及研究生。; 使用场景及目标:①应用于高比例可再生能源接入的微电网优化调度,提高系统对源荷不确定性的适应能力与运行稳定性;②为科研人员提供可复现的两阶段鲁棒优化建模与求解范例,支撑高水平学术论文的复现、算法改进与创新研究。; 阅读建议:建议结合提供的Matlab代码与网盘资料,动手实践关键场景生成、不确定性建模、两阶段优化建模与求解全过程,重点关注鲁棒优化框架的设计逻辑与关键场景辨别的实现机制,同时参考文中提及的多种算法与工具,拓展研究思路与应用场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值