2024-11-12
DL论文
00

目录

目的
论文总结
ANDROIDLAB的主要特性:
研究发现
未来展望
最终效果
操作任务和查询任务
任务形式的定义
可重复的设计
评估指标
数据构建
注释工具
训练过程
实验设置
主要结果
附加发现
其他发现
结论
任务详情
操作模式的细节
Android指令数据集的细节
Prompts of XML Mode for Text-only Testing
Prompts of SoM Mode for Multi-modal Testing
SeeAct Prompts for Multi-modal Testing
SeeAct Prompts for Text-only Testing
插件使用说明
附加结果
ReAct 和 SeeAct
1. ReAct框架
2. SeeAct框架
主要区别
总结

目的

大家都在玩app-agents,一个统一的android操作框架和评估方法是被需要的,这篇论文开源了他们的框架,名为AndroidLab。

https://arxiv.org/abs/2410.24024

https://github.com/THUDM/Android-Lab

论文总结

本文概述了ANDROIDLAB——一个面向Android系统自动化代理的训练和评估框架。ANDROIDLAB主要解决当前在训练和评估Android代理中缺乏系统性和统一性的问题。该框架包括一个多模态的操作环境和可重现的基准测试,支持大型语言模型(LLM)和多模态模型(LMM)的训练。ANDROIDLAB基准测试涵盖了138个任务,分布在9个不同的Android应用程序上,确保了任务的可重复性。

ANDROIDLAB的主要特性:

  1. 统一的操作环境:ANDROIDLAB支持基于XML和截图的模式(XML模式和SoM模式),并实现了ReAct和SeeAct框架,确保了不同模式下操作空间的一致性,从而可以公平地比较不同模型的性能。

  2. Android Instruct数据集:通过在线注释工具收集10.5k任务跟踪和94.3k步操作数据,用于细调和训练模型。实验显示,经过细调的模型性能显著提升,其中LLM成功率从4.59%提升至21.50%,LMM则从1.93%提升至13.28%。在线注释工具是论文自己开发的。

  3. 评估指标:使用任务完成率、子目标完成率、反向冗余率等多维度的指标评估模型的性能,以此确保评估的全面性和准确性。

研究发现

  • 基准测试结果:在文本模式中,GPT-4-1106-Preview表现最佳,达到31.16%的成功率;在多模态模式中,GPT-4o也取得了最高成功率。虽然闭源模型表现更优,但经过细调的开源模型已接近或超过部分闭源模型的效果。
  • 细调的影响:细调显著提升了开源模型在成功率和操作效率上的表现,使其在某些指标上接近闭源模型的水平。

未来展望

进一步优化开源模型的细调和任务冗余度的控制,将有助于提升Android代理的实用性和部署效率。

总体而言,ANDROIDLAB为Android系统的自动化代理研究提供了一个可靠且统一的框架,有助于推动该领域的发展。

最终效果

ReAct(Reasoning and Acting)框架结合了“推理”(Reasoning)和“操作”(Acting)两个步骤,目标是通过逐步推理来提高操作的准确性。这个框架在执行每个任务时,让模型在执行具体操作前,先“思考”当前情境下的最佳操作选择,即模型在输出操作指令之前,会生成一段内在的“思考过程”,然后根据这个推理过程输出下一步操作。通过这样的“先思考后行动”的模式,ReAct框架可以更好地处理复杂任务,减少错误操作。

SeeAct(Seeing and Acting)框架通过分离“环境感知”和“元素确认”来简化操作步骤。它将操作步骤分为两轮:第一轮先让模型观察当前环境并生成一个详细描述,明确下一个目标元素;在第二轮,模型根据这个目标描述生成具体的操作指令。因此,SeeAct在执行过程中先明确任务目标,再确认执行步骤,避免了因模糊的目标导致的误操作。

下图是论文做出来的成果,对于屏幕截图是对应SoM操作模式,而屏幕描述纯文本是对应XML操作模式。论文在9个app,138个任务上,GPT-4-1106-Preview表现最佳。

操作任务和查询任务

这些任务来源于常见的移动场景,分为两类:(a) 操作任务,代理必须完成一系列动作以达到目标,以及 (b) 查询任务,代理根据手机信息回答查询。

任务形式的定义

我们将每个任务输入形式化为一个4元组:任务(E, I, F, M)。

在这里,E代表任务的执行环境,在基准测试的上下文中,它是预打包的AVD(Android虚拟设备)镜像。这包括固定的手机屏幕尺寸、Android版本、API级别以及固定的App使用状态。

I表示任务的具体自然语言指令。为了避免测试中的混淆,我们用自然语言指定了完成任务所需的App。

F代表代理测试框架。

最后,M表示用于执行任务的骨干模型,主要指的是LLMs或LMMs。

因此,我们可以正式定义ANDROIDLAB中包含的两种类型的任务:

  • 操作任务。T(E, I, F, M) → (S1, ..., Sn)。这种类型的任务的输出是一系列连续的Android虚拟机状态。
  • 查询任务。T(E, I, F, M) → (S1, ..., Sn, A)。这种类型的任务评估代理根据探索后的状态序列回答特定问题的能力。模型必须探索环境以找到答案并输出正确的响应。

