微软开源Agent操作系统 :深度集成 Windows多智能体,超6000颗星
微软对其开源的AgentUFO进行了重磅升级,发布了UFO²版本并新增了操作系统功能。并且很快会上线画中画模式,支持在沙盒虚拟桌面中自动化运行。
与上一版本相比,UFO²最大亮点之一就是与自家的Windows系统实现了深度集成,可以直接调用原生API、COM等接口,这比传统的RPA在执行复杂自动化业务时更加高效、精准。
例如,在Excel中将表格数据转换为图表,传统RPA需模拟人类操作多次点击鼠标,而UFO²通过调用原生API一步即可完成,无需视觉定位或鼠标模拟。
此外,根据测试数据显示,UFO²的自动化任务成功率远超OpenAI的Operator。在WAA测试里,UFO²(o1模型)成功率达30.5%,Operator仅20.8%;在OSWorld-W测试中,UFO²(o1)更是高达32.7%,Operator却只有14.3%。
执行效率上,UFO²在OSWorld-W平均完成步骤仅5.5步,Operator则需更多。在复杂任务和场景处理方面,跨应用任务上UFO²成功率9.1%,高于Operator;处理非标准界面时,UFO²的混合控制检测机制使其适应性更强。

开源地址:https://github.com/microsoft/UFO?tab=readme-ov-file
操作系统控制核心HostAgent
HostAgent是UFO²的核心控制面,主要用于解析用户指令、分解任务、管理应用程序生命周期以及协调AppAgents执行的关键职责。
当用户通过自然语言发出自动化指令时,HostAgent首先对指令进行解析,识别其中的任务目标,并将其分解为一系列依赖有序的子任务。这些子任务随后被分配给相应的AppAgents,由它们在特定的应用程序中执行。

为了确保任务的顺利执行,HostAgent通过WindowsUIAutomation
APIs查询系统进程元数据,判断目标应用程序是否正在运行。如果目标应用程序尚未启动,HostAgent会负责启动该程序,并注册相应的AppAgent实例。
整个任务执行过程由一个有限状态机控制,该状态机定义了任务执行的各个阶段,包括主执行循环、子任务分配、等待用户输入以解决歧义、任务完成以及错误处理。这种明确的状态划分使得HostAgent能够在动态工作流中稳健地进行任务协调,同时保证任务完成的高级别保证。

HostAgent还通过全局黑板接口与AppAgents交换中间结果、依赖状态和执行元数据。这种共享状态通信机制不仅支持跨应用的复杂工作流协调,还为系统的调试和回放提供了透明性。
执行核心AppAgent
AppAgent是UFO²的核心执行组件之一,每个AppAgent都专注于特定的Windows应用程序,具备丰富的应用特定API、混合GUI-API动作接口以及对应用程序能力的深入理解。与传统的通用GUI代理不同,AppAgent针对单一应用程序进行了深度定制,能够以更高的效率和鲁棒性执行任务。

AppAgent的感知层融合了多种感知信号,包括视觉输入(用于布局理解)、语义元数据(从UIAAPIs提取)和符号注释。这些感知信号被转换为结构化的观察对象,包含GUI截图和候选控制元素的集合。基于这种多模态表示,AppAgent能够更全面地理解应用程序状态,从而生成更准确的动作指令。
AppAgent的执行逻辑同样基于有限状态机,其状态包括默认动作规划和执行状态、安全关键动作需要用户确认、任务完成以及不可恢复的错误。这种有界执行模型能够将失败隔离在当前任务中,并支持安全的抢占、重试或委托。
此外,AppAgent还通过私有状态和共享状态与系统进行协调,确保其能够在HostAgent的指导下自主执行任务,同时与其他AppAgent保持同步。
为了确保AppAgent能够可靠地感知GUI元素,UFO²引入了一种混合控制检测机制,将UIA基础的元数据与基于视觉的感知相结合。这种融合方法能够覆盖标准和非标准的GUI环境,为下游的动作规划和执行提供了坚实的基础。
在标准GUI环境中,UIA提供了语义丰富且高精度的接口,能够枚举屏幕上的控件并提取其属性,例如,类型、标签、层次结构和启用状态。

但在一些非标准或自定义的GUI环境中,UIA可能无法检测到某些控件。为了弥补这一不足,UFO²集成了OmniParser-v2模型,该模型通过处理应用程序截图,能够识别出UIA无法检测到的自定义或非标准控件。最后,系统通过基于边界框重叠的去重操作,将两种检测结果合并为一个统一的控制图,供AppAgent使用。
统一GUI-API动作编排器
UFO²的另一个创新之处在于其统一的GUI-API动作编排器——Puppeteer。Puppeteer能够动态选择在每个动作步骤中使用GUI级别自动化还是应用程序特定的API调用。这种混合执行模型不仅提高了任务的鲁棒性,还显著降低了延迟,并减少了基于GUI的工作流的脆弱性。
在实际自动化业务执行中,Puppeteer会根据当前上下文和可用性,优先选择语义等价的API调用,而不是GUI自动化。
如果API调用失败或不可用,系统会无缝回退到基于GUI的控制。这种运行时灵活性使得AppAgent能够在异构环境中保持鲁棒性,同时不牺牲通用性。

Puppeteer还支持轻量级的API注册机制,允许开发人员通过简单的Python装饰器接口暴露目标应用程序中的高级操作。这些API在运行时被自动纳入AppAgent的动作空间,使得AppAgent能够通过直接调用API来执行复杂任务,而无需通过繁琐的GUI操作。
画中画模式
传统的RPA通常会直接在用户的主桌面上操作,占据鼠标和键盘控制权,导致用户在自动化任务执行期间无法正常使用系统。这种设计不仅影响用户体验,还可能引发安全性和稳定性问题。
UFO² 引入了画中画功能,主要通过Windows系统自带的远程桌面来完成,实现了自动化任务与用户主桌面的隔离。
画中画创建了一个轻量级的虚拟桌面窗口,完全独立于用户的主桌面,拥有自己的输入队列和设备上下文。在画中画环境中启动的应用程序继承了用户的身份、凭据、设置和网络上下文,从而确保与主桌面操作的一致性。

从用户的角度来说,画中画窗口就像一个沙盒化的独立工作区,用户可以在主桌面上继续进行正常操作,而自动化任务则在该窗口中独立运行,不会干扰用户的正常工作。
为了实现 画中画窗口与主桌面之间的逻辑连接,UFO² 建立了一个安全的IPC通道。该通道使用 Windows自带的Named Pipes技术,并通过每会话的凭据进行身份验证和加密。
通过这个IPC通道,主桌面可以向 画中画窗口发送任务分配、进度查询、取消请求和用户澄清信息;而 画中画窗口则可以向主桌面发送状态更新、完成报告和异常通知。
这种双向通信机制确保了用户可以通过主桌面的轻量级前端面板实时监控和部分控制自动化任务的执行过程,而无需直接访问画中画窗口。
本文素材来源UFO²,如有侵权请联系删除