UFO : A UI-Focused Agent for Windows OS Interaction
Status: Reading
Author: Bo Qiao, Chaoyun Zhang, Dongmei Zhang, Liqun Li, Minghua Ma, Qinglong Zhang, Qingwei Lin, Saravan Rajmohan, Shilin He, Si Qin, Xiangyu Zhang, Yu Kang
Institution: 微软(Microsoft)
Publisher: arXiv
Summary: UFO 是一种以 UI 为中心的 Agent,利用 GPT-Vision,针对 Windows 操作系统上的应用程序量身定制,能够独立完成用户请求。UFO 采用了双 Agent 框架,一个 Agent 用于仔细观察和分析应用程序的GUI和控制信息,另一个 Agent 则是负责选择合适的应用程序。这使得 UFO 能够在各个应用程序内以及跨应用程序进行操作,以满足用户请求。
Score /5: ⭐️⭐️⭐️⭐️
Type: Paper
链接: https://arxiv.org/abs/2402.07939
代码是否开源: 开源
代码链接: https://github.com/microsoft/UFO
论文精读
引言
基于 LLM 的 Agent 极大地扩展了 LLM 的计划、观察、记忆和响应行动的能力,能够通过模拟类人决策过程来承担复杂的任务。此外,多智体则是一个更有效和可扩展的框架,有利于根据各自的优势将任务分配给各个 Agent,促进 Agent 之间的协作或竞争,以有效地完成复杂的任务。
将多模态大模型用于导航和控制应用程序 GUI 目前已经成为一个突出且新兴的研究领域,这篇论文提出的 UFO 就是一个基于多智体的,专门用于满足用户请求和在 Windows 操作系统中操作应用程序的 Agent。UFO 采用双 Agent 框架,一个 Agent 用于 GUI 和观察和控制,另一个 Agent 则是负责选择合适的应用程序。
之所以设置成两个 Agent,是因为日常生活中用户的请求经常要跨越多个应用程序,UFO 结合了应用程序切换机制,允许其在需要时切换到不同的应用程序。
作者还对 UFO 进行了多功能测试,针对9个常用的Windows应用程序,精心设计了50项任务,涵盖了反映用户日常需求的各种场景。
方法
UFO 能够理解用户以自然语言表达的请求,并将其分解为一系列逐步的子任务,然后观察应用程序的 UI 屏幕截图,并对其控制元素进行操作以实现总体目标。
整体框架
UFO 的框架如下图所示,包括两个 Agent:
- 应用程序选择Agent(AppAgent),其任务是选择应用程序来满足用户请求。当请求跨越多个应用程序并且任务在前一个应用程序中部分完成时,该Agent还可以切换到不同的应用程序;
- 动作选择Agent(ActAgent),负责在所选应用程序上迭代执行动作,直到任务在特定应用程序内成功结束。
两个Agent都利用 GPT-Vision 的多模态来理解应用程序 UI 并满足用户的请求,利用控制交互模块来执行动作,从而对系统产生切实的影响。
AppAgent的输入为完整的桌面截图和可供参考的可用应用程序列表,方便AppAgent的决策过程。随后,AppAgent 选择合适的应用程序并制定全面的全局计划来完成请求,并且将该计划传递给 ActAgent。
确定了合适的应用程序之后,UFO会将其聚焦在桌面上。然后 ActAgent 启动,在每个操作选择步骤之前,UFO 都会捕获当前应用程序 UI 窗口的屏幕截图,并注释所有可用控件。UFO 还会记录每个控件的信息,以供 ActAgent 观察。ActAgent 的任务是选择要操作的控件,然后通过控制交互模块选择要在所选控件上执行的特定操作。该决定基于 ActAgent 的观察、其先前的计划以及其操作记忆。
执行后,UFO 为未来步骤构建局部计划,并继续进行下一个操作选择步骤。此递归过程将持续进行,直到用户请求在所选应用程序中成功完成,用户请求的一个阶段就此结束。
在用户请求跨越多个应用程序的场景中,ActAgent完成当前应用程序的任务后会将任务委托给AppAgent,切换到不同的应用程序,从而启动第二阶段的请求。这个迭代过程一直持续到用户请求完全完成为止。
AppAgent
AppAgent负责选择一个活动的应用程序来满足用户请求或在必要时切换到新的应用程序。此外,AppAgent还要构建一个全面的全局计划来协调整个任务。
AppAgent的输入:
- 用户请求(User Request)
- 桌面截图(Desktop Screenshots):如果有多个屏幕的话,则会拼接成一张;
- 应用程序信息(Application Information):可用的活动应用程序详细信息的列表,包括其名称和类型;
- 记忆(Memory):包括之前的步骤、评论、行动和执行结果;
- 示例(Examples):应用程序选择的文本示例,作为任务的演示。
AppAgent的输出:
- 观察(Observation):当前桌面窗口截图的详细描述;
- 思路(Thoughts):完成给定任务所需的步骤,遵循思想链 (CoT) 范式;
- 所选应用程序(Selected Application):所选应用程序的标签和名称;
- 状态(Status):任务状态,表示为“CONTINUE”或“FNISH”;
- 全局计划(Global Plan):完成用户请求的后续行动计划,通常是全局且粗粒度的计划;
- 评论(Comment):要提供的附加评论或信息,包括简要的进度摘要和需要强调的要点。
AppAgent判断任务的状态,如果认为任务完成则输出“FINISH”。
ActAgent
ActAgent作为AppAgent之后的下游实体,负责在选定的应用程序上执行特定操作来满足用户请求。
ActAgent的输入:
- 用户请求(User Request)
- 桌面截图(Desktop Screenshots):包括三部分:上一帧截图、当前帧干净的截图和当前帧标注过的截图(增加了控件);
- 控制信息(Control Information):为所选应用程序中的操作启用的控件的名称和类型的列表;
- 记忆(Memory):包括之前的推理、评论、行动和执行结果;
- 示例(Examples):动作选择的文本示例,作为演示。
跟AppAgent不同的是,桌面截图这一块ActAgent包括了三部分:
- 上一张屏幕截图中最后选择的控件以红色矩形(即 )突出显示,有助于理解最后一步的操作执行情况并分析该操作的影响;
- 干净的屏幕截图可以了解应用程序的状态,不会受到注释的阻碍;
- 带注释的屏幕截图,用数字标记每个控件,有助于更好地理解 UI 元素的功能和位置。
此外,记忆模块在ActAgent中有两个关键作用。首先,它作为提醒工具,使ActAgent能够分析过去的行动,减少重复无效行动的可能性。其次,它建立了跨应用程序通信的重要渠道。执行结果(如从文档中提取的文本或图像描述)存储在记忆模块中。ActAgent可以在需要时有选择地整合这些信息,比如在撰写包含不同来源文本的邮件时。
ActAgent的输出:
- 观察(Observation):当前应用程序窗口的屏幕截图的详细描述,以及最后操作是否生效的分析;
- 思路(Thoughts):当前行动决策背后的逻辑思维和基本原理过程;
- 所选控件(Selected Control):为操作选择的控件的标签和名称;
- 操作(Function):应用于控件的特定操作函数及其参数;
- 状态(Status):任务状态
- CONTINUE:需要进一步操作;
- FINISH:任务已完成;
- PENDING:当前操作需要用户确认;
- SCREENSHOT:需要进一步的屏幕截图来注释;
- APP_SELECTION:当任务在当前应用程序上完成并且需要切换到不同的应用程序时;
- 局部计划(Local Plan):为未来的行动制定更精确、更细粒度的计划,以完全满足用户的要求;
- 评论(Comment):其他意见或信息,包括简要的进度摘要、重点内容或计划的更改。
控制交互
为了在应用程序控件上执行 ActAgent 所选择的操作,UFO 将其转换为可执行操作,编写 pywinauto 代码对控件进行操作。UFO 利用 pywinauto 检查应用程序的所有可操作控件,检索它们的精确位置和边界框以方便注释。
UFO 重点关注以下10种控件类型:
控件 | 描述 |
---|---|
Button | 按钮是用户界面元素,用户可以与之交互以触发操作。单击该按钮通常会启动特定操作或命令。 |
Edit | 编辑控件允许用户输入和编辑文本或数字数据。它通常用于用户可以键入信息的字段,例如文本框或搜索栏。 |
TabItem | 选项卡项是选项卡控件的一部分,用于将内容组织到多个页面中。用户可以在不同的选项卡项之间切换以访问不同的信息或功能集。 |
Document | 文档控件代表文档视图体系结构中的文档或页面。它通常用于显示和管理文档或大文本块。 |
ListItem | 列表项是列表控件中的元素,以列表格式呈现数据。用户可以选择列表中的各个项目并与之交互。 |
MenuItem | 菜单项是菜单控件的一部分,提供命令或选项列表。用户可以单击菜单项来触发特定操作或浏览应用程序功能。 |
TreeItem | 树项是树控件中的一个节点,以分层结构组织信息。用户可以展开或折叠树项目以浏览分层数据集。 |
ComboBox | 组合框是文本框和下拉列表的组合。它允许用户直接在文本框中键入值,或通过打开下拉菜单从预定义列表中进行选择。 |
Hyperlink | 超链接使用户能够导航到另一个位置或资源。它们通常用于提供对外部网站、文档或应用程序中特定部分的轻松访问。 |
ScrollBar | 滚动条允许用户滚动浏览大于可见区域的内容。它提供了一种在窗口或控件内垂直或水平导航的方法。 |
对于应用于控件的具体功能,作者选择了pywinauto支持的常见且广泛使用的鼠标操作,以及开发了定制的动作。
操作 | 描述 |
---|---|
Click | 用鼠标单击控制项,可以选择左键单击或右键单击、单击或双击 |
SetText | 将文本输入到可编辑控件中,模仿键盘行为。 |
Annotate | 捕获当前应用程序窗口的屏幕截图并在 GUI 上注释控制项。 |
Summary | 根据干净的屏幕截图总结当前应用程序窗口的观察结果。 |
GetText | 检索控件的文本信息。 |
Scroll | 垂直或水平滚动控制项以使隐藏内容可见。 |
在每一步中,ActAgent 都会从此可用列表中选择一个操作,以在应用程序中选定的 UI 控件上执行。
Special Design Consideration
- 互动模式
UFO 为用户提供了进行交互式和迭代交互的能力,而不是坚持一次性完成。完成任务后,用户可以灵活地请求UFO增强之前的任务,建议UFO承担全新的任务,或者执行操作来协助UFO完成可能不熟练的任务,例如提供密码输入。
- 动作定制
控制交互模块的列表并不详尽,并且可以超出 Windows UI 自动化的限制进行高度扩展和自定义。这种可扩展性对于定制框架以满足特定用户需求至关重要,允许合并键盘快捷键、宏命令、插件等功能。
例如summary()就是一个例子,它利用UFO的多模态能力来根据需要观察和描述屏幕截图。
- 控制过滤
在应用程序的 GUI 中,Windows UI Automation 可以检测数百个控制项,每个控制项都可用于操作。然而,对所有这些控件进行注释可能会使应用程序 UI 屏幕截图变得混乱,阻碍单个项目的视图并生成大量列表,这可能会给 UFO 带来挑战。一些控件可能不太满足用户请求,因此过滤机制对于排除某些控件并简化 UFO 决策过程至关重要。
UFO采用双级控制滤波方法,包括硬级和软级。在硬级别,候选控件基于具有高相关性和流行度的特定控件类型进行约束,软过滤机制,使UFO能够动态确定是否重新选择更简洁的指定控件列表。当 UFO 感知到过多的控件时,就会触发这种自适应过滤方法。
- 计划反思
应用程序 UI 的实际状态可能并不总是与预期条件一致。例如,如果 UFO 最初计划在下一步中单击“新电子邮件”按钮,但该按钮在当前 UI 中不可见,则 UFO 可能需要首先导航到“主页”,然后找到“新电子邮件” “ 按钮。因此,计划和行动都应做出相应调整。
UFO 通过提示词在每一个决策步骤中不断修改其计划,让它根据需要可以偏离原来的航向。这种自适应方法增强了 UFO 对不断变化的应用状态的响应能力。
- 安全机制
系统内某些操作的敏感性,例如文件删除等操作导致的不可逆转的更改。UFO 可以认识到这些潜在风险,采用了安全机制,在执行此类操作之前寻求用户确认。
敏感操作 | 描述 |
---|---|
Send Action for a Message or Email | 启动“发送”操作(例如单击发送按钮)被视为敏感操作,因为已发送的消息或电子邮件将无法撤回。 |
Deleting or Modifying Files and Folders | 涉及删除或修改文件和文件夹的操作,尤其是位于关键系统目录或包含重要用户数据的文件和文件夹。 |
Closing a Window or Application | 由于可能导致数据丢失或系统崩溃,关闭窗口或应用程序被标记为敏感。 |
Accessing Webcam or Microphone | 未经用户明确同意而访问网络摄像头或麦克风被视为敏感行为,以解决隐私问题。 |
Installing or Uninstalling Software | 与安装或卸载软件应用程序相关的操作由于对系统配置和潜在安全风险的影响而被标记为敏感。 |
Browser History or Password Retrieval | 检索敏感用户数据(例如浏览器历史记录或存储的密码)被视为敏感操作,可能导致隐私泄露。 |
实验
基准、基线和指标
为了全面评估各种 Windows 应用程序的性能,作者开发了一个名为 WindowsBench 的基准测试。该基准测试包含 50 个用户请求,涵盖日常任务中常用的 9 个流行 Windows 应用程序。选定的应用程序包括 Outlook、照片、PowerPoint、Word、Adobe Acrobat、文件资源管理器、Visual Studio Code、微信和 Edge 浏览器。这些应用程序满足工作、交流、编码、阅读、网页浏览等不同目的,保证了评估的多样性和全面性。对于每个应用程序,作者设计了 5 个不同的请求,另外 5 个请求涉及跨多个应用程序的交互。
鉴于缺乏现有的 Windows Agent Baseline,作者选择 GPT-3.5 和 GPT-4 作为基准模型。由于这些模型缺乏直接与应用程序交互的能力,因此通过提示词指示它们提供分步说明来完成用户请求。然后,一个人充当他们的代理人来执行这些操作。
在评估指标上,作者对每个请求从四个角度评估:成功率、步骤、完成率和保障率。成功指标确定代理是否成功完成请求。步骤是指代理完成任务所采取的行动数量,作为效率的指标。完成率是正确步骤数与总步骤数的比率。最后,安全率衡量的是当请求涉及敏感操作时,UFO 请求用户确认的频率。考虑到 GPT-V 潜在的不稳定性,每次可能会产生不同的输出,我们对每个请求进行三次测试,并选择完成率最高的一个。
局限性
- 可用的 UI 控件和操作目前受到 pywinauto 和 Windows UI Automation支持的限制。 UFO 目前不支持偏离此标准和后端的应用程序和控件。
- UFO 在探索不熟悉的应用程序 UI 时面临的挑战,这可能是利基或不常见的。在这种情况下,UFO 可能需要大量时间来导航和识别正确的操作。为了解决这个问题,我们建议利用在线搜索引擎的知识作为 UFO 的外部知识库。分析搜索结果中的文本和基于图像的指南将使 UFO 能够提炼出更精确和详细的计划来完成对不熟悉的应用程序的请求,从而增强其适应性和通用性。