VLMs之Agent之CogAgent:CogAgent的简介、安装和使用方法、案例应用之详细攻略
VLMs之Agent之CogAgent:CogAgent的简介、安装和使用方法、案例应用之详细攻略
导读:在2024年末,智谱于11月29日正式提出了GLM-OS概念,并推出了两款Agent产品——AutoGLM和GLM-PC。为了促进大模型Agent生态的发展,智谱决定将GLM-PC的基础模型,即CogAgent-9B,进行开源,以便社区进一步开发和利用。
CogAgent-9B-20241220是基于GLM-4V-9B训练得到的专用Agent任务模型,它能够仅通过屏幕截图输入(无需HTML等文本表征),结合用户指定的任务和历史操作,预测下一步的GUI操作。这一模型由于屏幕截图和GUI操作的广泛适用性,可广泛应用于个人电脑、手机、车机设备等基于GUI交互的场景。
相较于2023年12月开源的第一版CogAgent模型,CogAgent-9B-20241220在GUI感知、推理预测准确性、动作空间完善性、任务普适性和泛化性等方面都有显著提升,并且支持中英文双语的屏幕截图和语言交互。
目录
相关文章
VLMs之Agent之CogAgent:《CogAgent: A Visual Language Model for GUI Agents》翻译与解读
VLMs之Agent之CogAgent:CogAgent-9b的简介、安装和使用方法、案例应用之详细攻略
CogAgent-9b的简介
0、更新
(1)、2023年12月,发布CogAgent
(2)、2024年12月,发布CogAgent-9b-20241220
1、CogAgent-9b-20241220 的特点
2、CogAgent-9b-20241220 的模型性能
2.1、基准测试
2.2、CogAgent 的局限性
3、CogAgent的模型能力
CogAgent-9b的安装和使用方法
1、环境配置
(1)、模型资源
2、模型运行
T1、本地推理 (命令行交互)
T2、在线Web演示 (持续图像上传交互式推理)
3、输入输出格式
(1)、用户输入部分
(2)、模型返回部分
4、使用示例
(1)、标记所有邮件为已读
5、微调模型
CogAgent-9b的案例应用
1、基础案例
(1)、自动发送圣诞祝福
(2)、辅助发送邮件
相关文章
VLMs之Agent之CogAgent:《CogAgent: A Visual Language Model for GUI Agents》翻译与解读
VLMs之Agent之CogAgent:《CogAgent: A Visual Language Model for GUI Agents》翻译与解读-CSDN博客
VLMs之Agent之CogAgent:CogAgent-9b的简介、安装和使用方法、案例应用之详细攻略
VLMs之Agent之CogAgent:CogAgent的简介、安装和使用方法、案例应用之详细攻略-CSDN博客
CogAgent-9b的简介
CogAgent是一个开源的端到端基于视觉语言模型(VLM)的GUI智能体。它是一个改进自CogVLM的视觉语言模型,拥有110亿视觉参数和70亿语言参数,支持1120x1120分辨率的图像理解,并在GUI图像智能体能力上进行了进一步增强。
CogAgent-9b-20241220 模型基于 GLM-4V-9B 双语开源 VLM 基座模型构建。通过数据优化、多阶段训练和策略改进,它在 GUI 感知、推理预测准确性、动作空间完整性、任务普适性和泛化性方面都有显著提升,支持中英文双语的屏幕截图和语言交互。 该模型已应用于智谱 AI 的 GLM-PC 产品。 相较于之前的 CogAgent 版本,它在 GUI 感知、推理准确性、动作空间完整性、任务普适性和泛化性方面都有大幅提升。
GitHub地址:GitHub - THUDM/CogAgent: An open-sourced end-to-end VLM-based GUI Agent
技术报告:GLM-PC
0、更新
>> 2024.12 我们开源了最新版 CogAgent-9B-20241220 模型。相较于上一版本CogAgent,CogAgent-9B-20241220 在GUI感知、推理预测准确性、动作空间完善性、任务的普适和泛化性上得到了大幅提升,能够接受中英文双语的屏幕截图和语言交互。
>> 2024.6 CogAgent 被 CVPR2024 接收,并被评为大会 Highlight(前3%) 。
>> 2023.12 我们开源了首个GUI Agent:CogAgent(该版本仓库位于这里),并发布了对应论文 �� CogAgent论文。
(1)、2023年12月,发布CogAgent
2023年12月,我们发布了CogAgent,第一个基于视觉语言模型(Visual Language Model, VLM)的开源 GUI agent 模型。 CogAgent仅依赖于屏幕截图作为输入(无需HTML等文本表征),可以根据用户指定的任意任务,结合过往的操作历史,预测下一步的GUI操作。由于屏幕截图和GUI操作的普适性,CogAgent可以被利用于任何基于GUI交互的场景,例如个人电脑、手机、车机设备等。CogAgent在 Mind2Web(电脑agent)、AITW(手机agent)取得了当时最佳的性能,也展现出了相比于自然语言模型 LLM agent 的巨大优势。在发布后一年的时间内,在学界和大模型社区中,越来越多的研究者和开发者们开始关注VLM-based GUI Agent。 截至目前(2024.12.20),CogAgent 累计逾100万下载量,被超过200个工作引用。 在一年后的今天,Claude 3.5 (Computer Use)、Gemini 2.0 - Project Mariner 等商业化模型也开始探索视觉 GUI agent,以发布或内测 API 的形式供公众使用。
(2)、2024年12月,发布CogAgent-9b-20241220
模型基座和结构升级 | >> 使用GLM-4V-9B视觉语言模型作为基座模型,提升图像理解性能。 |
视觉处理模块优化 | >> 实现高效统一的视觉处理模块,支持1120*1120高分辨率图像输入。 >> 采用带参数的下采样方法,提高模型效率,支持任意比例或大小的图像输入。 >> 建议用户在实际使用中适当增加图标和文字的相对大小。 |
数据集丰富与完善 | >> 整合多种数据集,包括无监督数据和GUI指令微调数据集。 >> 利用CogAgent自我生成数据,扩充数据集。 |
预训练策略优化 | >> 提出GUI Grounding预训练,构造GUI的REG和REC任务。 >> 使用40万网页数据构造1.4亿训练样本,扩充桌面应用和移动应用的layout数据。 |
后训练策略改进 | >> 采用GUI instruction tuning和GUI agent SFT两个阶段的后训练策略。 >> 使用开源数据和私有收集数据,提升模型对GUI的理解和推理能力。 |
模型推理及思维链优化 | >> 将思维链分解为Status、Plan、Action、Operation,并使用随机采样的方式混合训练数据。 |
动作空间完善 | >> 明确基础动作空间,新增LLM、QUOTE_TEXT、LAUNCH等高级动作,增强模型工具使用和交互能力。 |
1、CogAgent-9b-20241220 的特点
>> 端到端 VLM-based GUI 智能体:CogAgent不是简单的视觉问答模型,而是一个完整的GUI智能体,能够理解用户指令,执行一系列操作,并根据GUI反馈调整策略。它将视觉理解和语言理解无缝集成,实现了端到端的GUI交互。
>> 基于强大基座模型:CogAgent-9b-20241220 基于 GLM-4V-9B 双语开源 VLM 基座模型,继承了其强大的语言理解和视觉理解能力。
>> 显著的性能提升:相较于之前的版本,CogAgent-9b-20241220 在 GUI 感知、推理准确性、动作空间完整性、任务普适性和泛化性方面都有显著提升。
>> 双语支持:支持中英文双语交互,能够理解和生成中英文指令和反馈,拓展了其应用范围。
>> 支持多种输出格式:提供多种输出格式选项,方便用户根据需求选择合适的输出内容,例如:action_operation, status_plan_action_operation, status_action_op_sensitive 等。 用户可以根据实际需求选择不同的格式,以获取更全面的信息或更简洁的结果。
>> 严格的输入输出规范:为了保证模型的性能和稳定性,定义了严格的输入输出格式,用户需要按照规范构建输入提示,并解析模型的输出结果。 这虽然增加了使用门槛,但也保证了模型的可靠性和可控性。
>> 支持连续执行历史:虽然不支持连续对话,但支持连续执行历史,允许用户在同一任务中多次调用模型,并将之前的操作结果作为上下文信息,指导后续操作。 这对于完成复杂的多步 GUI 操作至关重要。
>> 开源开放:代码和模型权重均已开源,方便研究者和开发者进行学习、改进和应用。
2、CogAgent-9b-20241220 的模型性能
CogAgent-9b-20241220 在多个方面取得了 SOTA 或领先的结果,但没有提供具体的数值结果。 需要参考其论文或其他技术报告获取更详细的性能数据。 性能优势体现在:
>> GUI 定位 (Screenspot):在 GUI 元素定位方面表现出色。
>> 单步操作 (OmniAct):在执行单步 GUI 操作方面取得了领先的结果。
>> 多步操作 (OSWorld):在执行多步 GUI 操作方面也表现优异,仅在某些特定场景下略逊于一些专门针对计算机使用的商业模型。
>> 中文 step-wise 内部评测榜单 (CogAgentBench-basic-cn):在内部的中文分步操作基准测试中取得了领先地位。
2.1、基准测试
CogAgent-9b-20241220 模型在多平台、多类别的GUI Agent及GUI Grounding Benchmarks上取得了当前最优的结果。在 CogAgent-9b-20241220 技术博客 中,我们对比了基于API的商业模型(GPT-4o-20240806、Claude-3.5-Sonnet)、商业API + GUI Grounding模型(GPT-4o + UGround、GPT-4o + OS-ATLAS)、开源GUI Agent模型(Qwen2-VL、ShowUI、SeeClick)。结果表明:
>> CogAgent在GUI定位(Screenspot)、单步操作(OmniAct)、中文step-wise内部评测榜单(CogAgentBench-basic-cn)、多步操作(OSWorld)都取得了领先的结果;
>> 仅在OSworld上略逊于针对Computer Use特化的Claude-3.5-Sonnet和结合外接 GUI Grounding Model 的GPT-4o。
2.2、CogAgent 的局限性
>> 对特定 GUI 的依赖:虽然具有跨任务泛化能力,但其性能可能仍然会受到特定 GUI 设计的影响。 不同的 GUI 设计可能需要不同的策略和方法。
>> 输出坐标的精度:论文中提到输出坐标可能不够精确,这需要进一步改进。
>> 多图像处理能力:目前可能还不支持处理多张图像,这限制了其在某些复杂场景中的应用。
>> 对训练数据的依赖:模型的性能很大程度上依赖于其训练数据,训练数据的质量和数量直接影响模型的效果。
3、CogAgent的模型能力
>> GUI 感知:能够准确识别和定位GUI界面中的各种元素,例如按钮、文本框、图标、图片等,并理解其含义和功能。
>> 推理能力:能够根据用户指令和GUI界面信息进行推理,制定操作计划,并选择合适的动作序列来完成任务。
>> 动作执行:能够执行各种GUI操作,例如点击、输入文本、滚动页面等,并根据操作结果更新模型的状态。
>> 动作空间完整性:拥有丰富的动作空间,能够执行各种类型的GUI操作,覆盖了大多数常见的GUI交互方式。
>> 跨任务泛化能力:在多个GUI数据集上取得了最先进的性能,展现了其强大的跨任务泛化能力,能够适应不同的GUI界面和任务场景。
>> 对齐能力:通过多任务微调,模型能够更好地与自由形式的人类指令对齐,理解用户意图并生成更准确的操作指令。
>> 错误处理:虽然模型并非完美无缺,但其输出结果包含状态信息,方便用户理解模型的当前状态和操作过程,从而更好地进行错误处理。
CogAgent-9b的安装和使用方法
1、环境配置
需要Python 3.10.16或更高版本,并安装依赖项:pip install -r requirements.txt
>> 推理要求:至少需要29GB的VRAM进行BF16精度推理;不建议使用INT4精度,其VRAM使用约为8GB;INT8精度推理VRAM使用约为15GB。
>> 推理代码:在inference/cli_demo.py文件中,INT4和INT8推理的代码行已被注释,可根据需要取消注释使用。
>> 硬件支持:上述GPU指的是A100或H100,其他设备需根据实际情况计算所需的GPU/CPU内存。
>> 监督式微调(SFT):冻结视觉编码器,批处理大小为1,使用8个A100 GPU进行训练,总输入令牌数(包括图像的1600个令牌)为2048个令牌,SFT微调至少需要每个GPU 60GB内存。
>> LoRA微调:不冻结视觉编码器,批处理大小为1,使用1个A100 GPU,总输入令牌数为2048个,LoRA微调至少需要单个GPU 70GB内存,且不能分割。
>> Ascend设备:未测试用于SFT微调,已在Atlas800训练服务器集群上测试,需根据Ascend设备下载链接中的加载机制修改推理代码。
>> vLLM框架:目前不支持使用vLLM框架进行推理,将尽快提交PR以启用。
>> 支持的平台:Windows, macOS, Android。
>> 在线演示的限制:在线演示不支持控制计算机,只能查看模型的推理结果。建议本地部署模型。
(1)、模型资源
Model | 模型下载地址 | 技术文档 | 在线体验 |
---|---|---|---|
cogagent-9b-20241220 | 🤗 HuggingFace 🤖 ModelScope 🟣 WiseModel 🧩 Modelers(昇腾) | 📄 官方技术博客 📘 实操文档(中文) | 🤗 HuggingFace Space 🤖 ModelScope Space 🧩 Modelers Space(昇腾) |
2、模型运行
两种运行方式
T1、本地推理 (命令行交互)
使用transformers框架进行本地推理,命令如下:
python inference/cli_demo.py --model_dir THUDM/cogagent-9b-20241220 --platform "Mac" --max_length 4096 --top_k 1 --output_image_path ./results --format_key status_action_op_sensitive
需要提供图像路径作为输入。如果模型返回结果包含边界框,则会输出带有边界框的图像,指示操作区域。图像保存到output_image_path,文件名格式为 {your_input_image_name}_{round}.png。format_key指定返回格式,platform指定平台(Mac, WIN, Mobile)。
其中 --platform 指定平台 ("Mac", "WIN", "Mobile"),需要根据实际情况选择。 --format_key 指定输出格式,例如 status_action_op_sensitive (状态、动作、操作、敏感度),还有其他几种可选格式,例如 action_operation (动作、操作),status_plan_action_operation (状态、计划、动作、操作) 等。 模型会将带有边界框 (bbox) 的结果图像保存到 output_image_path 目录。
T2、在线Web演示 (持续图像上传交互式推理)
python inference/web_demo.py --host 0.0.0.0 --port 7860 --model_dir THUDM/cogagent-9b-20241220 --format_key status_action_op_sensitive --platform "Mac" --output_dir ./results
此代码提供与HuggingFace Space在线演示相同的体验。模型将返回相应的边界框和执行类别。
3、输入输出格式
CogAgent不是对话模型,不支持连续对话,但支持连续执行历史(每次需要启动新的会话,并向模型提供过去的历史)。为了获得最佳GUI智能体性能,采用了严格的输入输出格式。其中CogAgent-9b-20241220 是 Agent 类执行模型,不支持连续对话,但支持连续执行历史。 每次调用都需要重新开始会话,并将之前的历史记录提供给模型。 输入需要包含以下几个部分:
用户输入 | 用户输入应包含任务描述 (task),平台信息 (platform: Mac, WIN, Mobile),输出格式 (format: Action-Operation-Sensitive, Status-Plan-Action-Operation 等多种格式),以及历史操作记录 (history)。 app/client.py#L115 提供了构建用户输入提示的参考代码。 task: 用户任务描述 (简洁明了)。 platform: 操作系统平台 ("Mac", "WIN", "Mobile")。 format: 期望的输出格式 (多种选项,如上所述)。 history: 之前的操作历史记录 (格式参见文档)。 |
模型输出 | 输出格式取决于用户指定的 format。 可能包含敏感操作标记 (<<敏感操作>>, <<一般操作>>),计划 (Plan),状态 (Status),动作 (Action),以及地面真实操作 (Grounded Operation),后者包含边界框 (box),元素类型 (element_type) 和元素信息 (element_info) 等细节。 |
详细描述了模型的输入输出格式,以及如何拼接提示词,方便用户更好地使用该模型。 需要注意的是,模型的输入输出格式较为严格,需要仔细阅读文档并按照规范进行操作。
(1)、用户输入部分
可以参考 app/client.py#L115 拼接用户输入提示词。一个最简用户输入拼接代码如下所示:
current_platform = identify_os() # "Mac" or "WIN" or "Mobile",注意大小写
platform_str = f"(Platform: {current_platform})\n"
format_str = "(Answer in Action-Operation-Sensitive format.)\n" # You can use other format to replace "Action-Operation-Sensitive"
history_str = "\nHistory steps: "
for index, (grounded_op_func, action) in enumerate(zip(history_grounded_op_funcs, history_actions)):
history_str += f"\n{index}. {grounded_op_func}\t{action}" # start from 0.
query = f"Task: {task}{history_str}\n{platform_str}{format_str}" # Be careful about the \n
拼接后的python字符串形如:
"Task: Search for doors, click doors on sale and filter by brands \"Mastercraft\".\nHistory steps: \n0. CLICK(box=[[352,102,786,139]], element_info='Search')\tLeft click on the search box located in the middle top of the screen next to the Menards logo.\n1. TYPE(box=[[352,102,786,139]], text='doors', element_info='Search')\tIn the search input box at the top, type 'doors'.\n2. CLICK(box=[[787,102,809,139]], element_info='SEARCH')\tLeft click on the magnifying glass icon next to the search bar to perform the search.\n3. SCROLL_DOWN(box=[[0,209,998,952]], step_count=5, element_info='[None]')\tScroll down the page to see the available doors.\n4. CLICK(box=[[280,708,710,809]], element_info='Doors on Sale')\tClick the \"Doors On Sale\" button in the middle of the page to view the doors that are currently on sale.\n(Platform: WIN)\n(Answer in Action-Operation format.)\n"
打印结果如下所示:
Task: Search for doors, click doors on sale and filter by brands "Mastercraft".
History steps:
CLICK(box=[[352,102,786,139]], element_info='Search') Left click on the search box located in the middle top of the screen next to the Menards logo.
TYPE(box=[[352,102,786,139]], text='doors', element_info='Search') In the search input box at the top, type ' doors'.
CLICK(box=[[787,102,809,139]], element_info='SEARCH') Left click on the magnifying glass icon next to the search bar to perform the search.
SCROLL_DOWN(box=[[0,209,998,952]], step_count=5, element_info='[None]') Scroll down the page to see the available doors.
CLICK(box=[[280,708,710,809]], element_info='Doors on Sale') Click the "Doors On Sale" button in the middle of the page to view the doors that are currently on sale.
(Platform: WIN)
(Answer in Action-Operation format.)
若您想仔细了解每个字段的含义和表示,请继续阅读或是参考 实操文档(中文)的“提示词拼接”章节。
-
task
字段用户输入的任务描述,类似文本格式的prompt,该输入可以指导
cogagent-9b-20241220
模型完成用户任务指令。请保证简洁明了。 -
platform
字段cogagent-9b-20241220
支持在多个平台上执行可操作Agent功能, 我们支持的带有图形界面的操作系统有三个系统,如果您使用的是其他系统,效果可能不佳,但可以尝试使用
Mobile
字段用于手机设备,WIN
字段用于Windows设备,Mac
字段用于Mac设备。- Windows 10,11,请使用
WIN
字段。 - Mac 14,15,请使用
Mac
字段。 - Android 13,14,15 以及其他GUI和UI操作方式几乎相同的安卓UI发行版,请使用
Mobile
字段。
- Windows 10,11,请使用
-
format
字段用户希望
cogagent-9b-20241220
返回何种格式的数据, 这里有以下几种选项:Answer in Action-Operation-Sensitive format.
: 本仓库中demo默认使用的返回方式,返回模型的行为,对应的操作,以及对应的敏感程度。Answer in Status-Plan-Action-Operation format.
: 返回模型的装题,行为,以及相应的操作。Answer in Status-Action-Operation-Sensitive format.
: 返回模型的状态,行为,对应的操作,以及对应的敏感程度。Answer in Status-Action-Operation format.
: 返回模型的状态,行为。Answer in Action-Operation format.
返回模型的行为,对应的操作。
-
history
字段拼接顺序和结果应该如下所示:
query = f'{task}{history}{platform}{format}'
-
继续功能
CogAgent允许用户让模型继续回答
。这需要用户在{task}
后加入[Continue]\n
字段。在这种情况下,拼接顺序和结果应该如下所示:query = f'{task}[Continue]\n{history}{platform}{format}'
(2)、模型返回部分
- 敏感操作: 包括
<<敏感操作>> <<一般操作>>
几种类型,只有format
字段中含Sensitive
的时候返回。 Plan
,Status
,Action
字段: 用于描述模型的行为和操作。只有要求返回对应字段的时候返回,例如带有Action
则返回Action
字段内容。- 常规回答部分,这部分回答会在格式化回答之前,表示综述。
Grounded Operation
字段: 用于描述模型的具体操作,包括操作的位置,类型,以及具体的操作内容。其中box
代表执行区域的坐标,element_type
代表执行的元素类型,element_info
代表执行的元素描述。这些信息被一个操作指令
操作所包裹。具体的动作空间请参考这里。
4、使用示例
(1)、标记所有邮件为已读
文档中提供了一个详细的例子,说明如何使用不同的输出格式来完成“标记所有邮件为已读”的任务,并展示了不同格式下的模型输出结果。
Task: 帮我将所有的邮件标注为已读
History steps:
(Platform: Mac)
(Answer in Action-Operation-Sensitive format.)
5、微调模型
如果需要微调CogAgent模型,请参考GitHub项目中的相关文档。
相关文档:CogAgent/finetune/README.md at main · THUDM/CogAgent · GitHub
CogAgent-9b的案例应用
1、基础案例
(1)、自动发送圣诞祝福
CogAgent 自动生成并发送圣诞祝福邮件
(2)、辅助发送邮件
CogAgent 辅助用户撰写和发送邮件。