Skip to content

(mobile agent v3.5) [Bug] Agent 无法识别和打开系统应用(如电话),且 Click 失败后错误提示安装 #269

@Holidayrabbit

Description

@Holidayrabbit

问题描述

执行任务「打开电话查看最近通话记录」时,Agent 表现异常:

  1. STEP 0 & 1:VLM 正确识别到 Phone 图标并输出 click 动作,坐标 [116, 706]
  2. STEP 2:在 click 似乎未生效后,Agent 改为 open 动作,请求打开 "Phone"
  3. APP RESOLVER:LLM 返回 app: "",理由为「电话/Phone 不在已安装应用列表中」
  4. 错误提示[ACTION REQUIRED] Please install the app: Phone

电话是系统预装应用,不应被要求「安装」。

复现步骤

cd mobile_use
uv run run_gui_owl_1_5_for_mobile.py --instruction "打开电话查看最近通话记录"

根因分析

1. 应用列表不包含系统应用

utils.pyget_package_name(all_packages=False) 默认使用 pm list packages -3,只返回第三方应用,系统应用(电话、设置、联系人等)被排除。

# utils.py:156-163
def get_package_name(self, all_packages=False):
    flag = "" if all_packages else " -3"  # -3 仅第三方
    cmd = f"{self.adb_path}{self._device_flag}shell pm list packages{flag}"

2. packages.py 缺少电话/拨号器映射

packages.py 中未包含常见拨号器包名,如:

  • com.android.dialer (AOSP)
  • com.google.android.dialer (Google)
  • com.miui.dialer (小米)
  • 等厂商定制包名

因此 NAME_PACKAGE_DICT.get("Phone", [])NAME_PACKAGE_DICT.get("电话", []) 均为空。

3. Click 与 Open 的衔接逻辑缺失

当 VLM 在屏幕上识别到图标并执行 click 时,若 click 未生效(坐标缩放、延迟、界面变化等),Agent 会 fallback 到 open。但 open 依赖「已安装应用列表 + 包名映射」,两者都不包含系统应用,导致无法打开。

4. 错误提示不合理

系统应用无法通过「安装」获得,提示 Please install the app: Phone 对用户无意义。

建议改进

  1. 支持系统应用get_package_name() 增加选项或默认包含常见系统应用(电话、设置、联系人、相机等)
  2. 扩展 packages.py:补充电话/拨号器及常见系统应用的包名映射
  3. 优化 open 失败处理:当解析不到应用时,可尝试通过 adb shell am start + Intent 启动(如 android.intent.action.DIAL
  4. 区分系统/第三方:对系统应用给出「无法找到/无法启动」等更合理的提示,而非「请安装」

环境

  • 设备:Pixel 4a
  • MacOS

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions