大家都在玩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支持基于XML和截图的模式(XML模式和SoM模式),并实现了ReAct和SeeAct框架,确保了不同模式下操作空间的一致性,从而可以公平地比较不同模型的性能。
Android Instruct数据集:通过在线注释工具收集10.5k任务跟踪和94.3k步操作数据,用于细调和训练模型。实验显示,经过细调的模型性能显著提升,其中LLM成功率从4.59%提升至21.50%,LMM则从1.93%提升至13.28%。在线注释工具是论文自己开发的。
评估指标:使用任务完成率、子目标完成率、反向冗余率等多维度的指标评估模型的性能,以此确保评估的全面性和准确性。
进一步优化开源模型的细调和任务冗余度的控制,将有助于提升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中包含的两种类型的任务:
基于上述公式,我们设计了138个任务,包括93个操作任务和45个查询任务。详细信息请参见附录A。
为了确保我们的评估反映现实世界中代理使用场景的适当难度和完全可重复性,我们在设计任务时考虑了以下因素:
• 固定的评估时间和空间:我们在每次评估开始时使用ADB命令将机器的时间和虚拟地理位置设置为预定值。
• 离线测试:所有测试App均在离线状态下运行,AVD镜像中预加载了使用记录,以确保在没有互联网连接的情况下正常使用。
• 预定义答案:对于基于查询的任务,我们预先对相应的App进行操作,以确保正确结果的唯一确定性。
先前使用虚拟环境进行的评估依赖于间接指标,如单步准确性和操作路径匹配,导致评估不够精确。
ANDROIDLAB基准测试引入了一种基于任务完成情况的评估系统,该系统直接从设备和屏幕状态进行判断。我们的关键指标包括:
通过结合这些指标,我们的评估系统为代理完成指定任务的表现提供了全面和精确的评估。
数据构建的主要挑战包括生成可执行的Android指令和注释操作路径数据。我们的方法分为三个步骤:
任务推导与扩展:首先使用学术数据集(Rawles et al., 2023; Coucke et al., 2018)并手动编写指令来启动任务生成。接着,利用语言模型(LLMs)生成额外的任务,这些任务会经过审查并加入数据集中,确保生成的指令既现实又可执行。
自我探索:使用LLMs和LMMs进行自动化任务探索,任务完成后输出“finish”。最初使用人工选择来验证结果,但在收集了500条任务跟踪数据后,使用奖励模型替代了人工验证。
人工注释:这一过程包括四个步骤:
通过这套结合自主与人工的过程,我们共生成了10,500条任务跟踪数据和94,300个步骤,并使用来自ANDROIDLAB基准测试中的726条任务跟踪数据和6,208个步骤进行训练。Android Instruct数据集的统计数据如图5所示,更多细节请见附录C。
为更准确高效地记录操作轨迹和页面信息(XML),设计了一种注释工具,涉及页面信息获取和操作轨迹记录两部分。
页面信息获取:
操作轨迹记录:
该注释工具通过改进XML获取机制和优化操作记录流程,提升了在动态页面和复杂交互场景下的注释精度和效率。
为了评估数据集在轻量级开源模型上的有效性,作者选择了以下模型作为训练骨干:
根据初步实验结果,训练基础模型的代理效果更好,因此除了Qwen2-VL-7B-Instruct(由于没有开源基础模型),作者选择了其他模型的基础版本进行微调。然而,仍然报告了Instruct版本作为基准,因为基础模型在没有进一步调优的情况下无法跟随指令。
训练细节:
实验评估设置:
基准模型:
根据表格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)上也超过了大多数闭源模型。
指令微调的影响:
指令微调显著提升了模型在四个评估指标上的表现,无论是在XML模式还是SoM模式下,LLM和LMM的平均成功率都有明显提高。
在SoM模式下,像CogVLM2、LLaMA3.2-11B和Qwen2-VL-7B等模型在所有指标上都取得了显著进展。
窗口大小的影响:
实验显示,在SoM模式下,使用不同大小的安卓虚拟机(VMs)时,性能在与常用智能手机屏幕匹配的情况下最佳(如Pixel 7 Pro、Pixel 8 Pro)。
代理框架的分析:
分析了ReAct和SeeAct框架在XML和SoM模式下的表现。
这些发现表明,指令微调显著提升了模型的表现,尤其在操作效率和任务执行方面,而窗口大小和框架选择则对性能有一定的影响。
本文介绍了ANDROIDLAB,这是一个包含标准操作环境和基准测试的框架,旨在评估与Android设备交互的智能体。通过整合XML和SoM操作模式,确保了动作空间的一致性,从而实现了不同模型之间的公平比较。ANDROIDLAB基准测试包括来自九个应用的138个任务,专注于可重复性和与现实世界的相关性,使得任务完成和进度评估更加精确。此外,本文还引入了Android Instruct数据集,包含了10.5k个轨迹和94.3k步,显著提升了开源模型的性能,特别是在进行微调时。
实验结果表明,经过微调的开源模型表现出显著的提升,而顶尖的闭源模型,如GPT-4o和Claude-3.5-Sonnet,仍然在成功率和效率方面领先。然而,微调显著提高了成功率和操作效率,帮助某些开源模型在某些指标上接近甚至超越了闭源模型。这些发现凸显了开源模型在提升移动智能体性能方面的潜力,表明通过进一步的微调和优化,开源解决方案能够缩小与闭源解决方案之间的差距。未来的工作可以集中在减少冗余和提高任务效率上,以增强Android智能体的实际部署能力。
在本次实验中,选择了多款移动应用进行测试,具体应用如下:
这些应用的选择经过多次迭代,以确保它们适合评估目的。一个重要的选择标准是,每个应用都能独立运行,无需互联网连接或用户账户登录。这确保了评估可以在相同条件下一致地重复进行,消除了外部依赖并降低了隐私泄露的风险,从而保持了结果的可靠性和可重复性。
本文介绍了几种不同的操作模式,主要用于模型输出功能调用格式的动作。以下是每种模式的简要概述:
XML模式 (XML Mode)
在此模式下,模型接收任务描述、交互历史和当前的压缩XML信息作为输入。模型需要输出以函数调用格式表示的动作,并且这些动作应用于XML中显示的坐标。
SoM模式 (SoM Mode)
与XML模式不同,SoM模式下模型接收的输入是任务描述、交互历史和带有标记的当前截图(参考Yang等,2023a)。模型同样输出函数调用格式的动作,但与XML模式不同,动作是根据截图中指定的标记索引来执行的。
ReAct模式 (ReAct Mode)
在此模式下,模型采用基于(Yao等,2022b)的ReAct提示进行操作。包括文本模式和多模态模式测试,文本模式基于B.1节的XML模式,而多模态模式则基于B.2节的SoM模式。ReAct模式的特点是,模型在输出动作之前,通过逐步思考的提示进行推理。
SeeAct模式 (SeeAct Mode)
SeeAct模式最初设计用于网页浏览器(参考Zheng等,2024),为了适应安卓环境,进行了适当的修改。最终的提示设计包括图1为多模态测试,图2为文本测试。在多模态测试中,输入信息通过手机截图提供;而在文本测试中,则通过压缩XML提供。模型的任务是首先生成动作的详细描述及其对应的元素和参数(第一轮),然后在第二轮生成预期的函数调用格式。
这些模式的共同目标是让模型基于不同的输入信息(如截图或XML)生成适当的动作,并以函数调用的形式输出,支持多种设备环境下的应用。
C.1 人类标注的细节
在构建数据集过程中,采用了众包标注方法。为了确保标注者的隐私不被泄露,采取了以下措施:
所有标注者都签署了正式合同,并根据合理的标准获得报酬。
C.2 标注者的任务说明
标注者的任务如下:
任务概述:每个标注任务会指定一个目标任务,例如“使用Amap(高德地图)导航到XXX”。标注者需使用手机完成任务,并按照以下流程准确执行并记录。
任务执行要求:
数据用途说明:标注者的数据仅用于训练模型,且不会用于其他目的。
数据上传:完成标注后,标注者需要一次性上传所有任务数据。我们设计了一个插件,将所有内容存储在一个统一的文件夹中。
标注流程:
通过以上详细的流程和隐私保护措施,确保了数据标注的准确性和标注者的隐私安全,同时确保数据可用于模型的训练。
你是一个经过训练的智能代理,能够在智能手机上完成某些任务。你将收到一张智能手机应用界面的截图,截图上的交互UI元素用数字标签进行标注,从1开始。
你可以调用以下函数来与这些标签化的UI元素进行交互,以控制手机操作:
tap(index: int)
点击标有给定编号的UI元素。
例如:tap(5)
text(input_str: str)
在输入框中输入给定的文本。
例如:text("Hello, world!")
如果屏幕底部显示“ADB键盘打开”,则可以使用此功能。
如果你认为前一步操作后显示了键盘,可以尝试使用此功能输入文本。
long_press(index: int)
长按标有给定编号的UI元素。
例如:long_press(5)
swipe(index: int, direction: str, dist: str)
在指定方向和距离滑动UI元素。
“direction”是表示四个方向之一的字符串:上、下、左、右。
“dist”表示滑动的距离,可以是以下三种选项之一:短、中、长。
例如:swipe(21, "up", "medium")
back()
模拟按下手机的返回按钮。
home()
模拟按下手机的主页按钮。
wait(interval: int)
暂停执行指定的秒数。默认为5秒。
finish(message: str)
结束任务并提供最终输出。你可以将任务的最终输出作为字符串返回。
例如:finish("任务完成")
现在,请根据给定的任务说明和标记截图,思考并调用所需的操作来继续完成任务。你只需要提供具体的操作函数,格式如下:
操作: <正确的函数调用,以继续完成任务。如果你认为任务已完成或没有需要做的事情,应使用finish函数。如果操作无法进行,你可以尝试使用不同的操作方法。请注意,每次只能执行一个操作。>
如果任务完成,应该使用finish函数来避免额外的操作。
如果在操作过程中进入了死循环或任务未按预期进展,可以尝试更改操作方式。
你正在协助人类一步步完成智能手机导航任务。在每个阶段,你可以通过截图查看手机界面,并了解当前步骤之前的历史操作。你需要决定下一步要执行的第一个操作。
以下是所有允许操作的描述:
“点击”、“输入”、“滑动”、“长按”、“主页”、“返回”、“进入”、“等待”。
你需要完成以下任务:{task}
历史操作:{previous_actions}
下面的截图展示了你当前看到的智能手机界面。请逐步思考,并明确当前阶段下一步操作的目标。详细说明用户将操作的界面元素、它的具体位置和相应的操作。
为了成功完成任务,请遵循以下规则:
(重申)
首先,重申你的下一个目标元素、其具体位置以及相应的操作。
(最终答案)
下面是一个多项选择题,选项是智能手机中的元素。根据截图,找出每个选项在智能手机中的位置和内容,考虑它们的文本内容和路径细节。然后,确定哪个元素与你的目标元素匹配,如果你的操作涉及到元素,选择最佳匹配项。
{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")
你正在协助人类一步步完成智能手机导航任务。在每个阶段,你可以通过压缩的布局信息查看手机界面,并了解在当前步骤之前由你自己决定执行的历史操作。你需要决定下一步要执行的第一个操作。
以下是所有允许操作的描述:
“点击”、“输入”、“滑动”、“长按”、“主页”、“返回”、“进入”、“等待”。
你需要完成以下任务:{task}
历史操作:{previous_actions}
下面是压缩的布局信息,展示了你当前看到的智能手机界面:
{layout_info}
请逐步思考,并明确当前阶段下一步操作的目标。详细说明用户将操作的界面元素、它的具体位置和相应的操作。
为了成功完成任务,请遵循以下规则:
(重述) 首先,重述您下一个目标元素、其详细位置以及相应的操作。 (最终回答) 以下是一个多项选择题,选项是智能手机中的元素。根据压缩的布局信息,找出每个元素在智能手机中的位置和内容,结合文本内容和路径细节,确定是否与您的目标元素匹配。如果您的操作涉及某个元素,请选择最匹配的选项。 {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并连接手机到电脑
adb devices
,确保正确显示设备信息。安装ADB键盘
adb install <APK路径>
。ime enable com.android.adbkeyboard/.AdbIME
ime set com.android.adbkeyboard/.AdbIME
运行测试脚本
adb devices
,确保设备信息正确。input keyevent KEYCODE_BACK
input keyevent KEYCODE_HOME
input keyevent KEYCODE_ENTER
注释插件使用说明
在手机上执行以下操作:
完成后,命令行将显示保存路径,包含所有保存的信息。可删除错误记录或敏感信息。
关键点总结
adb devices
确保连接成功。app_for_xxx/dist/label(.exe)
。按照这些步骤可以确保操作成功并避免无效数据的生成。
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(Reasoning and Acting)和SeeAct(Seeing and Acting)是两种不同的操作框架,它们在任务执行时的思维方式和步骤上有所区别,具体如下:
ReAct框架的核心思想是先推理,再行动。在执行任务时,模型首先进行推理,通过分析任务的上下文和当前状态来决定下一步的操作。这一过程包括:
这种框架的优点在于,它可以通过逐步推理提高操作的准确性,尤其适用于复杂的任务和决策场景。它有助于减少错误操作,尤其在多步任务中能够提供更高的可靠性。
SeeAct框架的核心思想是先观察,再行动。这个框架的操作流程分为两个阶段:
SeeAct框架的优势在于,它通过先“确认”目标,减少了因为目标不明确或判断错误而导致的误操作。尤其适合需要精确定位和操作的任务。
思维模式:
执行顺序:
适用场景:
ReAct框架强调在行动之前进行推理,以提升决策的准确性和任务的成功率;而SeeAct框架则通过确保目标明确并准确确认后再进行操作,减少了因目标不清晰而产生的误操作。这两者各自有其独特的优势,可以根据具体的任务需求选择适用的框架。
ReAct: https://arxiv.org/abs/2210.03629
ReAct框架的核心在于通过强化推理与行动的协同作用,来提升模型在视觉常识推理中的表现。具体来说,ReAct结合了两个关键组件:
推理(Reasoning):通过分析输入的图像或视频内容,模型从中提取出潜在的视觉常识,并进行推理,推断出一些与图像相关的潜在事实或因果关系。 行动(Acting):在推理的基础上,模型可以采取某种“行动”,如生成相应的文本描述或与环境进行交互,验证推理结果,进而获得更为准确的理解。
SeeAct: https://arxiv.org/abs/2401.01614
本文作者:Dong
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!