UFO : 一个专注于用户界面(UI)的Windows操作系统交互代理
UFO 是一个UI专注的多代理框架,通过在单个或多个应用程序内无缝导航和操作来满足用户在Windows操作系统上的请求。
🕌 框架
UFO 作为一个多代理框架运行,包括:
- HostAgent 🤖 ,负责选择一个应用程序来满足用户请求。当请求涉及多个应用程序且任务在前一个应用程序中部分完成时,此代理也可能切换到另一个应用程序。
- AppAgent 👾 ,负责在选定的应用程序上反复执行操作,直到在特定应用程序内成功完成任务。
- Application Automator 🎮 ,负责将HostAgent和AppAgent的操作转换为与应用程序的互动,使用UI控件、本机API或AI工具。查看更多详情 这里。
两个代理都利用了GPT-Vision的多模态能力来理解应用程序UI并满足用户请求。更多详情,请参阅我们的技术报告和文档。
📢 新闻
- 📅 2024-07-06: 我们发布了**v1.0.0版的新版本!**你可以查看我们的文档。我们欢迎你的贡献和反馈!
- 📅 2024-06-28: 我们很高兴地宣布,我们的官方介绍视频现在在YouTube上可以观看了!
- 📅 2024-06-25: v0.2.1版新发布! 我们很高兴地宣布0.2.1版的发布!此更新包括几个新功能和改进:
- HostAgent重构: 我们重构了HostAgent,以增强其在UFO中管理AppAgent的效率。
- 评价代理: 引入一个评估代理,用于评估任务完成情况并提供实时反馈。
- Google Gemini支持: UFO现在支持Google Gemini作为推理引擎。请参阅详细指南文档。
- 自定义用户代理: 用户现在可以通过回答几个问题来创建定制代理。
- 📅 2024-05-21: 我们已经达到了5000颗星!✨
- 📅 2024-05-08: v0.1.1版新发布! 我们做了一些重要更新!以前称为AppAgent和ActAgent,我们已将其重新命名为HostAgent和AppAgent,以更好地符合其功能。探索最新的增强功能:
- 从人类演示学习: UFO现在支持从人类演示学习!使用Windows步骤记录器记录你的操作步骤并演示给UFO。更多信息请参考我们的详细指南README.md。
- Win32支持: 我们加入了对Win32作为控制后台的支持,增强了我们的UI自动化能力。
- 扩展应用程序交互: UFO现在不仅限于UI控件,还允许通过键盘输入和本机API与应用程序进行交互!目前,我们支持Word(示例),即将支持更多。定制并构建你自己的交互方式。
- 控制过滤: 通过使用控制过滤器移除无关的控制项简化LLM的操作过程。在config_dev.yaml的
control filtering
部分底部启用它们。
- 📅 2024-03-25: v0.0.1版新发布! 查看我们令人兴奋的新功能。
- 我们现在支持为每个Windows应用程序创建帮助文档,成为应用程序专家。详见文档获取更多详情!
- UFO现在支持从离线文档和在线Bing搜索中进行RAG。
- 你可以将任务完成轨迹保存到UFO的记忆中以供参考,提升未来的成功率!
- 你可以为AppAgent和ActAgent自定义不同的GPT模型。现在支持仅文本模型(例如GPT-4)!
- 📅 2024-02-14: 我们的技术报告已上线!
- 📅 2024-02-10: UFO在GitHub发布🎈。新年快乐🐉!
🌐 媒体报道
UFO的发现引起了各种媒体的关注,包括:
- 微软的UFO劫持了传统的用户界面,为Windows带来更智能的体验
- 🚀 UFO & GPT-4-V:坐下来放松,GPT帮你搞定一切🌌
- AI PC - 计算机的未来? - 微软UFO
- 下一代Windows系统曝光:基于GPT-4V,Agent跨应用调度,代号UFO
- 下一代智能版 Windows 要来了?微软推出首个 Windows Agent,命名为 UFO!
- 微软发布开源版“UFO”! 试试这个自动操控Windows的AI代理
- ...
这些资源提供了关于技术发展和UFO现象在各个平台上影响的洞见。
💥 亮点
- 第一个Windows代理 - UFO是首个可以将用户在自然语言中的请求转化为Windows操作系统上的可操作操作的代理框架。
- 专家代理 - UFO通过异构源的检索增强生成(RAG),包括离线帮助文件、在线搜索引擎和人类示范,成为应用程序的“专家”。
- 丰富的技能集 - UFO配备了多种技能支持全面的自动化,如鼠标、键盘、本机API和“Copilot”。
- 互动模式 - UFO允许用户在同一会话中进行多个子请求,从而轻松完成复杂任务。
- 代理定制 - UFO允许用户通过提供额外信息来定制自己的代理。当需要更好地定制其行为时,代理会主动询问用户详细信息。
- 可扩展的AppAgent创建 - UFO提供了扩展性,允许用户和应用程序开发者以简单和可扩展的方式创建自己的AppAgent。
✨ 快速开始
🛠️ 步骤1: 安装
UFO需要Python >= 3.10运行在Windows OS >= 10上。可以通过运行以下命令进行安装:
# (可选)创建 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
# 如果你想使用Qwen作为你的LLM,请取消相关库的注释。
⚙️ 步骤2: 配置LLM
在运行UFO之前,你需要为HostAgent和AppAgent单独提供你的LLM配置。你可以通过复制ufo/config/config.yaml.template
并编辑HOST_AGENT和APP_AGENT的配置来创建你自己的配置文件ufo/config/config.yaml
:
OpenAI
VISUAL_MODE: True, # 是否使用视觉模式
API_TYPE: "openai" , # API类型,"openai"为OpenAI API。
API_BASE: "https://api.openai.com/v1/chat/completions", # OpenAI API端点。
API_KEY: "sk-", # OpenAI API密钥,以sk-开头
API_VERSION: "2024-02-15-preview", # 默认为"2024-02-15-preview"
API_MODEL: "gpt-4-vision-preview", # 仅有的OpenAI模型
Azure OpenAI (AOAI)
VISUAL_MODE: True, # 是否使用视觉模式
API_TYPE: "aoai" , # API类型,"aoai"为Azure OpenAI。
API_BASE: "YOUR_ENDPOINT", # AOAI API地址。格式:https://{your-resource-name}.openai.azure.com
API_KEY: "YOUR_KEY", # aoai API密钥
API_VERSION: "2024-02-15-preview", # 默认为"2024-02-15-preview"
API_MODEL: "gpt-4-vision-preview", # 仅有的OpenAI模型
API_DEPLOYMENT_ID: "YOUR_AOAI_DEPLOYMENT", # AOAI API的部署ID
你还可以为每个代理设置非视觉模型(例如,GPT-4),通过设置VISUAL_MODE: False
和合适的API_MODEL
(openai)和API_DEPLOYMENT_ID
(aoai)。你还可以在BACKUP_AGENT
字段中可选地设置备用的LLM引擎,以备上述引擎在推理过程中失败时使用。
非视觉模型配置
你可以在config.yaml
文件中配置以下设置,利用非视觉模型(例如GPT-4)为每个代理:
VISUAL_MODE: False # 启用非视觉模式
- 为每个代理指定适当的
API_MODEL
(openai)和API_DEPLOYMENT_ID
(aoai)。
你还可以在BACKUP_AGENT
字段中可选地设置备用语言模型(LLM)引擎,以应对主要引擎在推理过程中失效的情况。请确保准确配置这些设置,以有效利用非视觉模型。
注意 💡
UFO还支持其他LLM和高级配置,例如自定义你自己的模型,请查阅文档了解更多详情。由于模型输入的限制,提供了精简版的提示配置,用户可以在config_dev.yaml
中配置以体验它。
📔 步骤3: RAG的附加设置(可选)
如果你想增强UFO与外部知识的能力,你可以在ufo/config/config.yaml
文件中选择配置一个外部数据库以进行检索增强生成(RAG)。
我们提供了以下选项来增强UFO的能力:
- 离线帮助文档 允许UFO从离线帮助文档中检索信息。
- 在线Bing搜索引擎:利用最新的在线搜索结果提升UFO的能力。
- 自我经验:将任务完成的轨迹保存到UFO的记忆中以供参考。
- 用户演示:通过用户演示增强UFO的能力。
查阅各自的文档获取关于如何配置这些设置的更多信息。
来自自示范的RAG
将任务完成轨迹保存到UFO的内存中以供将来参考。这可以根据其以前的经验提高其未来的成功率!
完成任务后,你会看到以下消息:
您是否希望将当前对话流程保存以供代理将来参考?
[Y]为是,按其他任意键为否。
按Y
将其保存到内存中,并通过以下配置启用内存检索:
## 经验的RAG配置
RAG_EXPERIENCE: True # 是否使用来自其自经验的RAG。
RAG_EXPERIENCE_RETRIEVED_TOPK: 5 # 离线检索文档的topk
来自用户示范的RAG
通过用户示范提升UFO的能力!使用Microsoft步骤记录器记录完成特定任务的逐步过程。通过record_processor处理一个简单命令(参见README),UFO可以将这些轨迹存储在其内存中以供将来参考,从用户交互中增强其学习。
你可以通过设置以下配置启用此功能:
## 示范的RAG配置
RAG_DEMONSTRATION: True # 是否使用来自用户示范的RAG。
RAG_DEMONSTRATION_RETRIEVED_TOPK: 5 # 示范样例的topk。
🎉 步骤4:启动UFO
⌨️ 你可以在Windows命令行(CLI)中执行以下操作:
# 假设你在克隆的UFO文件夹中
python -m ufo --task <your_task_name>
这将启动UFO进程,你可以通过命令行界面与其交互。 如果一切顺利,你将看到以下消息:
欢迎使用UFO🛸,一个针对Windows OS交互的UI专注代理。
_ _ _____ ___
| | | || ___| / _ \
| | | || |_ | | | |
| |_| || _| | |_| |
\___/ |_| \___/
请输入要完成的请求🛸:
⚠️提醒:####
- 在UFO执行你的请求之前,请确保目标应用程序在系统上是激活的。
- GPT-V接受你的桌面和应用程序GUI的截图作为输入。请确保在执行过程中没有敏感或机密信息可见或被捕获。更多信息,参见免责声明.md。
步骤5 🎥:执行日志
你可以在以下文件夹找到拍摄的截图以及请求和响应日志:
./ufo/logs/<your_task_name>/
你可以用它们来调试、回放或分析代理输出。
❓获取帮助
- 请先查看我们的文档这里。
- ❔GitHub Issues(优先)
- 对于其他交流,请联系ufo-agent@microsoft.com。
🎬 示例演示
我们展示了两个使用UFO在Windows OS上完成用户请求的演示视频。更多案例研究,请参阅我们的技术报告。
1️⃣🗑️ 示例1:删除PowerPoint演示文稿中的所有注释。
在此示例中,我们将演示如何高效地使用UFO通过几个简单步骤删除PowerPoint演示文稿中的所有注释。探索此功能以提高你的生产力,让工作变得更聪明而不是更辛苦!
https://github.com/microsoft/UFO/assets/11352048/cf60c643-04f7-4180-9a55-5fb240627834
2️⃣📧 示例2:使用来自多个来源的文本撰写电子邮件。
在此示例中,我们将演示如何利用UFO提取Word文档中的文本、描述图像、撰写电子邮件并无缝发送。享受跨应用体验UFO的多功能性和效率!
https://github.com/microsoft/UFO/assets/11352048/aa41ad47-fae7-4334-8e0b-ba71c4fc32e0
📊 评估
请参阅我们技术报告附录A部分提供的WindowsBench。以下是一些帮助完成请求的提示(和要求):
- 在UFO执行你的请求之前,确保目标应用程序是激活的(尽管它可能是最小化的)。
- 请注意,GPT-V的输出可能并不总是与相同的请求一致。如果你的初次尝试不成功,请考虑重试。
📚 引用
我们的技术报告论文可以在这里找到。请注意,之前论文中的AppAgent和ActAgent在代码库中被重命名为HostAgent和AppAgent,以更好地反映它们的功能。 如果你在研究中使用UFO,请引用我们的论文:
@article{ufo,
title={{UFO: A UI-Focused Agent for Windows OS Interaction}},
author={Zhang, Chaoyun and Li, Liqun and He, Shilin and Zhang, Xu and Qiao, Bo and Qin, Si and Ma, Minghua and Kang, Yu and Lin, Qingwei and Rajmohan, Saravan and Zhang, Dongmei and Zhang, Qi},
journal={arXiv preprint arXiv:2402.07939},
year={2024}
}
📝 Todo列表
- RAG增强型UFO。
- 使用Win32 API支持更多控制。
- 文档。
- 支持本地主机GUI交互模型。
- UFO的聊天框GUI。
🎨 相关项目
你可能还会发现TaskWeaver有用,这是一个代码优先LLM代理框架,用于无缝规划和执行数据分析任务。
⚠️ 免责声明
通过选择运行提供的代码,你承认并同意免责声明.md中的功能和数据处理做法的条款和条件。
商标
此项目可能包含项目、产品或服务的商标或标识。对Microsoft 商标或标识的授权使用须遵循并必须遵守Microsoft的商标和品牌指南。 在修改版本的此项目中使用Microsoft商标或标识不得引起混淆或暗示Microsoft的赞助。 对第三方商标或标识的任何使用须遵循这些第三方的政策。