概要
UFO这个单词太显眼了,外星人?
本文不是要讲外星人,而是微软新推出的一个针对LLM的开源框架。
官方地址:
文绉绉的说法是,UFO是一种创新的以用户界面为中心(UI-Focused)的智能体,旨在满足 Windows 操作系统上应用程序的用户请求。
UFO 采用双代理框架,精细地观察和分析 Windows 应用程序的图形用户界面和控制信息。这使得智能体能够无缝地在单个应用程序内部及其之间导航和操作,以满足用户请求。
该框架还包含一个控制交互模块,使得智能体的行为无需人工干预就可以落地,并实现了完全自动化执行。
因此,UFO 将繁琐且耗时的过程转变为仅通过自然语言命令就可实现的简单任务。
以下来说说我的感受和理解。
本文中的截图或者说配图都是用微信小程序【字形绘梦】制作,谢谢该软件的免费支持. AI课程大学堂 2img.ai
研究背景
智能体
近来,大型语言模型的应用不断涌现并蓬勃发展。其中,智能体的出现显著扩展了 LLM 的能力。智能体通过观察、规划、记忆和反应等能力进行行动。例如,AutoAgents能够根据不同的任务,自适应地生成和协调多个智能体,构建一个多智能体协作团队。
基于 LLM 的 GUI 智能
一个值得注意的应用方向是基于视觉大型语言模型(VLM)构建智能体,并与软件的用户界面(UI)或图形化用户界面(GUI)互动。用户可以用自然语言表达请求,智能体能够将其落实到物理设备中。这促使了大语言模型转变为大行动模型(Large Action Models)。使智能体的决策能够体现在物理行动中,并产生切实的现实世界影响。已有多篇工作将基于LLM 的智能体应用在手机端UI上自动完成用户命令。
但是,专为 Windows 系统定制智能体,以实现用户请求的这个方向仍然未被探索。由于 Windows 在计算机操作系统市场中占据较高份额,而且有海量应用程序和图形用户界面建立在该系统的基础上。此外,Windows 中存在许多多步骤和跨应用的操作,大大降低了用户体验和效率。
主要内容
主要组件
UFO包括:
(1)一个应用选择智能体(AppAgent)
(2)一个动作选择智能体(ActAgent)
这两个智能体利用 GPT-Vision 的多模态能力来理解应用程序界面并满足用户的请求。
(3)系统还包含一个控制交互模块,它将智能体生成的动作落实到应用程序中做执行。
系统的流程为:在接收到用户请求后,AppAgent开始对需求进行分析。它从当前活动的应用程序中选择一个合适的应用程序,并制定一个全局计划来完成请求。这个计划然后传递给ActAgent。
一旦选定了合适的应用程序,应用程序会被聚焦在桌面上。然后系统会捕获当前应用程序用户界面的截图,并注释所有可用控件。
ActAgent的任务是选择界面中的一个控件进行操作,随后通过控制交互模块执行在所选控件上的具体动作。这一过程递归地持续进行,直到用户请求在选定的应用程序内成功完成。
如果用户请求跨越多个应用程序,ActAgent完成当前应用程序上的任务后,会要求AppAgent切换到后续的应用程序。这一迭代过程持续进行,直到用户请求的所有方面都完全完成。
AppAgent
AppAgent负责选择一个活跃的应用程序来满足用户请求,或在必要时切换到新的应用程序。其架构如上图所展示。AppAgent接受以下信息作为输入:
- User Request:提交给UFO的原始用户查询。
- Desktop Screenshots:当前桌面的截图。
- Application Information:可用的活跃应用程序详情的列表,包括它们的名称和类型。桌面截图和应用程序信息使AppAgent能够理解当前状态,并限制其应用程序选择的范围。
- Memory:包括之前的思考、评论、动作和执行结果。记忆作为过去请求完成情况的历史记录,帮助AppAgent基于先前的经验做出明智的决策。
- Examples:选择应用程序的文本示例,作为任务的提示,起到少样本学习的效果。
在输入所有相关信息后,AppAgent使用GPT-V生成以下输出:
- Observation:当前桌面窗口截图的详细描述。
- Thoughts:根据Chainof-thought (CoT) 范式,完成给定任务的推理逻辑。这两项鼓励AppAgent仔细分析当前状态,为其逻辑和决策过程提供详细的解释。
- Selected Application:所选应用程序的标签和名称。(结果)
- Status:任务状态,标记为“CONTINUE”或“FINISH”。
- Global Plan:完成用户请求的后续行动计划,通常是一个全局的、粗粒度的计划。
- Comment:提供的额外评论或信息,包括简短的进度总结和需要强调的点。可以给用户发送评论,报告进度,强调潜在问题或解答任何用户查询。
AppAgent识别出选定的应用程序,UFO将在此应用程序内采取特定动作以满足用户请求,由ActAgent负责执行这些动作。
ActAgent
ActAgent作为AppAgent之后的下游实体,负责在选定的应用程序上执行特定动作以满足用户请求。其输入和输出如图所示。ActAgent接受以下输入:
- User Request:提交给UFO的原始用户查询,与AppAgent相同。
- Screenshots:截图包括三个部分:(i)Previous Screenshot;使用红色矩形突出显示上一步选定的控件,用于理解上一步操作的执行和分析动作的影响。(ii)Clean screenshot;帮助Agent理解应用程序的当前状态,(iii)Annotated screenshot。用数字标注每个控件,便于更好地理解UI元素的功能和位置,不同类型的控件用不同的颜色标注以进行区分。
- Control Information:在选定应用程序中可用的操作控件的名称和类型。
- Memory:之前的思考、评论、动作和执行结果,与AppAgent相同。但是它不仅是作为Agent的提醒,而且它提供了跨应用程序通信的关键渠道。之前的执行结果,比如从文档中提取的文本或图像的描述,存储在记忆模块中。ActAgent可以选择性地将这些信息纳入当前的动作中,例如用来自不同来源的文本编写电子邮件。
- Examples:用于动作选择的文本示例,作为提示。
ActAgent仔细分析所有输入信息后,输出以下内容:
- Observation:当前应用程序窗口截图的详细描述,可以用于分析上一个动作是否生效。
- Thoughts:当前动作决策背后的逻辑推理过程。
- Selected Control:操作所选控件的标签和名称。
- Function:应用于控件的特定函数及其参数。用于提供给控制交互模块。
- Status:任务状态,标示为“CONTINUE”(如果需要进一步动作)、“FINISH”(如果任务完成)、“PENDING”(如果当前动作需要用户确认)、“SCREENSHOT”(如果智能体认为当前标注太多难以理解,需要进一步的截图以注释更少的控件集)、以及“APP SELECTION”(当前应用程序上的任务完成,且需要切换到不同的应用程序)。
- Local Plan:更精确和细致的未来动作计划,以完全满足用户请求。
- Comment:额外的评论或信息,包括简短的进度总结、突出的点或计划的变化,类似于AppAgent所提供的。
如果任务未完成,ActAgent会将功能应用于所选控件,然后观察执行动作后的应用程序状态。迭代重复上述过程,直到用户请求完全完成或需要切换到不同的应用程序。
Control Interaction
UFO 利用 pywinauto 来检查应用程序的所有可操作控件,检索它们的精确位置并用边框来添加注释。pywinauto 为每个控件提供了丰富的上下文,包括其名称、类型和标题,这些都是控件和操作选择的关键信息。
UFO 主要关注以下10种具有高度相关性的控件类型。其中包括 Button按钮、Edit编辑、TabItem选项卡项、Document文档、ListItem列表项、MenuItem菜单项、TreeItem树项、ComboBox组合框、Hyperlink超链接、ScrollBar滚动条。这些可以覆盖应用程序中的大多数控件。
可以应用于控件的功能操作包括:
- Click:用鼠标点击控制项,可选择左键或右键点击、单次或双击。
- Scroll:垂直或水平滚动控制项,使隐藏内容可见。
- SetText:将文本输入到可编辑控件中,模仿键盘行为。
- GetText:检索控件的文本信息。
- Annotate:捕获当前应用程序窗口的屏幕截图,并在 GUI 上注释控制项。
- Summary:基于干净的屏幕截图总结当前应用程序窗口的观察结果。
前4项是 pywinauto 原生支持的常见功能,涵盖了大多数日常的图形用户界面操作。后2项是为了满足 UFO 特殊需求而定制的操作。Annotate 允许对 GUI 进行重新注释,来获得更简洁的控件列表,Summary 使 UFO 能够用文本描述其视觉观察结果,以满足用户请求。
Special Design Consideration
UFO 还融入了一系列专门针对 Windows 系统定制的设计元素。
Interactive Mode
UFO 为用户提供了交互的能力,而不是单步完成任务。任务完成后,用户可以提出一个全新的任务让 UFO 执行,或在 UFO 可能缺乏熟练度的任务中协助操作。
Action Customization
UFO 目前支持的动作并不详尽,但是系统可以进行大幅扩展和定制。它允许加入键盘快捷键、宏命令、插件等功能。一个例子是 Summary 动作,它利用 UFO 的多模态能力按需观察和描述屏幕截图。
为了实现这种级别的定制,用户可以注册他们的定制操作。包括指定目的、参数、返回值,以及提供示例。然后,这些信息会被整合到 UFO 的 prompt 中以供参考。注册过程完成后,定制操作就可以被 UFO 自动调用执行。
Control Filtering
有些情况下,系统可以检测到数百个控件项。然而,标注所有这些控件可能会使得应用截图变得杂乱,从而影响系统性能。因此,实现过滤机制变得至关重要。
为了应对这一挑战,UFO采用了两种控件过滤方法,包括 hard level 和 soft level。在 hard level 上,基于用户指定的特定控件类型限制候选控件。在 soft level 上,赋予 UFO 动态决定是否重新生成一个更简洁的控件列表的能力。当 UFO 感知到控件数量过多时,该能力会被触发。
Plan Reflection
虽然两个智能体都负责发起计划以满足用户请求,但应用程序 UI 的实际状态可能并不总是与预期条件一致。因此,计划和行动都应相应地进行调整。
为了应对这种动态性,UFO 的 prompt 中要求其在每一个决策步骤中持续修正其计划。作者指出,该设计显著提高了 UFO 系统的性能。
Safeguard
UFO 内置了一种安全防护机制,在执行某些安全性操作前会寻求用户确认。例如:发送邮件、删除或修改文件、访问摄像头和安装应用程序等。
定量结果
在评估指标方面,从四个角度评估系统性能:成功率、步骤数、完成率和安全率。成功率判断智能体是否成功完成了请求。步骤指的是智能体完成任务所需采取的动作数量。完成率是正确步骤数与总步骤数的比率。最后,安全率衡量 UFO 在请求涉及敏感操作时请求用户确认的频率。评估结果如下表所示。
UFO 在 benchmark 中取得了86%的成功率,比表现最好的 GPT-4 高出一倍多。此外,UFO 展现出最高的完成率和最少的步骤完成任务,表明其能够采取更精确的行动。从安全角度来看,UFO 达到了85.7%的最高的 safeguard rate,这证明它可以准确地分类敏感请求。
baseline 的较差表现可归因于两个主要因素。首先,两个 baseline 都缺乏与真实应用环境直接交互的能力,依赖人类作为代理来执行动作。这一限制导致了无法适应环境变化和反馈。其次,baseline 仅接受文本输入,忽略了 GUI 交互中视觉能力的重要性。这一弱点阻碍了它们在 Windows 上完成用户请求的效果,其中视觉信息有时至关重要。
UFO的亮点
- 第一个 Windows 代理UFO 是一个先驱代理框架,能够将自然语言的用户请求转换为 Windows 操作系统上可操作的操作。
- 代理作为专家UFO 通过来自异构源的检索增强生成 (RAG) 得到增强,包括离线帮助文档、在线搜索引擎和人工演示,使代理成为应用程序“专家”。
- 丰富的技能组合UFO 配备了多样化的技能组合来支持全面的自动化,例如鼠标、键盘、本机 API 和“副驾驶”。
- 交互模式UFO 方便用户在同一会话中提出多个子请求,从而无缝完成复杂任务。
- 代理定制UFO 允许用户通过提供附加信息来定制自己的代理。代理会在必要时主动向用户询问详细信息,以更好地调整其行为。
- 可扩展的 AppAgent 创建UFO 提供可扩展性,允许用户和应用程序开发人员以简单且可扩展的方式创建自己的 AppAgent。
安装和尝试
- 第一步,还是准备环境。
conda create -n ufo python=3.10
创建一个Python3.10的虚拟环境,并且激活,开始使用。
- 第二步
获取代码
git clone https://github.com/microsoft/UFO.git
定位到目录UFO下安装依赖
pip install -r requirements.txt
- 第三步
从config.yaml.template复制一个config.yaml文件,修改配置文件
注意配置文件中已经有OpenAI和Azure OpenAI的内容。
不需要字形修改,只要Comment和Uncomment对应的内容即可。
- 执行下面的命令
python -m ufo –task <your_task_name>
可能出现的问题
- 我出现了一个依赖问题ModuleNotFoundError: No module named ‘pyautogui’
- ModuleNotFoundError: No module named ‘uiautomation’
RA/SD 衍生者AI训练营。发布者:chris,转载请注明出处:https://www.shxcj.com/archives/8214