手机自动化里的 Agent,不应该直接拥有“看到页面就决定支付”的绝对权限;它更应该是一个被策略引擎、状态机、确定性执行器和审计系统包住的规划器。
推荐的技术分层
任务入口 / API / 控制台
|
v
Agent Planner (OpenClaw / Midscene / Custom LLM)
|
v
Policy Engine + Shopping State Machine
|
v
Tool Router
| | |
v v v
ADB UiAutomator2 OCR / Vision
| | |
+----------+------------+
|
v
真机 / 云机 / 模拟器
每一层具体负责什么
Agent Planner
负责任务拆解,而不是直接碰底层设备。
它应该输出类似这样的结构化意图:
{
"goal": "在京东搜索 65W 氮化镓充电器并挑选自营旗舰款",
"current_state": "search_results",
"next_action": "refine_filter",
"constraints": [
"price <= 149",
"jd_self_operated = true",
"do_not_pay"
]
}
适合放在这一层的方案:
- OpenClaw
- Midscene.js
- 自建基于 LLM + tools 的 planner
Policy Engine
这是生产系统最容易被忽视,但最关键的一层。
它负责:
- 校验当前任务是否允许继续
- 校验是否已经到达
支付前必须人工确认的红线 - 限制 Agent 不得自行修改收货地址、支付方式、身份证号、手机号等敏感字段
- 约束某些动作只能通过显式批准后执行
没有这层,Agent 只是一个更难审计的脚本执行器。
Shopping State Machine
购物流程必须显式状态化。推荐至少拆成:
app_bootlogin_checkhome_readysearch_inputsearch_resultsproduct_detailsku_selectioncart_reviewcoupon_selectioncheckout_reviewapproval_requiredcompletedblocked
所有动作都应带状态前提和失败回退条件,而不是让 Agent 在页面里自由游走。
OpenClaw、Midscene、Droidrun 分别放哪
OpenClaw
OpenClaw README 的定位是通用 computer-use agent framework。它适合作为统一任务编排层,管理会话、skills、记忆、步骤执行和日志。
对手机自动化来说,它更像“脑和总线”。
Midscene
Midscene README 明确把 Android 放进支持范围,而且官方文档还提供作为 OpenClaw Skills 的模式。
对手机自动化来说,它适合作为“带视觉理解能力的 skill 层”:
- 读取屏幕
- 描述当前界面
- 从页面中找目标区域
- 调用设备动作
Droidrun
Droidrun Quickstart 更像产品化执行环境。它适合:
- 快速 PoC
- 先验证多设备、多任务 agent 调用是不是好用
- 先跑自然语言驱动真机
但如果你要可控可审计,仍然要在它外面包自己的状态机和审批流。
执行层为什么必须保留确定性工具
下面这些动作,必须由确定性执行器完成:
- 点击坐标或元素
- 获取当前 activity
- 返回、主页、切后台
- 输入文本
- 截图
- 拉起指定 App / deep link
- 导出 UI 树
推荐优先级:
openatx/uiautomator2- 原生
adb shell input与am start - 必要时
Appium兼容 QA 团队 Airtest只做视觉兜底
记忆与观察必须结构化
不要让 Agent 只靠长上下文记住“刚才选了什么券、看到哪个 SKU、当前在哪个步骤”。生产上应该单独维护:
- 当前 App、当前页面、当前 activity
- 最近 10 步动作
- 目标商品条件
- 当前选中的 SKU
- 当前订单金额
- 是否出现验证码、支付页、地址变更、登录失效
建议保存成任务侧状态对象,而不是只存在模型上下文里。
失败恢复策略
| 失败类型 | 处理策略 |
|---|---|
| 页面未加载 | 等待 + 重试截图 + 重新获取 activity |
| 弹窗遮挡 | 走弹窗处理器,先识别关闭或确认 |
| 登录失效 | 进入 blocked,交给人工或专门登录子流程 |
| 目标商品缺货 | 回到结果页,换备选 SKU |
| 券不可用 | 降级到不领券路径,但记录原因 |
| 到达支付页 | 强制进入 approval_required |
| 文本识别歧义 | 回退到 selector / OCR 交叉确认 |
任务日志必须记录什么
- 任务 ID、设备 ID、账号 ID
- 每一步的状态、动作、耗时、截图
- 关键页面快照
- 失败原因归类
- 是否触发人工审批
- 最终停留页面
没有这些日志,后面根本没法调 prompt、修状态机、拆风控。
最后结论
对你要做的“手机自动化调用 Agent”,最对的思路不是把 OpenClaw 当成手机框架本身,而是把它放到最上层;真正稳定控制 Android 的仍然要靠 UiAutomator2 / ADB / Appium 这类执行器,而购物业务再套一层状态机和审批流。