基于上述公式,我们设计了138个任务,包括93个操作任务和45个查询任务。详细信息请参见附录A。

可重复的设计

为了确保我们的评估反映现实世界中代理使用场景的适当难度和完全可重复性,我们在设计任务时考虑了以下因素:

• 固定的评估时间和空间:我们在每次评估开始时使用ADB命令将机器的时间和虚拟地理位置设置为预定值。

• 离线测试:所有测试App均在离线状态下运行,AVD镜像中预加载了使用记录,以确保在没有互联网连接的情况下正常使用。

• 预定义答案:对于基于查询的任务,我们预先对相应的App进行操作,以确保正确结果的唯一确定性。

评估指标

先前使用虚拟环境进行的评估依赖于间接指标,如单步准确性和操作路径匹配,导致评估不够精确。

ANDROIDLAB基准测试引入了一种基于任务完成情况的评估系统,该系统直接从设备和屏幕状态进行判断。我们的关键指标包括:

  • Success Rate 成功率:对于操作任务,我们将一个完整的任务划分为多个子目标,并为每个子目标的完成识别了特定的页面信息。通过检查和匹配特定的UI树元素,我们单独评估每个子目标的完成状态。当所有子目标都成功完成时,任务被认为成功执行。我们还设置了一些可以直接使用设备状态来确定是否正确完成的任务。对于查询任务,高级语言模型会验证模型预测的结果是否与标准答案匹配,避免了直接字符串比较带来的错误。我们在图4中提供了一个示例。
  • Sub-Goal Success Rate 子目标成功率:任务被分解为子目标,并依次评估完成情况。这个更细致的指标奖励那些具有更强理解和操作能力的模型。只有操作任务包括子目标成功率。
  • Reversed Redundancy Ratio 反向冗余比率:如先前的工作(Xing等人,2024年)所述,通过比较模型的操作路径长度与人类基准来衡量冗余。我们为已完成的任务计算这个比率,并取其倒数,因此更高的值表示冗余较少。我们不报告SR < 5,因为完成的任务太少,可能受到少数特殊值的影响。还应该强调的是,这个指标可能超过100,因为人类操作的步骤并不一定是最佳的。
  • Reasonable Operation Ratio 合理操作比率:这个指标评估操作后屏幕发生变化的比例。未改变的屏幕表明操作无效,因此被认为是不合理的。

通过结合这些指标,我们的评估系统为代理完成指定任务的表现提供了全面和精确的评估。

数据构建

数据构建的主要挑战包括生成可执行的Android指令和注释操作路径数据。我们的方法分为三个步骤:

  1. 任务推导与扩展:首先使用学术数据集(Rawles et al., 2023; Coucke et al., 2018)并手动编写指令来启动任务生成。接着,利用语言模型(LLMs)生成额外的任务,这些任务会经过审查并加入数据集中,确保生成的指令既现实又可执行。

  2. 自我探索:使用LLMs和LMMs进行自动化任务探索,任务完成后输出“finish”。最初使用人工选择来验证结果,但在收集了500条任务跟踪数据后,使用奖励模型替代了人工验证。

  3. 人工注释:这一过程包括四个步骤:

    • 指令检查:由注释员评估任务的可行性;
    • 初步熟悉:让注释员在执行任务前先熟悉应用程序界面;
    • 任务执行:注释员执行并记录每个任务步骤;
    • 交叉验证:由第二位注释员审核任务跟踪数据,确保其准确性。

通过这套结合自主与人工的过程,我们共生成了10,500条任务跟踪数据和94,300个步骤,并使用来自ANDROIDLAB基准测试中的726条任务跟踪数据和6,208个步骤进行训练。Android Instruct数据集的统计数据如图5所示,更多细节请见附录C。

注释工具

为更准确高效地记录操作轨迹和页面信息(XML),设计了一种注释工具,涉及页面信息获取和操作轨迹记录两部分。

  1. 页面信息获取

    • 当前,Android Debug Bridge (ADB) 是获取页面信息(XML)最常用的工具。它通过命令行从当前页面获取XML数据。然而,ADB在处理某些动态页面时会失败,特别是页面上有播放条、动画等持续活动的UI组件时。由于ADB会等待页面上的所有UI组件变为空闲状态,若超过预定时间,XML获取会中止。
    • 为了解决这一问题,工具重新实现了XML获取功能,使用Android无障碍服务,允许注释人员在合适的时机获取页面XML,从而避免了动态组件的干扰。
  2. 操作轨迹记录

    • 主要记录三种用户操作:点击、滑动和文本输入。点击和滑动操作由注释人员在手机上直接执行,同时通过ADB命令捕获屏幕事件。根据按下、释放位置及操作持续时间,判断操作是点击还是滑动。
    • 对于文本输入,通过ADB键盘一次性完成输入,减少所需注释次数。
    • 每次操作前,用户必须使用注释工具记录当前页面信息,确保记录的页面数据与实际操作时的页面状态一致。

