【免费下载链接】android_world
AndroidWorld is an environment and benchmark for autonomous agents
AndroidWorld 是一个用于构建和评测自主手机操作智能体(autonomous agents)的环境与基准,内置了 SeeAct 这一经典 Agent。SeeAct 的核心设计是两阶段推理:先让视觉大模型基于截图"想清楚下一步做什么动作",再通过一道多选题让模型从 UI 元素列表中"选出目标元素",从而完成元素定位(Grounding)。本文带你拆解这套"先生成动作、再定位元素"的完整流程,看懂它如何兼顾了决策质量与定位稳定性。
为什么需要两阶段推理?
🤔 让视觉大模型一步到位输出"点击坐标 (x, y)"很容易失败:模型可能输出格式混乱、坐标偏移,甚至编造不存在的坐标。SeeAct 的做法是把一个开放问题拆成两个子问题:
| 阶段 | 要解决的问题 | 输入 | 输出 |
|---|---|---|---|
| 第一阶段:动作生成(Action Generation) | "下一步该做什么?" | 任务描述 + 历史动作 + 截图 | 自然语言动作推理(含目标元素描述) |
| 第二阶段:元素定位(Grounding) | "目标元素具体是哪一个?" | 第一阶段输出 + UI 元素候选列表(A/B/C…) | 标准三行格式:ELEMENT / ACTION / VALUE |
这样"决策"与"定位"各司其职:第一阶段可以专注推理,第二阶段则把开放式的坐标预测降级为封闭式选择题,大幅降低解析失败率。整个实现集中在 seeact.py 与 seeact_utils.py 两个文件中。
阶段一:动作生成——先想清楚"做什么"
SeeAct 的系统提示词要求模型像人类一样逐步操作 Android 设备,可用的动作包括点击(CLICK)、长按、滑动(SWIPE)、输入文本(INPUT TEXT)、打开应用(OPEN APP)、按键(ENTER/HOME/BACK)等,完整动作清单定义在 VALID_ACTIONS。
第一阶段的用户提示词由 generate_action_generation_prompt 拼接而成,包含任务目标、历史动作和一段引导模型"分步思考"的指令。其推理路径分为四步(见 SEEACT_ONLINE_QUESTION_DESCRIPTION_NEW_EXP4):
- 当前屏幕识别:判断现在处于什么界面;
- 历史动作分析:结合截图逐步复盘之前每个动作的意图,特别关注最后一步(例如刚做过 INPUT TEXT 时通常还需要按 Enter 确认);
- 截图细节分析:逐块检查屏幕状态,弥补文字历史记录的信息缺失;
- 决定下一步动作:结合手机操作习惯与 App 设计逻辑,明确指出目标元素、位置与操作。
此时模型输出的是自然语言推理,不要求精确格式——为第二阶段的严格解析留出了容错空间。
阶段二:元素定位——用多选题"圈出"目标元素
这一阶段的关键准备,是把无障碍树(accessibility tree)里的 UI 元素变成一组"选项"。
1️⃣ 构建选项列表
format_and_filter_elements 会过滤掉无效元素,并为每个元素生成一条人类可读的描述(_get_element_description),例如:
'"Send" button'——带文本的按钮'a "To" text box with the text "Alice" ...'——文本输入框'a switch with the text "Wi-Fi" that is checked'——开关及其状态
同时用 format_action_options 给选项分配 A、B、C……字母标签(超过 26 个自动升级为 AA、AB 等,最多支持 676 个选项),并约定选项按元素在屏幕上的位置从上到下、从左到右排列,方便模型对照截图定位。
2️⃣ 多选题提示词
第二阶段提示词由 generate_grounding_prompt 生成,结构为"复述 → 选择题 → 最终格式"(见 SEEACT_CHOICE_PROMPT_DICT):
- (Reiteration) 复述:先复述第一阶段得出的目标元素、位置和对应操作,强化上下文;
- (Multichoice Question) 选择题:要求模型逐个检查选项,结合文本内容与截图细节判断哪个选项匹配目标元素;多个匹配时选最可能的一个,无匹配时选兜底项;
- (Final Answer) 标准格式:输出严格的三行格式:
ELEMENT: 选项字母(如 A;SWIPE 时可省略) ACTION: 动作类型,从 VALID_ACTIONS 中选择 VALUE: 附加输入(如要输入的文本、滑动方向 up/down/left/right、应用名;多数动作为 None)3️⃣ 两次 API 调用的消息结构
两阶段的请求消息分别由 create_action_generation_messages_payload 和 create_grounding_messages_payload 构造。值得注意的是,第二阶段会把第一阶段的输出作为 assistant 消息保留在对话中,再以 user 消息追加选择题提示词——相当于让模型"接着自己的思路回答",保证两个阶段上下文连贯。
解析与执行:从字母回到真实动作
拿到模型回复后,step 方法 按以下流程处理:
- 解析:extract_element_action_value 逐行提取 ELEMENT/ACTION/VALUE,并通过 _validate_action 校验合法性(如 CLICK 必须有 ELEMENT、SWIPE 的方向必须是四向之一);
- 映射:convert_seeact_action_to_json_action 把 SeeActAction 转换为环境统一的 JSONAction,选项字母会被反查回元素的真实索引(例如模型选 A,就定位到列表中第 0 个元素);
- 执行:通过 ADB 动作在模拟器上真实执行(点击坐标来自元素的 UI 树数据,而非模型猜测);
- 容错:解析失败时不会抛异常中断,而是记录
No Operation with error: ...并返回 UNKNOWN 动作,下一轮重试; - 收尾:当动作为 TERMINATE 时,done 标志置位,任务结束。
测试用例 seeact_test.py 完整演示了这一闭环:模型回复ELEMENT: A / ACTION: CLICK / VALUE: None时,Agent 正确解析出 CLICK 动作并映射到第 0 个元素"AnImage" image。
如何运行 SeeAct Agent
SeeAct 已在 run.py 中注册,配置好环境(见 README 的安装步骤)并设置模型密钥后,只需一条命令即可运行:
export OPENAI_API_KEY=your-key python run.py --suite_family=android_world --agent_name=seeact --perform_emulator_setup📌 小贴士:--perform_emulator_setup只需在首次运行时加一次;运行完成后,generate_full_report 可以把每个任务的过程截图与动作描述汇总成 HTML 报告,方便逐步回放 Agent 的决策轨迹。
总结:三点对 Agent 设计的启发
- 拆解难问题:把"生成动作 + 定位元素"这个开放性难题拆成两步,第二步用多选题这种封闭形式,稳定性和可解析性显著提升;
- 双通道信息融合:截图负责"看懂画面",UI 元素树负责"精确定位",两者互补,模型无需自己猜坐标;
- 严格输出 + 宽容容错:最终答案要求严格三行格式,但解析失败只降级为"无操作"而非崩溃,保证长程任务能持续运行。
这套两阶段范式不只适用于手机操作,对任何"视觉理解 + 界面操作"的 Agent 项目都是值得借鉴的参考实现。
【免费下载链接】android_world
AndroidWorld is an environment and benchmark for autonomous agents
相关推荐
先写旋律再配伴奏:YuE 两阶段生成架构到底妙在哪
先写旋律再配伴奏:YuE 两阶段生成架构到底妙在哪 2025 至 2026 年的 AI 音乐赛道已经卷成一片红海:Suno 迭代到 v5/v6,Mureka、M
音乐生成大模型人工智能媒体生成如何用ruyiPage XPath Picker自动生成元素定位代码:完整录制教程
如何用ruyiPage XPath Picker自动生成元素定位代码:完整录制教程 ruyiPage 是一款面向 AI 分析与数据采集的 Python Web
VOZEB PRO 五阶段创作闭环揭秘:从创作简报到自动视觉复盘,AI规划如何让生成更稳定
VOZEB PRO 五阶段创作闭环揭秘:从创作简报到自动视觉复盘,AI规划如何让生成更稳定 VOZEB PRO 是一款 AI 创作工作台,把"创作简报、视觉方向
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考