微软的UFO(UI-Focused Agent,后续发展为UFO²,即Desktop AgentOS)项目代表了在自然语言驱动的桌面自动化领域的一项重要进展 1。该项目旨在通过深度操作系统集成和多智能体协作,将用户通过自然语言表达的复杂任务转化为跨应用程序的、可靠的自动化工作流 1。最初的UFO项目于2024年2月发布,专注于Windows操作系统的UI自动化,利用GPT-Vision等大型语言模型(LLM)的能力,通过双智能体框架观察和分析GUI信息,实现跨应用的导航和操作 3。随着2025年4月UFO²的提出,该项目演进为一个更为宏大的“桌面操作系统智能体”(Desktop AgentOS)概念,强调更深层次的操作系统集成、原生API调用与GUI操作的混合、以及通过持续学习和投机性多动作执行提升效率和鲁棒性 1。
本报告旨在深度剖析微软UFO项目,从其核心目标、关键特性、系统架构、关键技术实现、到社区反馈和未来展望,提供一个全面而深入的分析。
UFO项目的核心目标是赋能用户通过自然语言指令,在Windows操作系统上实现复杂、跨应用的自动化任务 1。它不仅仅局限于传统的UI层面自动化,而是力求构建一个能够理解用户意图、智能编排多个应用程序以达成目标的“桌面智能体操作系统” 1。
最初的UFO版本专注于利用大型视觉语言模型(如GPT-Vision)来理解和操作Windows应用程序的图形用户界面(GUI)3。其设计理念是通过模拟人类用户观察屏幕、思考决策、执行操作的过程,将繁琐耗时的手动任务转变为简单的自然语言指令即可完成的自动化流程 4。
随着UFO²的提出,这一目标得到了进一步的深化和扩展。UFO²旨在成为一个系统级的自动化平台,其关键特性包括:
UFO的应用场景广泛,包括但不限于自动化办公套件中的重复性任务、简化涉及Web浏览器的流程(如数据录入、表单填写)、以及基于自然语言指令创建自定义的跨应用工作流 1。
UFO²的架构设计体现了其作为“桌面智能体操作系统”的理念,其核心是一个多智能体框架 2。
核心组件:
| 组件名称 | 描述 | 来源 |
|---|---|---|
| HostAgent (主控智能体) | 解析用户的自然语言目标,启动必要的应用程序,创建并协调AppAgent,管理全局有限状态机(FSM)以控制任务流程。 | 2 |
| AppAgent (应用智能体) | 每个应用程序对应一个AppAgent。每个AppAgent运行一个ReAct(Reasoning and Acting)循环,具备多模态感知、混合控制检测、检索增强知识以及通过Puppeteer执行器选择GUI或API操作的能力。 | 2 |
| Knowledge Substrate (知识基底) | 融合离线文档、在线搜索结果、用户演示和执行轨迹,构建一个向量存储,在推理时按需检索。 | 2 |
| Puppeteer Executor (操纵执行器) | 集成在AppAgent内部,负责在GUI操作(如点击、输入)和原生API调用之间做出选择并执行。 | 5 |
| Speculative Executor (投机执行器) | 通过预测一批可能的动作并在一次调用中针对实时UIA状态进行验证,从而大幅减少LLM的调用延迟。 | 1 |
| FollowerAgent (跟随智能体) | 继承自AppAgent,用于执行用户提供的明确指令序列,常用于软件测试等场景。 | 5 |
| EvaluationAgent (评估智能体) | 用于评估一个会话或一轮任务的完成情况。 | 5 |
数据流:
UFO²的数据流围绕HostAgent的协调和AppAgent的执行展开 5。
这种架构的模块化设计,使得系统具有良好的可扩展性,例如可以针对新的应用程序开发专门的AppAgent,或者集成新的知识源到Knowledge Substrate中。
UFO文档中提及了智能体设计的几个核心构成要素:Memory(记忆)、Blackboard(黑板)、State(状态)、Prompter(提示器)和Processor(处理器)5。这些组件共同构成了智能体(无论是HostAgent还是AppAgent)的内部运作机制。
定义: UFO智能体框架的基础组件,代表智能体当前状况,决定下一个执行动作和处理请求的智能体 7。
实现细节:
AgentStatus类(枚举类)定义状态集合 11AgentStateManager管理字符串到状态类的映射,通过装饰器注册状态类 11AgentState基类,必须实现:handle方法:处理该状态下的动作next_state和next_agent方法:确定状态转换后的下个状态和处理智能体 11功能: 存储用户请求、应用状态及相关数据 7。
知识增强机制:
管理接口 (BasicAgent类提供):
add_memory, clear_memory, delete_memorybuild_experience_retrieverbuild_offline_docs_retriever 7作用: 智能体间共享信息的组件 7。
应用场景:
HostAgent读写全局黑板,实现:AppAgent生成提示时考虑黑板信息 (blackboard_prompt) 6功能: 根据用户请求和应用状态生成LLM提示 7。
实现方式:
BasicAgent提供:get_prompter获取提示器实例message_constructor构建LLM消息 7FollowerAgentPrompter 6提示内容组成:
职责: 管理智能体工作流,包括:
具体实现:
HostAgent: 激活处理器分解用户请求为子任务 8FollowerAgent: 使用特定Session和Processor处理指令 6BasicAgent: 内置processor属性 7这些组件的协同工作使得UFO中的智能体能够有效地感知环境、进行推理决策、执行动作并从中学习。
HostAgent在UFO²架构中扮演着核心协调者的角色 2。其主要职责包括 7:
HostAgent的输入包括用户请求(自然语言字符串)、现有活动应用的信息(字符串列表)以及桌面截图(图像)8。其输出则包括对当前桌面截图的观察(字符串)、给用户的额外评论或信息(字符串)、需要向用户提出的问题(字符串列表)以及可由HostAgent执行的bash命令(用于打开应用或执行系统命令)8。这些输出通常由LLM格式化为JSON对象。
HostAgent的状态机定义在其host_agent_states.py模块中,主要状态包括CONTINUE(默认,用于动作规划和执行)、PENDING(用于安全关键操作,需用户确认)、FINISH(任务完成)和FAIL(发生不可恢复的故障)8。
AppAgent专责于在选定的应用程序内迭代执行动作,直至在该应用内的子任务成功完成 7。它由HostAgent创建,旨在完成某个“回合”(Round)中的一个子任务。
AppAgent的核心运作机制是ReAct(Reasoning and Acting)循环 5。在这个循环中,AppAgent:
为了增强其理解和执行能力,AppAgent具备以下特性:
AppAgent的输出除了观察、思考和控制信息外,还包括当前任务状态(Status,如CONTINUE, FINISH, PENDING等)、对子任务的计划(Plan)、当前子任务描述(Subtask)、以及对用户的评论(Comment)4。
FollowerAgent是AppAgent的一个特化版本,它继承了AppAgent的大部分功能 6。与AppAgent不同的是,FollowerAgent并非自主推理以决定下一步行动,而是严格遵循用户预先定义的步骤指令来执行任务 6。
这种模式在以下场景中特别有用 6:
FollowerAgent在“跟随者模式”(follower mode)下运行 6。用户需要创建一个JSON格式的计划文件(plan file),其中包含任务描述(task)、步骤列表(steps)和目标对象(object,即应用程序或文件)10。UFO通过命令行参数–mode follower和–plan <plan_file_or_folder_path>启动此模式 10。它也支持批量运行多个计划文件。
FollowerAgent使用特定的Session(FollowerSession)和Processor来处理用户指令 6。如果配置了EVA_SESSION为True,UFO还会调用EvaluationAgent来评估任务的完成情况 10。
EvaluationAgent的职责是评估一个会话(session)或一个回合(round)任务的完成度 7。在常规工作流程中,主要由HostAgent和AppAgent参与用户交互,而EvaluationAgent则用于特定任务,例如在Follower模式下评估预定义计划的执行结果 7。
当config_dev.yaml文件中的EVA_SESSION设置为True时,UFO会在Follower模式执行完毕后调用EvaluationAgent 10。评估日志会记录在logs/{task_name}/evaluation.log文件中 10。
尽管文档指出了EvaluationAgent的存在及其用途,但关于其具体的评估标准、工作方法或内部机制的详细信息并未在现有摘要中充分阐述 5。要深入了解其工作原理,可能需要参考UFO²的技术论文或更详细的开发者文档。
UFO项目的实现依赖于一系列关键技术和机制的协同工作,这些技术共同构成了其强大的自动化能力。
为了准确地识别和交互应用程序的UI元素,UFO采用了一种混合的控制检测方法,结合了程序化接口和视觉分析。
这种混合策略是应对现代应用程序UI多样性和复杂性的关键。一些应用程序可能没有完全实现UIA接口,或者包含大量自定义绘制的控件,此时视觉检测就显得尤为重要。反之,当UIA信息可用时,它可以提供比单纯视觉分析更精确和语义更丰富的控件信息。
AppAgent通过一个名为Puppeteer的执行器来与应用程序进行交互 5。Puppeteer扮演着命令模式中“调用者”(Invoker)的角色,它负责触发命令,这些命令随后由“接收者”(Receiver)执行 14。这种设计模式解耦了动作的发送者和接收者,使得智能体可以在不了解对象或动作执行细节的情况下对不同对象执行操作,从而提高了系统的灵活性和可扩展性 14。
Puppeteer支持多种自动化方式:
HostAgent和AppAgent将动作请求传递给Puppeteer,Puppeteer再根据动作类型(GUI或API)和目标应用,选择合适的Automator和Receiver来执行具体操作 17。这种混合GUI与API的动作执行能力是UFO²的一大特点,它使得智能体能够根据可用性和效率,在直接API调用和UI模拟之间智能切换,以实现快速而鲁棒的自动化 1。
UFO的核心能力之一是其持续知识基底(Continuous Knowledge Substrate),它通过**检索增强生成(Retrieval-Augmented Generation, RAG)**技术,使智能体能够动态地获取和利用知识,从而不断学习和提升性能 1。
知识的来源是多样的:
这些不同来源的知识被整合到一个向量存储(vector store)中,在推理时(即AppAgent执行ReAct循环时)按需检索 5。检索到的相关知识会作为上下文信息,辅助LLM进行更准确的思考和决策。例如,在AppAgent中,会使用retrieved_documents_prompt_helper或rag_experience_retrieve等方法将检索到的文档或经验整合到发送给LLM的提示中 9。
这种机制使得UFO不仅仅是一个静态的执行代理,更是一个能够适应新应用、新任务、新信息,并从经验中不断成长的动态系统。learner目录包含了构建帮助文档向量数据库的脚本和工具,而vectordb目录则用于存储RAG所需的向量数据库数据 19。experience目录负责解析和保存智能体的自我经验 19。
UFO中的AppAgent采用ReAct (Reasoning and Acting) 的工作模式 5。这是一个迭代的“观察-思考-行动”循环,旨在模拟人类在解决问题时的认知过程。
这个循环不断重复,直到当前子任务完成(状态变为FINISH),或者需要用户干预(状态变为PENDING),或者需要切换到其他应用(状态变为APP_SELECTION,由HostAgent处理)4。
多模态感知是ReAct循环成功的关键。仅依赖文本信息(如UIA树)可能无法完全理解复杂或自定义的UI,而仅依赖视觉信息又可能缺乏精确的控件语义。UFO通过结合两者,使智能体能够更全面地理解应用状态,从而做出更明智的决策。
为了解决大型语言模型(LLM)固有的推理延迟问题,并提高自动化流程的整体效率,UFO²引入了**投机性多动作执行(Speculative Multi-Action)**机制 1。
该机制的核心思想是:与其让AppAgent在ReAct循环中每一步都单独调用LLM进行一次观察-思考-行动的决策,不如尝试预测接下来可能连续发生的多个步骤,并将这些预测的动作序列捆绑在一起,通过一次LLM调用进行统一的评估和验证 1。
具体来说,**Speculative Executor(投机执行器)**会根据当前状态和任务目标,预测出一批(batch)可能的后续动作 5。然后,这些预测的动作会与实时的UIA状态(或其他应用状态信息)进行比对验证,以确保它们的可行性和正确性 1。如果LLM确认这个动作序列是合理的,那么这些动作就可以被连续执行,从而减少了多次LLM调用的开销。
根据项目文档,这种方法可以将LLM的查询次数减少高达51% 1。这对于提升用户体验和降低API调用成本都具有重要意义。
在UFO的早期版本(README_v1.md中提及)中,也曾引入“多动作模式”(Multi-Action Mode),通过在config_dev.yaml中设置ACTION_SEQUENCE=True来启用,允许在单次推理步骤中执行多个动作 17。投机性多动作执行可以看作是这一理念的进一步发展和优化,使其更加智能和动态。
这种机制的挑战在于如何准确地预测动作序列,以及如何有效地验证这些序列。如果预测不准确或验证不充分,可能会导致错误的执行路径。因此,其有效性在很大程度上依赖于底层LLM的预测能力和对当前应用状态的准确把握。
为了提升用户体验,使得自动化任务的执行不干扰用户的正常工作,UFO²计划并已完成(将在下一版本发布)**画中画桌面(Picture-in-Picture Desktop, PiP)**功能 1。
PiP模式的核心特性是,智能体的自动化操作将在一个隔离的、沙箱化的虚拟桌面环境中运行 1。这意味着:
UFO²的论文中提到,PiP接口是一个安全的、嵌套的桌面环境,使得智能体可以独立于用户的主会话执行任务 12。
这一特性对于将UFO从一个主要面向开发者和研究人员的工具,转变为一个可供更广泛用户在日常工作中使用的实用生产力工具有着重要意义。它解决了许多桌面自动化工具面临的一个共同痛点:自动化脚本运行时,用户往往无法使用计算机。PiP模式通过提供并发操作的能力,极大地增强了UFO的实用性。
UFO项目提供了相对清晰的安装和配置指南,旨在帮助用户快速上手。
环境要求:
安装步骤 1:
(可选)创建conda环境:
conda create -n ufo python=3.10
conda activate ufo
克隆仓库:
git clone https://github.com/microsoft/UFO.git
cd UFO
安装依赖:
pip install -r requirements.txt
requirements.txt 文件列出了项目所需的Python包及其版本 20。主要依赖包括:
openai: 用于与OpenAI模型交互langchain, langchain_community: LLM应用开发框架Pillow: 图像处理pywin32, pywinauto, uiautomation: Windows自动化库PyYAML: 解析配置文件faiss-cpu: 用于向量相似性搜索(RAG)sentence-transformers: 生成文本嵌入art, colorama, msal, Requests, lxml, psutilbeautifulsoup4, pandas, html2text, pyautogui如果需要使用特定的LLM(如Qwen)或功能(如AAD认证、停用词移除),可能需要取消注释requirements.txt中的相关库并安装 1。
配置LLM 1:
在运行UFO之前,必须为HostAgent和AppAgent单独配置LLM。这通过复制ufo/config/config.yaml.template为ufo/config/config.yaml并编辑其中的HOST_AGENT和APP_AGENT部分来完成。
需要配置的参数通常包括:
(可选)配置RAG 1:
为了增强UFO的能力,可以在ufo/config/config.yaml中配置外部数据库以支持检索增强生成(RAG)。可配置的RAG选项包括:
启动UFO 1:
在克隆的UFO文件夹中,通过以下命令启动:
Bash
python -m ufo –task <your_task_name> \
<your_task_name>是用户定义的任务名称。成功启动后,会显示欢迎信息,用户可以通过命令行界面与UFO交互。
执行日志 1:
UFO会将截图、请求和响应日志保存在./ufo/logs/<your_task_name>/目录下。这些日志可用于调试、回放或分析智能体的输出。UFO的文档网站也提供了Markdown日志查看器、请求日志、步骤日志、评估日志、截图和UI树等查看工具 5。
Dataflow模块的使用 21:
UFO项目包含一个dataflow模块,用于为大型动作模型(LAMs)进行数据收集。它也需要安装requirements.txt中的依赖,并单独配置dataflow/config/config.yaml中的PREFILL_AGENT和FILTER_AGENT的LLM参数。
UFO项目作为一个开源项目,其发展离不开社区的参与和贡献。
项目资源与许可:
获取帮助:
媒体关注:
UFO项目自发布以来,受到了多家媒体和技术社区的关注,相关报道强调了其作为下一代Windows智能交互体验的潜力 1。
GitHub Issues分析 (截至2025年5月7日) 22:
对GitHub Issues的分析揭示了一些常见问题、功能请求和活跃讨论:
GitHub Pull Requests分析 (截至2025年4月) 23:
开放的PR表明了当前的开发焦点:
UFO项目在桌面自动化领域展现了雄心勃勃的愿景和坚实的技术基础,但同时也面临着挑战。
UFO项目的优势:
潜在挑战与局限性:
与相关方法的比较:
路线图与未来发展方向 5:
此外,项目中dataflow目录的存在以及相关大型动作模型(LAM)论文的提及 17,表明训练专门的、更高效的动作模型也是未来的一个重要研究方向。
更广泛的影响:
UFO及其代表的“桌面智能体操作系统”理念,有潜力深刻改变人机交互的范式。它可能大幅降低普通用户实现复杂任务自动化的门槛,使操作系统本身演变为一个更主动、更智能的助手。然而,这也同时带来了关于用户控制权、数据隐私、系统安全以及传统UI未来角色的深刻思考。随着这类智能体能力的不断增强,如何在赋能用户与保障安全之间取得平衡,将是整个领域需要面对的关键议题。UFO项目对LLM的依赖性也意味着,其发展将与基础LLM技术的进步紧密相连,如何持续优化提示工程、验证机制,并探索更高效、更可控的LLM集成方案,将是UFO团队面临的长期挑战。
微软的UFO项目,特别是其演进版本UFO² (Desktop AgentOS),代表了在构建能够理解自然语言并自主执行复杂桌面任务的智能体方面的一大步。通过深度整合Windows操作系统底层技术(UIA, Win32, WinCOM),结合多智能体协作架构(HostAgent, AppAgent)、先进的AI机制(多模态感知, RAG驱动的持续学习, ReAct循环, 投机性多动作执行)以及对用户体验的细致考量(画中画桌面),UFO旨在提供一个强大、灵活且可进化的自动化平台。
该项目的设计哲学体现了对当前AI能力的深刻理解和对未来人机交互趋势的前瞻性思考。它不仅仅追求单一任务的自动化,而是试图构建一个“智能体操作系统”的雏形,让智能体成为用户与数字世界交互的更高级媒介。混合GUI与API操作的务实策略,使其能够在不同类型的应用程序上实现鲁棒的自动化;持续知识基底则赋予了系统学习和适应的能力,这是其超越传统脚本自动化的关键。
然而,UFO项目也面临着通用AI系统固有的挑战:在多样化和动态的真实世界应用中保持鲁棒性、处理LLM的非确定性和潜在错误、确保系统安全以及管理API调用成本等。GitHub上用户反馈的问题也揭示了在特定应用和场景下实现完美自动化的难度。
未来的发展方向,如“AgentOS-as-a-Service”和“智能体间通信”,预示着UFO可能演变成一个更开放、更具连接性的平台,为更广泛的自动化生态系统提供动力。同时,对大型动作模型(LAM)的研究也可能为其带来性能上的突破。
总而言之,UFO项目是AI驱动自动化领域一个值得高度关注的里程碑。它不仅展示了将大型语言模型的能力应用于复杂桌面环境的巨大潜力,也为未来操作系统如何与智能体深度融合提供了富有启发性的探索。尽管挑战依然存在,但UFO所勾勒的蓝图——一个能够理解用户意图、自主学习、并无缝操作整个桌面环境的智能伙伴——无疑为下一代计算体验指明了一个激动人心的方向。
微软的UFO(UI-Focused Agent,后续发展为UFO²,即Desktop AgentOS)项目代表了在自然语言驱动的桌面自动化领域的一项重要进展 1。该项目旨在通过深度操作系统集成和多智能体协作,将用户通过自然语言表达的复杂任务转化为跨应用程序的、可靠的自动化工作流 1。最初的UFO项目于2024年2月发布,专注于Windows操作系统的UI自动化,利用GPT-Vision等大型语言模型(LLM)的能力,通过双智能体框架观察和分析GUI信息,实现跨应用的导航和操作 3。随着2025年4月UFO²的提出,该项目演进为一个更为宏大的“桌面操作系统智能体”(Desktop AgentOS)概念,强调更深层次的操作系统集成、原生API调用与GUI操作的混合、以及通过持续学习和投机性多动作执行提升效率和鲁棒性 1。
本报告旨在深度剖析微软UFO项目,从其核心目标、关键特性、系统架构、关键技术实现、到社区反馈和未来展望,提供一个全面而深入的分析。
UFO项目的核心目标是赋能用户通过自然语言指令,在Windows操作系统上实现复杂、跨应用的自动化任务 1。它不仅仅局限于传统的UI层面自动化,而是力求构建一个能够理解用户意图、智能编排多个应用程序以达成目标的“桌面智能体操作系统” 1。
最初的UFO版本专注于利用大型视觉语言模型(如GPT-Vision)来理解和操作Windows应用程序的图形用户界面(GUI)3。其设计理念是通过模拟人类用户观察屏幕、思考决策、执行操作的过程,将繁琐耗时的手动任务转变为简单的自然语言指令即可完成的自动化流程 4。
随着UFO²的提出,这一目标得到了进一步的深化和扩展。UFO²旨在成为一个系统级的自动化平台,其关键特性包括:
UFO的应用场景广泛,包括但不限于自动化办公套件中的重复性任务、简化涉及Web浏览器的流程(如数据录入、表单填写)、以及基于自然语言指令创建自定义的跨应用工作流 1。
UFO²的架构设计体现了其作为“桌面智能体操作系统”的理念,其核心是一个多智能体框架 2。
核心组件:
| 组件名称 | 描述 | 来源 |
|---|---|---|
| HostAgent (主控智能体) | 解析用户的自然语言目标,启动必要的应用程序,创建并协调AppAgent,管理全局有限状态机(FSM)以控制任务流程。 | 2 |
| AppAgent (应用智能体) | 每个应用程序对应一个AppAgent。每个AppAgent运行一个ReAct(Reasoning and Acting)循环,具备多模态感知、混合控制检测、检索增强知识以及通过Puppeteer执行器选择GUI或API操作的能力。 | 2 |
| Knowledge Substrate (知识基底) | 融合离线文档、在线搜索结果、用户演示和执行轨迹,构建一个向量存储,在推理时按需检索。 | 2 |
| Puppeteer Executor (操纵执行器) | 集成在AppAgent内部,负责在GUI操作(如点击、输入)和原生API调用之间做出选择并执行。 | 5 |
| Speculative Executor (投机执行器) | 通过预测一批可能的动作并在一次调用中针对实时UIA状态进行验证,从而大幅减少LLM的调用延迟。 | 1 |
| FollowerAgent (跟随智能体) | 继承自AppAgent,用于执行用户提供的明确指令序列,常用于软件测试等场景。 | 5 |
| EvaluationAgent (评估智能体) | 用于评估一个会话或一轮任务的完成情况。 | 5 |
数据流:
UFO²的数据流围绕HostAgent的协调和AppAgent的执行展开 5。
这种架构的模块化设计,使得系统具有良好的可扩展性,例如可以针对新的应用程序开发专门的AppAgent,或者集成新的知识源到Knowledge Substrate中。
UFO文档中提及了智能体设计的几个核心构成要素:Memory(记忆)、Blackboard(黑板)、State(状态)、Prompter(提示器)和Processor(处理器)5。这些组件共同构成了智能体(无论是HostAgent还是AppAgent)的内部运作机制。
定义: UFO智能体框架的基础组件,代表智能体当前状况,决定下一个执行动作和处理请求的智能体 7。
实现细节:
AgentStatus类(枚举类)定义状态集合 11AgentStateManager管理字符串到状态类的映射,通过装饰器注册状态类 11AgentState基类,必须实现:handle方法:处理该状态下的动作next_state和next_agent方法:确定状态转换后的下个状态和处理智能体 11功能: 存储用户请求、应用状态及相关数据 7。
知识增强机制:
管理接口 (BasicAgent类提供):
add_memory, clear_memory, delete_memorybuild_experience_retrieverbuild_offline_docs_retriever 7作用: 智能体间共享信息的组件 7。
应用场景:
HostAgent读写全局黑板,实现:AppAgent生成提示时考虑黑板信息 (blackboard_prompt) 6功能: 根据用户请求和应用状态生成LLM提示 7。
实现方式:
BasicAgent提供:get_prompter获取提示器实例message_constructor构建LLM消息 7FollowerAgentPrompter 6提示内容组成:
职责: 管理智能体工作流,包括:
具体实现:
HostAgent: 激活处理器分解用户请求为子任务 8FollowerAgent: 使用特定Session和Processor处理指令 6BasicAgent: 内置processor属性 7这些组件的协同工作使得UFO中的智能体能够有效地感知环境、进行推理决策、执行动作并从中学习。
HostAgent在UFO²架构中扮演着核心协调者的角色 2。其主要职责包括 7:
HostAgent的输入包括用户请求(自然语言字符串)、现有活动应用的信息(字符串列表)以及桌面截图(图像)8。其输出则包括对当前桌面截图的观察(字符串)、给用户的额外评论或信息(字符串)、需要向用户提出的问题(字符串列表)以及可由HostAgent执行的bash命令(用于打开应用或执行系统命令)8。这些输出通常由LLM格式化为JSON对象。
HostAgent的状态机定义在其host_agent_states.py模块中,主要状态包括CONTINUE(默认,用于动作规划和执行)、PENDING(用于安全关键操作,需用户确认)、FINISH(任务完成)和FAIL(发生不可恢复的故障)8。
AppAgent专责于在选定的应用程序内迭代执行动作,直至在该应用内的子任务成功完成 7。它由HostAgent创建,旨在完成某个“回合”(Round)中的一个子任务。
AppAgent的核心运作机制是ReAct(Reasoning and Acting)循环 5。在这个循环中,AppAgent:
为了增强其理解和执行能力,AppAgent具备以下特性:
AppAgent的输出除了观察、思考和控制信息外,还包括当前任务状态(Status,如CONTINUE, FINISH, PENDING等)、对子任务的计划(Plan)、当前子任务描述(Subtask)、以及对用户的评论(Comment)4。
FollowerAgent是AppAgent的一个特化版本,它继承了AppAgent的大部分功能 6。与AppAgent不同的是,FollowerAgent并非自主推理以决定下一步行动,而是严格遵循用户预先定义的步骤指令来执行任务 6。
这种模式在以下场景中特别有用 6:
FollowerAgent在“跟随者模式”(follower mode)下运行 6。用户需要创建一个JSON格式的计划文件(plan file),其中包含任务描述(task)、步骤列表(steps)和目标对象(object,即应用程序或文件)10。UFO通过命令行参数–mode follower和–plan <plan_file_or_folder_path>启动此模式 10。它也支持批量运行多个计划文件。
FollowerAgent使用特定的Session(FollowerSession)和Processor来处理用户指令 6。如果配置了EVA_SESSION为True,UFO还会调用EvaluationAgent来评估任务的完成情况 10。
EvaluationAgent的职责是评估一个会话(session)或一个回合(round)任务的完成度 7。在常规工作流程中,主要由HostAgent和AppAgent参与用户交互,而EvaluationAgent则用于特定任务,例如在Follower模式下评估预定义计划的执行结果 7。
当config_dev.yaml文件中的EVA_SESSION设置为True时,UFO会在Follower模式执行完毕后调用EvaluationAgent 10。评估日志会记录在logs/{task_name}/evaluation.log文件中 10。
尽管文档指出了EvaluationAgent的存在及其用途,但关于其具体的评估标准、工作方法或内部机制的详细信息并未在现有摘要中充分阐述 5。要深入了解其工作原理,可能需要参考UFO²的技术论文或更详细的开发者文档。
UFO项目的实现依赖于一系列关键技术和机制的协同工作,这些技术共同构成了其强大的自动化能力。
为了准确地识别和交互应用程序的UI元素,UFO采用了一种混合的控制检测方法,结合了程序化接口和视觉分析。
这种混合策略是应对现代应用程序UI多样性和复杂性的关键。一些应用程序可能没有完全实现UIA接口,或者包含大量自定义绘制的控件,此时视觉检测就显得尤为重要。反之,当UIA信息可用时,它可以提供比单纯视觉分析更精确和语义更丰富的控件信息。
AppAgent通过一个名为Puppeteer的执行器来与应用程序进行交互 5。Puppeteer扮演着命令模式中“调用者”(Invoker)的角色,它负责触发命令,这些命令随后由“接收者”(Receiver)执行 14。这种设计模式解耦了动作的发送者和接收者,使得智能体可以在不了解对象或动作执行细节的情况下对不同对象执行操作,从而提高了系统的灵活性和可扩展性 14。
Puppeteer支持多种自动化方式:
HostAgent和AppAgent将动作请求传递给Puppeteer,Puppeteer再根据动作类型(GUI或API)和目标应用,选择合适的Automator和Receiver来执行具体操作 17。这种混合GUI与API的动作执行能力是UFO²的一大特点,它使得智能体能够根据可用性和效率,在直接API调用和UI模拟之间智能切换,以实现快速而鲁棒的自动化 1。
UFO的核心能力之一是其持续知识基底(Continuous Knowledge Substrate),它通过**检索增强生成(Retrieval-Augmented Generation, RAG)**技术,使智能体能够动态地获取和利用知识,从而不断学习和提升性能 1。
知识的来源是多样的:
这些不同来源的知识被整合到一个向量存储(vector store)中,在推理时(即AppAgent执行ReAct循环时)按需检索 5。检索到的相关知识会作为上下文信息,辅助LLM进行更准确的思考和决策。例如,在AppAgent中,会使用retrieved_documents_prompt_helper或rag_experience_retrieve等方法将检索到的文档或经验整合到发送给LLM的提示中 9。
这种机制使得UFO不仅仅是一个静态的执行代理,更是一个能够适应新应用、新任务、新信息,并从经验中不断成长的动态系统。learner目录包含了构建帮助文档向量数据库的脚本和工具,而vectordb目录则用于存储RAG所需的向量数据库数据 19。experience目录负责解析和保存智能体的自我经验 19。
UFO中的AppAgent采用ReAct (Reasoning and Acting) 的工作模式 5。这是一个迭代的“观察-思考-行动”循环,旨在模拟人类在解决问题时的认知过程。
这个循环不断重复,直到当前子任务完成(状态变为FINISH),或者需要用户干预(状态变为PENDING),或者需要切换到其他应用(状态变为APP_SELECTION,由HostAgent处理)4。
多模态感知是ReAct循环成功的关键。仅依赖文本信息(如UIA树)可能无法完全理解复杂或自定义的UI,而仅依赖视觉信息又可能缺乏精确的控件语义。UFO通过结合两者,使智能体能够更全面地理解应用状态,从而做出更明智的决策。
为了解决大型语言模型(LLM)固有的推理延迟问题,并提高自动化流程的整体效率,UFO²引入了**投机性多动作执行(Speculative Multi-Action)**机制 1。
该机制的核心思想是:与其让AppAgent在ReAct循环中每一步都单独调用LLM进行一次观察-思考-行动的决策,不如尝试预测接下来可能连续发生的多个步骤,并将这些预测的动作序列捆绑在一起,通过一次LLM调用进行统一的评估和验证 1。
具体来说,**Speculative Executor(投机执行器)**会根据当前状态和任务目标,预测出一批(batch)可能的后续动作 5。然后,这些预测的动作会与实时的UIA状态(或其他应用状态信息)进行比对验证,以确保它们的可行性和正确性 1。如果LLM确认这个动作序列是合理的,那么这些动作就可以被连续执行,从而减少了多次LLM调用的开销。
根据项目文档,这种方法可以将LLM的查询次数减少高达51% 1。这对于提升用户体验和降低API调用成本都具有重要意义。
在UFO的早期版本(README_v1.md中提及)中,也曾引入“多动作模式”(Multi-Action Mode),通过在config_dev.yaml中设置ACTION_SEQUENCE=True来启用,允许在单次推理步骤中执行多个动作 17。投机性多动作执行可以看作是这一理念的进一步发展和优化,使其更加智能和动态。
这种机制的挑战在于如何准确地预测动作序列,以及如何有效地验证这些序列。如果预测不准确或验证不充分,可能会导致错误的执行路径。因此,其有效性在很大程度上依赖于底层LLM的预测能力和对当前应用状态的准确把握。
为了提升用户体验,使得自动化任务的执行不干扰用户的正常工作,UFO²计划并已完成(将在下一版本发布)**画中画桌面(Picture-in-Picture Desktop, PiP)**功能 1。
PiP模式的核心特性是,智能体的自动化操作将在一个隔离的、沙箱化的虚拟桌面环境中运行 1。这意味着:
UFO²的论文中提到,PiP接口是一个安全的、嵌套的桌面环境,使得智能体可以独立于用户的主会话执行任务 12。
这一特性对于将UFO从一个主要面向开发者和研究人员的工具,转变为一个可供更广泛用户在日常工作中使用的实用生产力工具有着重要意义。它解决了许多桌面自动化工具面临的一个共同痛点:自动化脚本运行时,用户往往无法使用计算机。PiP模式通过提供并发操作的能力,极大地增强了UFO的实用性。
UFO项目提供了相对清晰的安装和配置指南,旨在帮助用户快速上手。
环境要求:
安装步骤 1:
(可选)创建conda环境:
conda create -n ufo python=3.10
conda activate ufo
克隆仓库:
git clone https://github.com/microsoft/UFO.git
cd UFO
安装依赖:
pip install -r requirements.txt
requirements.txt 文件列出了项目所需的Python包及其版本 20。主要依赖包括:
openai: 用于与OpenAI模型交互langchain, langchain_community: LLM应用开发框架Pillow: 图像处理pywin32, pywinauto, uiautomation: Windows自动化库PyYAML: 解析配置文件faiss-cpu: 用于向量相似性搜索(RAG)sentence-transformers: 生成文本嵌入art, colorama, msal, Requests, lxml, psutilbeautifulsoup4, pandas, html2text, pyautogui如果需要使用特定的LLM(如Qwen)或功能(如AAD认证、停用词移除),可能需要取消注释requirements.txt中的相关库并安装 1。
配置LLM 1:
在运行UFO之前,必须为HostAgent和AppAgent单独配置LLM。这通过复制ufo/config/config.yaml.template为ufo/config/config.yaml并编辑其中的HOST_AGENT和APP_AGENT部分来完成。
需要配置的参数通常包括:
(可选)配置RAG 1:
为了增强UFO的能力,可以在ufo/config/config.yaml中配置外部数据库以支持检索增强生成(RAG)。可配置的RAG选项包括:
启动UFO 1:
在克隆的UFO文件夹中,通过以下命令启动:
Bash
python -m ufo –task <your_task_name> \
<your_task_name>是用户定义的任务名称。成功启动后,会显示欢迎信息,用户可以通过命令行界面与UFO交互。
执行日志 1:
UFO会将截图、请求和响应日志保存在./ufo/logs/<your_task_name>/目录下。这些日志可用于调试、回放或分析智能体的输出。UFO的文档网站也提供了Markdown日志查看器、请求日志、步骤日志、评估日志、截图和UI树等查看工具 5。
Dataflow模块的使用 21:
UFO项目包含一个dataflow模块,用于为大型动作模型(LAMs)进行数据收集。它也需要安装requirements.txt中的依赖,并单独配置dataflow/config/config.yaml中的PREFILL_AGENT和FILTER_AGENT的LLM参数。
UFO项目作为一个开源项目,其发展离不开社区的参与和贡献。
项目资源与许可:
获取帮助:
媒体关注:
UFO项目自发布以来,受到了多家媒体和技术社区的关注,相关报道强调了其作为下一代Windows智能交互体验的潜力 1。
GitHub Issues分析 (截至2025年5月7日) 22:
对GitHub Issues的分析揭示了一些常见问题、功能请求和活跃讨论:
GitHub Pull Requests分析 (截至2025年4月) 23:
开放的PR表明了当前的开发焦点:
UFO项目在桌面自动化领域展现了雄心勃勃的愿景和坚实的技术基础,但同时也面临着挑战。
UFO项目的优势:
潜在挑战与局限性:
与相关方法的比较:
路线图与未来发展方向 5:
此外,项目中dataflow目录的存在以及相关大型动作模型(LAM)论文的提及 17,表明训练专门的、更高效的动作模型也是未来的一个重要研究方向。
更广泛的影响:
UFO及其代表的“桌面智能体操作系统”理念,有潜力深刻改变人机交互的范式。它可能大幅降低普通用户实现复杂任务自动化的门槛,使操作系统本身演变为一个更主动、更智能的助手。然而,这也同时带来了关于用户控制权、数据隐私、系统安全以及传统UI未来角色的深刻思考。随着这类智能体能力的不断增强,如何在赋能用户与保障安全之间取得平衡,将是整个领域需要面对的关键议题。UFO项目对LLM的依赖性也意味着,其发展将与基础LLM技术的进步紧密相连,如何持续优化提示工程、验证机制,并探索更高效、更可控的LLM集成方案,将是UFO团队面临的长期挑战。
微软的UFO项目,特别是其演进版本UFO² (Desktop AgentOS),代表了在构建能够理解自然语言并自主执行复杂桌面任务的智能体方面的一大步。通过深度整合Windows操作系统底层技术(UIA, Win32, WinCOM),结合多智能体协作架构(HostAgent, AppAgent)、先进的AI机制(多模态感知, RAG驱动的持续学习, ReAct循环, 投机性多动作执行)以及对用户体验的细致考量(画中画桌面),UFO旨在提供一个强大、灵活且可进化的自动化平台。
该项目的设计哲学体现了对当前AI能力的深刻理解和对未来人机交互趋势的前瞻性思考。它不仅仅追求单一任务的自动化,而是试图构建一个“智能体操作系统”的雏形,让智能体成为用户与数字世界交互的更高级媒介。混合GUI与API操作的务实策略,使其能够在不同类型的应用程序上实现鲁棒的自动化;持续知识基底则赋予了系统学习和适应的能力,这是其超越传统脚本自动化的关键。
然而,UFO项目也面临着通用AI系统固有的挑战:在多样化和动态的真实世界应用中保持鲁棒性、处理LLM的非确定性和潜在错误、确保系统安全以及管理API调用成本等。GitHub上用户反馈的问题也揭示了在特定应用和场景下实现完美自动化的难度。
未来的发展方向,如“AgentOS-as-a-Service”和“智能体间通信”,预示着UFO可能演变成一个更开放、更具连接性的平台,为更广泛的自动化生态系统提供动力。同时,对大型动作模型(LAM)的研究也可能为其带来性能上的突破。
总而言之,UFO项目是AI驱动自动化领域一个值得高度关注的里程碑。它不仅展示了将大型语言模型的能力应用于复杂桌面环境的巨大潜力,也为未来操作系统如何与智能体深度融合提供了富有启发性的探索。尽管挑战依然存在,但UFO所勾勒的蓝图——一个能够理解用户意图、自主学习、并无缝操作整个桌面环境的智能伙伴——无疑为下一代计算体验指明了一个激动人心的方向。