该注释工具通过改进XML获取机制和优化操作记录流程,提升了在动态页面和复杂交互场景下的注释精度和效率。

训练过程

为了评估数据集在轻量级开源模型上的有效性,作者选择了以下模型作为训练骨干:

  • LLM(大语言模型):Llama-3.1-8B-Instruct、GLM-4-9B-Chat、Qwen2-7B-Instruct、Llama-3.2-11B-Vision-Instruct、CogVLM2(cogvlm2-llama3-chat-19B)。
  • LMM(轻量级模型):同样选择了这些模型的基础版本进行训练。

根据初步实验结果,训练基础模型的代理效果更好,因此除了Qwen2-VL-7B-Instruct(由于没有开源基础模型),作者选择了其他模型的基础版本进行微调。然而,仍然报告了Instruct版本作为基准,因为基础模型在没有进一步调优的情况下无法跟随指令。

训练细节

  • 批量大小:32
  • 最大序列长度:4096
  • 训练轮数:5轮
  • 学习率:1e-5

实验设置

  1. 实验评估设置

    • 在初步测试中,发现即使在指令中明确要求使用特定应用程序,代理仍无法正确启动应用程序,导致任务未能完成。为避免因单一原因产生的错误,正式实验中,我们直接在指定的应用程序中启动任务,并让代理继续执行。
    • 每个任务设置了最大执行步数为25步,且每次操作后,虚拟机会有3秒的响应间隔。所有模型的任务生成均采用贪心搜索策略。
  2. 基准模型

    • 文本输入能力的LLM(大型语言模型):用于XML模式的基准模型包括:GPT-4o(OpenAI,2023)、GPT-4-1106-Preview(OpenAI,2023)、Gemini-1.5-Pro(Team等,2024)、Gemini-1.0(Team等,2024)、GLM-4-PLUS(GLM等,2024)、Llama-3.1-8B-Instruct(Touvron等,2023)、GLM-4-9B-Chat(GLM等,2024)和Qwen2-7B-Instruct(Bai等,2023)。
    • 图像输入能力的LMM(大型多模态模型):用于SoM模式的基准模型包括:GPT-4o(OpenAI,2023)、GPT-4-Vision-Preview(OpenAI,2023)、Gemini-1.5-Pro(Team等,2024)、Gemini-1.0(Team等,2024)、Claude-3.5-Sonnet、Claude-3-Opus(Anthropic,2023)、Llama-3.2-11B-Vision-Instruct(Touvron等,2023)、Qwen2-VL-7B-Instruct(Wang等,2024)和CogVLM2(Wang等,2023b)。
    • 另外,还进一步评估了在ReAct和SeeAct框架下,GPT-4o和Gemini-1.5-Pro模型在这两种模式下的表现。

主要结果

根据表格1的数据显示,在XML模式下,GPT-4-1106-Preview表现最佳,成功率(SR)为31.16%,为该模式中最高,同时子目标成功率(Sub-SR)也达到了38.21%。虽然GPT-4o的SR略低(25.36%),但它在反向冗余比率(RRR)方面表现突出,达到107.45,表明其在减少不必要操作方面表现强劲。ROR指标显示,GPT-4系列的两个模型表现相似,大约86%的操作是合理的,但在效率上仍有提升空间。其他模型,如Gemini-1.5-Pro,表现中等,ROR约为80,且SR较低。

在SoM模式下,GPT-4o再次占据主导地位,SR为31.16%,子目标成功率(Sub-SR)为35.02%,均为该模式中的最高值。GPT-4-Vision-Preview紧随其后,但像Claude-3.5-Sonnet这样的模型在RRR(113.40)上超过了GPT-4o,显示出更高的任务完成效率,减少了冗余步骤。在SoM模式中的合理操作比率(ROR)方面,调优后的LLaMA3.2-11B-Vision模型表现最佳,ROR达到了92.57%,显示出最高的有效性。

微调:微调显著提升了多个模型在两个模式中的表现,尤其是提高了所有微调开源模型的成功率(SR)和ROR。例如,微调使得LLaMA3.1-8B的SR从2.17提高到23.91,Qwen2-7B的SR从4.35提高到19.57。同时,合理操作比率(ROR)也得到了改善,像CogVLM2这样的模型在微调后从17.97提升到85.58。

附加发现

指令调优的影响:指令调优显著提升了模型在XML和SoM模式下的表现,所有四个评估指标均有所提升。LLM的平均成功率从4.59%提升至21.50%,LMM的成功率从1.93%提升至13.28%。特别地,GLM4-9B的成功率提高至21.01%,其合理操作比率(ROR)提升至93.25,表明该模型的操作效率更高。此外,反向冗余比率(RRR)也表现出稳定的增长,GLM4-9B的RRR从54.43提高到74.81,显示出不必要操作的减少。

