方案全景策略判断2026-03-29

Agent 编排层与执行层技术栈

手机自动化里的 Agent,不应该直接拥有“看到页面就决定支付”的绝对权限;它更应该是一个被策略引擎、状态机、确定性执行器和审计系统包住的规划器。

标签:OpenClaw / Midscene / Droidrun / Android-Lab

手机自动化里的 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"
  ]
}

适合放在这一层的方案:

Policy Engine

这是生产系统最容易被忽视,但最关键的一层。

它负责:

  • 校验当前任务是否允许继续
  • 校验是否已经到达 支付前必须人工确认 的红线
  • 限制 Agent 不得自行修改收货地址、支付方式、身份证号、手机号等敏感字段
  • 约束某些动作只能通过显式批准后执行

没有这层,Agent 只是一个更难审计的脚本执行器。

Shopping State Machine

购物流程必须显式状态化。推荐至少拆成:

  1. app_boot
  2. login_check
  3. home_ready
  4. search_input
  5. search_results
  6. product_detail
  7. sku_selection
  8. cart_review
  9. coupon_selection
  10. checkout_review
  11. approval_required
  12. completed
  13. blocked

所有动作都应带状态前提和失败回退条件,而不是让 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 树

推荐优先级:

  1. openatx/uiautomator2
  2. 原生 adb shell inputam start
  3. 必要时 Appium 兼容 QA 团队
  4. Airtest 只做视觉兜底

记忆与观察必须结构化

不要让 Agent 只靠长上下文记住“刚才选了什么券、看到哪个 SKU、当前在哪个步骤”。生产上应该单独维护:

  • 当前 App、当前页面、当前 activity
  • 最近 10 步动作
  • 目标商品条件
  • 当前选中的 SKU
  • 当前订单金额
  • 是否出现验证码、支付页、地址变更、登录失效

建议保存成任务侧状态对象,而不是只存在模型上下文里。

失败恢复策略

失败类型处理策略
页面未加载等待 + 重试截图 + 重新获取 activity
弹窗遮挡走弹窗处理器,先识别关闭或确认
登录失效进入 blocked,交给人工或专门登录子流程
目标商品缺货回到结果页,换备选 SKU
券不可用降级到不领券路径,但记录原因
到达支付页强制进入 approval_required
文本识别歧义回退到 selector / OCR 交叉确认

任务日志必须记录什么

  • 任务 ID、设备 ID、账号 ID
  • 每一步的状态、动作、耗时、截图
  • 关键页面快照
  • 失败原因归类
  • 是否触发人工审批
  • 最终停留页面

没有这些日志,后面根本没法调 prompt、修状态机、拆风控。

最后结论

对你要做的“手机自动化调用 Agent”,最对的思路不是把 OpenClaw 当成手机框架本身,而是把它放到最上层;真正稳定控制 Android 的仍然要靠 UiAutomator2 / ADB / Appium 这类执行器,而购物业务再套一层状态机和审批流。