当前位置: 首页 > article >正文

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之AgentCogAgent《CogAgent: A Visual Language Model for GUI Agents》翻译与解读

VLMs之Agent之CogAgent:《CogAgent: A Visual Language Model for GUI Agents》翻译与解读-CSDN博客

VLMs之AgentCogAgentCogAgent-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 字段。
  • 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的时候返回。
  • PlanStatusAction 字段: 用于描述模型的行为和操作。只有要求返回对应字段的时候返回,例如带有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 辅助用户撰写和发送邮件。


http://www.kler.cn/a/471157.html

相关文章:

  • 如何从串 ‘ 中国 +86‘ 中,获取到‘中国’:strip()、split()及正则表达式的使用
  • 鸿蒙APP之从开发到发布的一点心得
  • css中的部分文字特性
  • 我的nvim的init.lua配置
  • PINN模型详解
  • 自动采集商品信息、处理数据并自动上架到
  • Yolov8训练方式以及C#中读取yolov8+onnx模型进行目标检测.NET 6.0
  • 分布式与集群
  • 基于SpringBoot+Vue的考研百科网站
  • UG NX二次开发(C++)-UFun函数-按照特定方向提取轮廓线
  • el-table拖拽表格
  • 吉客云与金蝶云星空数据集成技术详解
  • 20250107在WIN10下使用无线ADB连接Andorid7.1.2
  • vulnhub whowantstobeking靶机
  • C++中,typename
  • 初学stm32 --- 电源监控
  • 数据库6讲
  • 基于GUI网络渗透侦察工具设计与实践
  • PCL 点云多边形面积计算
  • 寒假刷题Day1
  • 大语言模型训练所需的最低显存,联邦大语言模型训练的传输优化技术
  • .NET Core FluentAPI
  • 大模型(LLM) 的长上下文与 RAG:评估与回顾
  • 平安社招 | 平安集团2025年社招笔试平安IQ新胜任力测评个性扫描16PF题库
  • 牛客网刷题 ——C语言初阶(6指针)——字符逆序
  • Spring Boot 项目启动报 NoClassDefFoundError 异常的原因分析与解决方案 - jackson 版本不一致