在SoM模式下,模型如CogVLM2、LLaMA3.2-11B和Qwen2-VL-7B在四个指标上都有显著提升。例如,Qwen2-VL-7B的成功率(SR)从3.62%提升至18.12%,其ROR提升至88.29,子成功率(Sub-SR)和RRR也有所改善,标志着任务分解和冗余度的降低。

调优后的最佳开源LLM接近GPT-4o的水平,而顶级LMM的表现已超过了Gemini-1.5-Pro,反映了在成功率、操作效率和任务执行等方面的全面进步。调优后的模型在有效操作(ROR)上也超过了大多数闭源模型。

其他发现

  1. 指令微调的影响
    指令微调显著提升了模型在四个评估指标上的表现,无论是在XML模式还是SoM模式下,LLM和LMM的平均成功率都有明显提高。

    • LLMs:成功率从4.59%提升至21.50%。
    • LMMs:成功率从1.93%提升至13.28%。
    • 例如,GLM4-9B的成功率提升至21.01%,其合理操作比(ROR)提高到93.25,表现出更高的操作效率。
    • 反向冗余比(RRR):持续提升,GLM4-9B的RRR从54.43提升至74.81,减少了不必要的操作。

    在SoM模式下,像CogVLM2、LLaMA3.2-11B和Qwen2-VL-7B等模型在所有指标上都取得了显著进展。

    • Qwen2-VL-7B的成功率(SR)从3.62%提升至18.12%,其ROR也上升至88.29。
    • 任务分解和冗余减少:Sub-SR和RRR也因微调而改善。
    • 微调后,表现最好的开源LLM接近GPT-4o的水平,顶尖的LMM则超越了Gemini-1.5-Pro,体现出成功率、操作效率和任务执行的全面提升。
    • 调整后的模型的有效操作(ROR)超越了大多数封闭源模型,展现了更高的精准度。
  2. 窗口大小的影响
    实验显示,在SoM模式下,使用不同大小的安卓虚拟机(VMs)时,性能在与常用智能手机屏幕匹配的情况下最佳(如Pixel 7 Pro、Pixel 8 Pro)。

    • 较小屏幕(如Pixel 3a):由于需要更多滚动,性能有所下降。
    • 较大屏幕(如Pixel Fold):由于横屏模式的挑战,性能也有所下降。
  3. 代理框架的分析
    分析了ReAct和SeeAct框架在XML和SoM模式下的表现。

    • ReAct:仅在XML模式下显著提升了性能。
    • SeeAct:由于模型在多模态输入上的推理限制,无法 consistently 提升性能。
    • SoM框架相比于仅使用bbox,表现更好(更多细节请见附录D.2)。
    • ReAct和SeeAct框架增加了token的使用量,影响了效率。
    • 在XML+ReAct设置下,模型平均使用67.89个tokens,而指令微调后的模型平均只使用了4.96个tokens。

这些发现表明,指令微调显著提升了模型的表现,尤其在操作效率和任务执行方面,而窗口大小和框架选择则对性能有一定的影响。

结论

本文介绍了ANDROIDLAB,这是一个包含标准操作环境和基准测试的框架,旨在评估与Android设备交互的智能体。通过整合XML和SoM操作模式,确保了动作空间的一致性,从而实现了不同模型之间的公平比较。ANDROIDLAB基准测试包括来自九个应用的138个任务,专注于可重复性和与现实世界的相关性,使得任务完成和进度评估更加精确。此外,本文还引入了Android Instruct数据集,包含了10.5k个轨迹和94.3k步,显著提升了开源模型的性能,特别是在进行微调时。

实验结果表明,经过微调的开源模型表现出显著的提升,而顶尖的闭源模型,如GPT-4o和Claude-3.5-Sonnet,仍然在成功率和效率方面领先。然而,微调显著提高了成功率和操作效率,帮助某些开源模型在某些指标上接近甚至超越了闭源模型。这些发现凸显了开源模型在提升移动智能体性能方面的潜力,表明通过进一步的微调和优化,开源解决方案能够缩小与闭源解决方案之间的差距。未来的工作可以集中在减少冗余和提高任务效率上,以增强Android智能体的实际部署能力。

任务详情

在本次实验中,选择了多款移动应用进行测试,具体应用如下:

  • Bluecoins:个人财务管理应用,用于追踪支出和收入。
  • Calendar:日历应用,用于组织日程和设置提醒。
  • Cantook:电子书阅读器,用于存储、管理和阅读电子书。
  • Clock:时钟应用,用于显示时间、设置闹钟和使用计时器。
  • Contacts:联系人管理应用,用于存储和组织联系信息。
  • Maps.me:离线地图应用,用于导航和探索位置。
  • PiMusic:音乐播放器应用,用于组织和播放本地存储的音乐文件。
  • Settings:设置应用,用于配置设备设置和偏好。
  • Zoom:视频会议应用,用于举办和加入在线会议。

这些应用的选择经过多次迭代,以确保它们适合评估目的。一个重要的选择标准是,每个应用都能独立运行,无需互联网连接或用户账户登录。这确保了评估可以在相同条件下一致地重复进行,消除了外部依赖并降低了隐私泄露的风险,从而保持了结果的可靠性和可重复性。

操作模式的细节

本文介绍了几种不同的操作模式,主要用于模型输出功能调用格式的动作。以下是每种模式的简要概述:

  1. XML模式 (XML Mode)
    在此模式下,模型接收任务描述、交互历史和当前的压缩XML信息作为输入。模型需要输出以函数调用格式表示的动作,并且这些动作应用于XML中显示的坐标。

  2. SoM模式 (SoM Mode)
    与XML模式不同,SoM模式下模型接收的输入是任务描述、交互历史和带有标记的当前截图(参考Yang等,2023a)。模型同样输出函数调用格式的动作,但与XML模式不同,动作是根据截图中指定的标记索引来执行的。

  3. ReAct模式 (ReAct Mode)
    在此模式下,模型采用基于(Yao等,2022b)的ReAct提示进行操作。包括文本模式和多模态模式测试,文本模式基于B.1节的XML模式,而多模态模式则基于B.2节的SoM模式。ReAct模式的特点是,模型在输出动作之前,通过逐步思考的提示进行推理。

  4. SeeAct模式 (SeeAct Mode)
    SeeAct模式最初设计用于网页浏览器(参考Zheng等,2024),为了适应安卓环境,进行了适当的修改。最终的提示设计包括图1为多模态测试,图2为文本测试。在多模态测试中,输入信息通过手机截图提供;而在文本测试中,则通过压缩XML提供。模型的任务是首先生成动作的详细描述及其对应的元素和参数(第一轮),然后在第二轮生成预期的函数调用格式。

这些模式的共同目标是让模型基于不同的输入信息(如截图或XML)生成适当的动作,并以函数调用的形式输出,支持多种设备环境下的应用。

Android指令数据集的细节

C.1 人类标注的细节

在构建数据集过程中,采用了众包标注方法。为了确保标注者的隐私不被泄露,采取了以下措施:

  1. 标注前告知:在标注开始前,明确告知标注者所标注的数据将用于模型微调,并且部分数据会开源。标注者若不同意,可选择退出标注过程。
  2. 标注过程中的隐私保护:所有标注数据在标注者本地存储。如果标注者认为某些数据涉及隐私泄露,可以选择不使用这些数据或跳过相关任务。
  3. 数据处理:标注完成后,所有敏感信息(如用户名和聊天记录)会被遮蔽和替换,确保数据隐私。被处理的数据不会被开源。

所有标注者都签署了正式合同,并根据合理的标准获得报酬。

C.2 标注者的任务说明

标注者的任务如下:

  • 任务概述:每个标注任务会指定一个目标任务,例如“使用Amap(高德地图)导航到XXX”。标注者需使用手机完成任务,并按照以下流程准确执行并记录。

  • 任务执行要求

    • 标注者需在计算机上安装ADB(Android设备桥接)以控制手机,并安装相应的APK应用。
    • 由于任务涉及收集低级信息,手机需要开启多个权限。但数据不会实时传输,传输的内容包括操作详情、操作前后的截图和相应的XML文件(仅包含当前页面的信息)。标注者可以查看并决定是否保留标注数据。
    • 如果标注过程中涉及截图或其他不希望用于训练的数据,标注者可以选择:
      1. 跳过截图,或指定隐藏截图的部分内容。
      2. 跳过整个目标任务。
      3. 跳过当前应用相关的所有任务。
  • 数据用途说明:标注者的数据仅用于训练模型,且不会用于其他目的。

  • 数据上传:完成标注后,标注者需要一次性上传所有任务数据。我们设计了一个插件,将所有内容存储在一个统一的文件夹中。

标注流程

  • 完整的标注由多个操作步骤(称为“序列”或“轨迹”)组成。每个操作步骤在执行时都会记录一次,单步操作的定义会在标注文档中详细说明。
  • 标注者需要根据文档说明安装并使用插件进行数据标注。

通过以上详细的流程和隐私保护措施,确保了数据标注的准确性和标注者的隐私安全,同时确保数据可用于模型的训练。

Prompts of XML Mode for Text-only Testing

Prompts of SoM Mode for Multi-modal Testing

你是一个经过训练的智能代理,能够在智能手机上完成某些任务。你将收到一张智能手机应用界面的截图,截图上的交互UI元素用数字标签进行标注,从1开始。
你可以调用以下函数来与这些标签化的UI元素进行交互,以控制手机操作:

  1. tap(index: int)
    点击标有给定编号的UI元素。
    例如:tap(5)

  2. text(input_str: str)
    在输入框中输入给定的文本。
    例如:text("Hello, world!")
    如果屏幕底部显示“ADB键盘打开”,则可以使用此功能。
    如果你认为前一步操作后显示了键盘,可以尝试使用此功能输入文本。

  3. long_press(index: int)
    长按标有给定编号的UI元素。
    例如:long_press(5)

  4. swipe(index: int, direction: str, dist: str)
    在指定方向和距离滑动UI元素。
    “direction”是表示四个方向之一的字符串:上、下、左、右。
    “dist”表示滑动的距离,可以是以下三种选项之一:短、中、长。
    例如:swipe(21, "up", "medium")

  5. back()
    模拟按下手机的返回按钮。

  6. home()
    模拟按下手机的主页按钮。

  7. wait(interval: int)
    暂停执行指定的秒数。默认为5秒。

  8. finish(message: str)
    结束任务并提供最终输出。你可以将任务的最终输出作为字符串返回。
    例如:finish("任务完成")

现在,请根据给定的任务说明和标记截图,思考并调用所需的操作来继续完成任务。你只需要提供具体的操作函数,格式如下:

操作: <正确的函数调用,以继续完成任务。如果你认为任务已完成或没有需要做的事情,应使用finish函数。如果操作无法进行,你可以尝试使用不同的操作方法。请注意,每次只能执行一个操作。>

如果任务完成,应该使用finish函数来避免额外的操作。

如果在操作过程中进入了死循环或任务未按预期进展,可以尝试更改操作方式。

SeeAct Prompts for Multi-modal Testing

你正在协助人类一步步完成智能手机导航任务。在每个阶段,你可以通过截图查看手机界面,并了解当前步骤之前的历史操作。你需要决定下一步要执行的第一个操作。

以下是所有允许操作的描述:
“点击”、“输入”、“滑动”、“长按”、“主页”、“返回”、“进入”、“等待”。

你需要完成以下任务:{task}
历史操作:{previous_actions}

下面的截图展示了你当前看到的智能手机界面。请逐步思考,并明确当前阶段下一步操作的目标。详细说明用户将操作的界面元素、它的具体位置和相应的操作。

为了成功完成任务,请遵循以下规则:

  1. 你只能根据当前观察发出有效操作。
  2. 每次只能发出一个操作。
  3. 当你认为任务已完成时,请结束任务。

image.png

(重申)
首先,重申你的下一个目标元素、其具体位置以及相应的操作。

(最终答案)
下面是一个多项选择题,选项是智能手机中的元素。根据截图,找出每个选项在智能手机中的位置和内容,考虑它们的文本内容和路径细节。然后,确定哪个元素与你的目标元素匹配,如果你的操作涉及到元素,选择最佳匹配项。

{option_prompt}
请按照以下格式完成你的答案。确保你的答案严格遵循提供的格式。

预定义的函数如下:

def do(action, element=None, **kwargs): """ 执行对Android设备的单个操作。 参数: action (str): 指定要执行的操作。有效选项有: "Tap"、"Type"、"Swipe"、"Long Press"、"Home"、"Back"、"Enter"、"Wait"。 element (list, 可选): 定义操作的屏幕区域或起始点。 - 对于"Tap"和"Long Press",提供坐标[x1, y1, x2, y2]以定义从左上角(x1, y1)到右下角(x2, y2)的矩形区域。 - 对于"Swipe",提供坐标[x1, y1, x2, y2]来定义路径,或者[x, y]作为起点。如果省略,则默认为屏幕中心。 关键字参数: text (str, 可选): 输入的文本。仅在"Type"操作时需要。 direction (str, 可选): 滑动的方向。有效方向有"up"、"down"、"left"、"right"。 如果操作是"Swipe"时必须提供此参数。 dist (str, 可选): 滑动的距离,选项有"long"、"medium"、"short"。默认值为"medium"。 如果操作是"Swipe"且方向已指定,则此参数为必需。 返回: 无。设备状态或前台应用状态将在执行操作后更新。 """ ... def finish(message=None): """ 结束程序。可以在退出前打印提供的消息。 参数: message (str, 可选): 退出前打印的消息。默认值为None。 返回: 无 """ ...

你的代码应简洁易读,每次只能执行 一行代码。不允许使用while语句和if-else控制结构。请不要在最终标准化格式部分留下任何解释,并且这一部分应该清晰明确。

例如,如果你想从位于[680, 2016][760, 2276]的元素向上滑动一个长距离:

do(action="Swipe", element=[680, 2016, 760, 2276], direction="up", dist="long")

例如,如果你认为任务已经完成并想结束并输出消息:

finish(message="The alarm on 9:00 AM weekday has been set")

image.png

SeeAct Prompts for Text-only Testing

你正在协助人类一步步完成智能手机导航任务。在每个阶段,你可以通过压缩的布局信息查看手机界面,并了解在当前步骤之前由你自己决定执行的历史操作。你需要决定下一步要执行的第一个操作。

以下是所有允许操作的描述:
“点击”、“输入”、“滑动”、“长按”、“主页”、“返回”、“进入”、“等待”。

你需要完成以下任务:{task}
历史操作:{previous_actions}

下面是压缩的布局信息,展示了你当前看到的智能手机界面:
{layout_info}

请逐步思考,并明确当前阶段下一步操作的目标。详细说明用户将操作的界面元素、它的具体位置和相应的操作。

为了成功完成任务,请遵循以下规则:

  1. 你只能根据当前观察发出有效操作。
  2. 每次只能发出一个操作。
  3. 当你认为任务已完成时,请结束任务。

(重述) 首先,重述您下一个目标元素、其详细位置以及相应的操作。 (最终回答) 以下是一个多项选择题,选项是智能手机中的元素。根据压缩的布局信息,找出每个元素在智能手机中的位置和内容,结合文本内容和路径细节,确定是否与您的目标元素匹配。如果您的操作涉及某个元素,请选择最匹配的选项。 {option_prompt} 请使用以下格式总结您的答案。确保严格遵守提供的格式。 预定义函数如下:

def do(action, element=None, **kwargs): """ 执行对安卓设备的单一操作。 参数: action (str): 指定要执行的操作。有效选项包括: "Tap"、"Type"、"Swipe"、"Long Press"、"Home"、"Back"、"Enter"、"Wait"。 element (list, 可选): 定义操作的屏幕区域或起始点。 - 对于 "Tap" 和 "Long Press",提供坐标 [x1, y1, x2, y2] 来定义从左上角 (x1, y1) 到右下角 (x2, y2) 的矩形。 - 对于 "Swipe",提供坐标,可以是 [x1, y1, x2, y2] 定义路径 或者 [x, y] 作为起始点。如果没有提供,默认为屏幕中心。 关键字参数: text (str, 可选): 要输入的文本,仅在 "Type" 操作时需要。 direction (str, 可选): 滑动的方向。有效方向包括 "up"、"down"、"left"、"right"。 如果是 "Swipe" 操作时,必须指定此参数。 dist (str, 可选): 滑动的距离,选项包括 "long"、"medium"、"short"。 默认为 "medium"。如果指定了滑动方向,该参数是必需的。 返回: 无。执行操作后,设备状态或前景应用状态将更新。 """ ... def finish(message=None): """ 结束程序。如果提供了消息,会在退出前输出该消息。 参数: message (str, 可选): 退出前要输出的消息。默认为 None。 返回: 无 """ ...

您的代码应该简洁、易读,每次只能一行代码。不允许使用 while 语句和 if-else 控制语句。最终的标准化格式部分不应包含任何解释,且应明确清晰。 如果您想从位于 [680,2016][760,2276] 的元素向上滑动,且滑动距离为长:

do(action="Swipe", element=[680, 2016, 760, 2276], direction="up", dist="long")

如果您认为任务已完成并希望以消息结束:

finish(message="9:00 AM 工作日的闹钟已设置")

插件使用说明

安装ADB并连接手机到电脑

  1. 通过USB线将手机连接到电脑。
  2. 在手机上启用开发者选项和USB调试模式:
    • 进入设置 > 开发者选项 > Android调试,勾选“允许USB调试”。
    • 若无法找到开发者选项,进入设置 > 关于手机,点击“版本号”七次以启用开发者选项。
  3. 重新连接手机,点击允许文件传输/USB调试/更高权限。确保电脑上也允许连接。
  4. 在开发者模式中,关闭以下动画选项以提高通过ADB命令获取XML信息的成功率:
    • 窗口动画比例
    • 转场动画比例
    • 动画持续时间比例
  5. 使用命令 adb devices,确保正确显示设备信息。

安装ADB键盘

  1. 下载并安装ADB键盘APK:使用命令 adb install <APK路径>
  2. 启用权限并同意安装。
  3. 安装完成后,在手机设置中将ADB键盘设置为默认输入法。可以使用命令:
    • ime enable com.android.adbkeyboard/.AdbIME
    • ime set com.android.adbkeyboard/.AdbIME
  4. 成功安装后,在文本框中会看到“ADB Keyboard ON”的提示。

运行测试脚本

  1. 运行 adb devices,确保设备信息正确。
  2. 在ADB shell中运行以下命令:
    • input keyevent KEYCODE_BACK
    • input keyevent KEYCODE_HOME
    • input keyevent KEYCODE_ENTER
  3. 打开文本输入框,使用ADB命令输入字母“a”来确认设置成功。

注释插件使用说明

  1. 在手机上执行以下操作:

    • 点击或滑动:直接在手机上进行,点击时保持0.2到0.5秒。
    • 文本输入:如果ADB键盘已安装,点击文本框并输入文字。
    • 按下按钮:有预设的三个按钮,Home、Back、Enter。
    • 完成任务:完成任务后点击“Finish”按钮,若任务需要回答,填写答案后点击“OK”。
  2. 完成后,命令行将显示保存路径,包含所有保存的信息。可删除错误记录或敏感信息。

关键点总结

  1. 每次开始注释前,使用 adb devices 确保连接成功。
  2. 每次注释操作时,需重新打开 app_for_xxx/dist/label(.exe)
  3. 存储路径不能包含中文字符。
  4. 在每个操作前点击“Begin”,并等待出现“Begin your operation...”提示。
  5. 每次操作完成后,等待命令行显示“Operation completed”后再点击“Begin”进行下一操作。

按照这些步骤可以确保操作成功并避免无效数据的生成。

附加结果

D.1 不同APP任务的详细结果

表5展示了不同模型在各个APP中正确完成的任务数量,没有使用ReAct和SeeAct框架。结果显示,GPT-4o和GPT-4-1106-Preview表现较好,分别完成了78个和79个任务。在XML模式下,GPT-4-1106-Preview表现突出,完成了43个任务。而在SoM模式中,GPT-4o表现最佳,完成的任务数量远高于其他模型。大多数模型在“联系人”和“设置”等任务中的成功率较高。总体来说,GPT-4o和GPT-4-1106-Preview在XML和SoM模式下显著优于其他模型,而Gemini-1.5-Pro在多个APP中完成了合理数量的任务。

表6展示了在不同APP中使用ReAct和SeeAct框架后,各模型的性能提升。显著提高的是GPT-4o,其在XML+ReAct模式下完成的任务数量从35个增加到46个,在SoM+ReAct模式下从43个增加到44个。Gemini-1.5-Pro也受益,任务数量从26个增加到43个。特别在“Bluecoins”等APP中,提升尤为显著,尤其是在高复杂度、多步骤任务中。GPT-4o在所有框架中都表现领先,展示了ReAct和SeeAct框架如何改善模型性能。

D.2 不同多模态训练模式的详细结果

表7提供了不同多模态训练模式的比较。在相同的训练数据和基础模型设置下,BBOX模式去除了屏幕上指定的掩模集合。值得注意的是,像AITW这样的数据集仅提供点击位置,而不提供边界框(BBOX),因此从这些数据集中学习更具挑战性。

D.3 SeeAct和ReAct方法的详细结果

图8展示了SeeAct和ReAct框架对模型性能的影响,涵盖了所有四个评估指标。

ReAct 和 SeeAct

ReAct(Reasoning and Acting)和SeeAct(Seeing and Acting)是两种不同的操作框架,它们在任务执行时的思维方式和步骤上有所区别,具体如下:

1. ReAct框架

ReAct框架的核心思想是先推理,再行动。在执行任务时,模型首先进行推理,通过分析任务的上下文和当前状态来决定下一步的操作。这一过程包括:

  • 推理阶段:模型在执行操作前,会生成一段内在的“思考过程”,评估当前情境下的最佳行动步骤。
  • 行动阶段:在思考后,模型基于推理结果选择最合适的操作,并将其执行。

这种框架的优点在于,它可以通过逐步推理提高操作的准确性,尤其适用于复杂的任务和决策场景。它有助于减少错误操作,尤其在多步任务中能够提供更高的可靠性。

2. SeeAct框架

SeeAct框架的核心思想是先观察,再行动。这个框架的操作流程分为两个阶段:

  • 观察阶段:模型首先观察当前的环境状态(如屏幕截图或XML数据),然后生成一个详细描述,明确下一个目标元素。这个描述不仅仅是视觉上的感知,还包括对目标元素的理解和定位。
  • 确认阶段:在明确了目标之后,模型会根据这个目标描述生成具体的操作指令。这一阶段的关键是“确认”目标和下一步行动,以确保任务的准确性。

SeeAct框架的优势在于,它通过先“确认”目标,减少了因为目标不明确或判断错误而导致的误操作。尤其适合需要精确定位和操作的任务。

主要区别

  • 思维模式

    • ReAct侧重于推理,通过分析当前情境来决定最适合的行动。
    • SeeAct侧重于感知和确认,先观察环境,确保任务目标明确,然后再执行操作。
  • 执行顺序

    • ReAct是“推理 → 执行”。
    • SeeAct是“观察 → 确认目标 → 执行”。
  • 适用场景

    • ReAct适用于需要复杂推理和决策的任务,特别是多步骤的复杂任务。
    • SeeAct适用于需要明确目标和高精度操作的任务,如精确点击或元素定位。

总结

ReAct框架强调在行动之前进行推理,以提升决策的准确性和任务的成功率;而SeeAct框架则通过确保目标明确并准确确认后再进行操作,减少了因目标不清晰而产生的误操作。这两者各自有其独特的优势,可以根据具体的任务需求选择适用的框架。

ReAct: https://arxiv.org/abs/2210.03629

ReAct框架的核心在于通过强化推理与行动的协同作用,来提升模型在视觉常识推理中的表现。具体来说,ReAct结合了两个关键组件:

推理(Reasoning):通过分析输入的图像或视频内容,模型从中提取出潜在的视觉常识,并进行推理,推断出一些与图像相关的潜在事实或因果关系。 行动(Acting):在推理的基础上,模型可以采取某种“行动”,如生成相应的文本描述或与环境进行交互,验证推理结果,进而获得更为准确的理解。

SeeAct: https://arxiv.org/abs/2401.01614

项目:https://osu-nlp-group.github.io/SeeAct/

如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:Dong

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!