智谱发布GLM-OS概念及Agent产品,CogAgent-9B模型开源助力GUI交互场景

本文涉及的产品
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
交互式建模 PAI-DSW,每月250计算时 3个月
模型训练 PAI-DLC,100CU*H 3个月
简介: 11月29日,智谱正式提出 GLM-OS 概念,并发布 AutoGLM 和 GLM-PC 两款 Agent 产品。近期GLM-PC 的基座模型—— CogAgent-9B 开源,供社区进一步开发。

11月29日,智谱正式提出 GLM-OS 概念,并发布 AutoGLM 和 GLM-PC 两款 Agent 产品。近期GLM-PC 的基座模型—— CogAgent-9B 开源,供社区进一步开发。 

CogAgent-9B-20241220 是基于 GLM-4V-9B 训练而成的专用Agent任务模型。该模型仅需屏幕截图作为输入(无需HTML等文本表征),便能根据用户指定的任意任务,结合历史操作,预测下一步的GUI操作。得益于屏幕截图和GUI操作的普适性,CogAgent 可广泛应用于各类基于GUI交互的场景,如个人电脑、手机、车机设备等。 

相较于2023年12月开源的第一版 CogAgent 模型,CogAgent-9B-20241220 在 GUI 感知、推理预测准确性、动作空间完善性、任务普适性和泛化性等方面均实现了显著提升,并支持中英文双语的屏幕截图和语言交互。

论文:

https://arxiv.org/abs/2312.08914

代码:

https://github.com/THUDM/CogAgent

模型:

https://modelscope.cn/models/ZhipuAI/cogagent-9b-20241220(方便下载)

体验链接:

https://modelscope.cn/studios/ZhipuAI/CogAgent-Demo

技术文档:

https://cogagent.aminer.cn/blog#/articles/cogagent-9b-20241220-technical-report

执行过程

CogAgent 以 GUI 截图为唯一环境输入,结合已完成的动作历史,计算当前 GUI 截图中最合适的动作。该动作通过 CogAgent 端侧应用(如 GLM-PC 和 CogAgent Demo App)注入 GUI,GUI 响应并更新图像内容;同时,该动作被添加至动作历史。CogAgent 根据更新后的历史动作和截图,计算后续操作。此过程循环往复,直至 CogAgent 判定指令执行完毕。 

CogAgent 的输入仅包含三部分:用户的自然语言指令、已执行历史动作记录和 GUI 截图,无需任何文本形式表征的布局信息或附加元素标签(set of marks)信息。 

其输出涵盖以下四个方面: 

  • 思考过程(Status & Plan): CogAgent 显式输出理解 GUI 截图和决定下一步操作的思考过程,包括状态(Status)和计划(Plan)两部分,输出内容可通过参数控制。
  • 下一步动作的自然语言描述(Action): 自然语言形式的动作描述将被加入历史操作记录,便于模型理解已执行的动作步骤。
  • 下一步动作的结构化描述(Grounded Operation): CogAgent 以类似函数调用的形式,结构化地描述下一步操作及其参数,便于端侧应用解析并执行模型输出。其动作空间包含 GUI 操作(基础动作,如左键单击、文本输入等)和拟人行为(高级动作,如应用启动、调用语言模型等)两类。
  • 下一步动作的敏感性判断: 动作分为“一般操作”和“敏感操作”两类,后者指可能带来难以挽回后果的动作,例如在“发送邮件”任务中点击“发送”按钮。

模型升级

模型基座与结构升级:CogAgent 采用了更强大的视觉语言模型GLM-4V-9B作为基座,显著提升了模型的图像理解性能。 

视觉处理模块优化: 实现了更高效、统一的视觉处理模块,支持1120*1120原生高分辨率图像输入。通过带参数的下采样方法,在几乎不损失模型能力的前提下,提高了模型效率。CogAgent在结构上支持任意比例或大小的图像输入,但在训练和推理中,统一将输入图像缩放到1120*1120。尽管输入图像尺寸固定,测试结果显示,即使在2K或更高分辨率的屏幕上,模型仍能保持准确的理解能力。为获得更佳表现,建议用户适当增加图标和文字的相对大小,确保缩放后截图中的内容清晰可辨。 

数据集丰富与完善: 广泛收集并整合了多种数据集,包括无监督数据和GUI指令微调数据集。无监督数据涵盖开源GUI布局数据集、自采集的应用和网页数据集;GUI指令微调数据集则包含更长链路、更多应用、跨应用的GUI agent任务数据集等。此外,利用CogAgent自我生成数据,进一步扩充和完善了数据集。 

预训练策略优化: VLM和GUI预训练旨在提升模型对视觉输入和GUI界面的基础理解能力。研究团队首次提出了GUI Grounding预训练,利用屏幕截图和布局对,构建界面子区域与布局表征(如DOM元素)的对应关系,从而构造GUI的REG和REC任务: 

  • GUI Referring Expression Generation (REG):预测截图上某一区域对应的布局表征。
  • GUI Referring Expression Comprehension (REC):预测截图中某一元素对应的位置。此方法已应用于多个GUI理解数据构造和GUI agent工作中。在原论文中,我们使用40万网页数据,构造了1.4亿的REC & REG训练样本。在此基础上,进一步扩充和优化了训练数据,加入了桌面应用和移动应用的布局数据,使模型更适应实际应用场景。

后训练策略改进: 后训练在提升模型GUI agent分析、推理、预测能力方面至关重要。我们采用了更科学的后训练策略,分为两个难度递进的阶段:

  • GUI instruction tuning:融合GUI相关多任务数据,深化模型对GUI内容和功能的理解,具备初步问答能力。使用了广泛的开源数据和私有收集数据。
  • GUI agent SFT:使模型具备完善的GUI agent推理能力,训练数据包括开源数据集(如Mind2Web)和额外收集的多平台跨应用数据。

模型推理及思维链优化: 将思维链分解为Status(当前屏幕状态)、Plan(全局计划)、Action(下一步自然语言描述)、Operation(下一步形式语言描述)。通过随机采样混合多种模式训练数据(如Action-Operation、Status-Action-Operation等),可根据交互情景、计算资源和准确率需求灵活调整和控制推理过程中的实际输出。 

动作空间完善:明确了基础动作空间,并新增了LLM、QUOTE_TEXT、LAUNCH等高级动作,增强了模型的使用工具和交互能力。 

评测结果

CogAgent 在以下四个数据集中测试了CogAgent-9B-20241220和类似模型的性能。

最佳实践

模型推理

代码下载

git clone https://github.com/THUDM/CogAgent.git
cd CogAgent

模型下载

modelscope download --model ZhipuAI/cogagent-9b-20241220 --local_dir ./cogagent

CLI模型推理

python inference/cli_demo.py --model_dir ./cogagent --platform "Mac" --max_length 4096 --top_k 1 --output_image_path ./results --format_key status_action_op_sensitive

推理结果:

显存占用:

搭建WebUI可直接clone魔搭社区创空间并运行:

git clone https://www.modelscope.cn/studios/ZhipuAI/CogAgent-Demo.git
cd CogAgent-Demo
pip install -r requirements.txt
python app.py

模型微调

我们使用ms-swift对cogagent-9b-20241220进行微调。ms-swift是魔搭社区官方提供的大模型与多模态大模型训练和部署框架。ms-swift开源地址:https://github.com/modelscope/ms-swift

在这里,我们将展示可直接运行的demo,并给出自定义数据集的格式。

在开始微调之前,请确保您的环境已准备妥当。

git clone https://github.com/modelscope/ms-swift.git
cd ms-swift
pip install -e .[llm]

微调脚本如下:

CUDA_VISIBLE_DEVICES=0 \
swift sft \
    --model ZhipuAI/cogagent-9b-20241220 \
    --dataset 'modelscope/coco_2014_caption:validation#20000' \
    --train_type lora \
    --torch_dtype bfloat16 \
    --num_train_epochs 1 \
    --per_device_train_batch_size 1 \
    --per_device_eval_batch_size 1 \
    --learning_rate 1e-4 \
    --lora_rank 8 \
    --lora_alpha 32 \
    --target_modules all-linear \
    --freeze_vit true \
    --gradient_accumulation_steps 16 \
    --eval_steps 100 \
    --save_steps 100 \
    --save_total_limit 5 \
    --logging_steps 5 \
    --max_length 2048 \
    --output_dir output \
    --warmup_ratio 0.05 \
    --dataloader_num_workers 4

训练显存资源:

添加图片注释,不超过 140 字(可选)

自定义数据集格式如下,只需要指定`--dataset <dataset_path>`即可:

自定义数据集文档:https://swift.readthedocs.io/zh-cn/latest/Customization/%E8%87%AA%E5%AE%9A%E4%B9%89%E6%95%B0%E6%8D%AE%E9%9B%86.html

[
  {
  "messages": [
    {
      "role": "user",
      "content": "Task: 在系统设置的桌面与程序坞部分,开启调度中心板块中“显示器具有单独空间”的选项\n(Platform: Mac)\n(Answer in Action-Operation-Sensitive format.)\nHistory steps: \n0. CLICK(box=[[588,946,616,985]], element_info='系统设置')\t点击屏幕下方的“系统设置”菜单,从而打开系统设置\n1. CLICK(box=[[227,561,297,585]], element_info='桌面与程序坞')\t点击左侧菜单中的“桌面与程序坞”选项,进入桌面与程序坞的设置界面。\n2. SCROLL_DOWN(box=[[367,39,691,929]], step_count=75, element_info='滚动')\t在当前屏幕的右侧滚动区域中,向下滚动以查看更多选项。\n"
    },
    {
      "role": "assistant",
      "content": "Action: 点击“调度中心”板块中的“显示器具有单独空间”选项,从而开启该功能。\nGrounded Operation:CLICK(box=[[655,842,671,857]], element_info='“显示器具有单独空间”的开关按钮')\n<<一般操作>>"
    }
  ], "images": ["images/0000000000336.png"]
},
{
  "messages": [
    {
      "role": "user",
      "content": "Task: 通过启动台打开系统设置,导航到“网络”部分,将DNS设置手动IP地址为8.8.4.4。\n(Platform: Mac)\n(Answer in Action-Operation-Sensitive format.)\nHistory steps: \n0. CLICK(box=[[7,6,27,31]], element_info='苹果标志')\t点击屏幕左上角的“苹果”图标,以便打开系统设置。\n1. CLICK(box=[[3,77,161,99]], element_info='系统设置…')\t点击屏幕左上角菜单栏中的“系统设置…”选项,以打开系统设置界面。\n2. CLICK(box=[[7,478,125,512]], element_info='网络')\t点击左侧菜单中的“网络”选项,进入网络设置界面。\n3. CLICK(box=[[155,217,459,270]], element_info='Wi-Fi, 已连接')\t点击屏幕中间偏上的“Wi-Fi”选项,进入Wi-Fi设置界面。\n4. CLICK(box=[[405,280,447,296]], element_info='详细信息…')\t点击Wi-Fi名称旁边的“详细信息…”按钮,以查看当前Wi-Fi的详细信息。\n5. CLICK(box=[[27,344,45,362]], element_info='DNS')\t点击左侧菜单中的“DNS”选项,进入DNS设置界面。\n6. CLICK(box=[[166,308,442,399]], element_info='8.8.8.8')\t点击DNS服务器地址输入框,准备输入新的DNS服务器地址。\n7. TYPE(box=[[163,308,443,322]], text='8.8.4.4', element_info='ip地址输入框')\t在DNS服务器地址输入框中输入8.8.4.4,以设置手动IP地址。\n8. CLICK(box=[[410,636,440,651]], element_info='好')\t点击界面右下角的“好”按钮,以确认并保存DNS设置的更改。\n"
    },
    {
      "role": "assistant",
      "content": "Action: 已经完成了“通过启动台打开系统设置,导航到‘网络’部分,将DNS设置手动IP地址为8.8.4.4”这一任务,执行结束。\nGrounded Operation:END()\n<<END>>"
    }
  ], "images": ["images/0000000000482.png"]
}
]

训练完成后,使用以下命令对训练时的验证集进行推理:

这里`--adapters`需要替换成训练生成的last checkpoint文件夹. 由于adapters文件夹中包含了训练的参数文件,因此不需要额外指定`--model`。

CUDA_VISIBLE_DEVICES=0 \
swift infer \
    --adapters output/vx-xxx/checkpoint-xxx \
    --stream true \
    --load_data_args true \
    --max_new_tokens 2048

点击链接阅读原文,即可跳转模型链接:cogagent-9b-20241220

相关文章
|
2月前
|
存储 调度
探索操作系统的心脏:内核与用户空间的交互
在数字世界的每一次呼吸中,操作系统扮演着至关重要的角色。本文将深入探讨操作系统的核心组件——内核与用户空间之间的神秘舞蹈。通过直观的比喻和生动的代码片段,我们将一窥这场幕后的交响曲,了解它们是如何协同工作以支持我们的计算需求的。从简单的文件读写到复杂的网络通信,每一个操作背后都隐藏着内核与用户空间之间精妙的互动。准备好跟随我们的脚步,一起揭开操作系统的神秘面纱。
33 3
|
23天前
|
安全 Anolis
龙蜥社区落地开源生态发展合作倡议,构建开放兼容的操作系统生态
通过共同努力,三个社区基于服务器操作系统场景,在操作系统内核等关键共性技术链统一方面达成了一致。
|
1月前
|
安全 Linux 开发者
探索操作系统的心脏:内核与用户空间的交互
在数字世界的每一次点击和命令背后,隐藏着一个复杂而精妙的操作系统世界。本文将带你走进这个世界的核心,揭示内核与用户空间的神秘交互。通过深入浅出的解释和直观的代码示例,我们将一起理解操作系统如何协调硬件资源,管理进程和内存,以及提供文件系统服务。无论你是编程新手还是资深开发者,这篇文章都将为你打开一扇通往操作系统深层原理的大门。让我们一起开始这段旅程,探索那些支撑我们日常数字生活的技术基石吧!
43 6
|
2月前
|
存储 调度 开发者
探索操作系统的心脏:内核与用户空间的交互之旅
在数字世界的无限广阔中,操作系统扮演着枢纽的角色,连接硬件与软件,支撑起整个计算生态。本篇文章将带领读者深入操作系统的核心——内核,揭示其与用户空间的神秘交互。我们将透过生动的例子和易于理解的比喻,深入浅出地探讨这一复杂主题,旨在为非专业读者揭开操作系统的神秘面纱,同时为有一定基础的读者提供更深层次的认识。从进程管理到内存分配,从文件系统到设备驱动,每一个环节都是精确而优雅的舞蹈,它们共同编织出稳定而高效的计算体验。让我们开始这场奇妙之旅,一探操作系统背后的科学与艺术。
32 5
|
2月前
|
安全 数据处理 调度
探索操作系统的心脏:内核与用户空间的交互之旅
操作系统,这个现代计算机体系的守门人,承载着软件与硬件间复杂而精妙的对话。本文将深入其核心,揭秘内核与用户空间之间如何协同工作,确保数据安全且高效地流动。我们将透过代码示例的镜头,观察这一过程的具体实现,同时反思在设计与使用操作系统时面临的挑战与机遇。
|
2月前
|
API 数据处理 C语言
探索操作系统:从基础概念到实际应用
本文将带你进入操作系统的世界,了解它的基本概念、发展历程和应用场景。我们将一起探讨操作系统的核心功能、体系结构以及它在计算机系统中的重要作用。同时,我们还将介绍一些常见的操作系统类型,并分析它们的特点。最后,通过一个简单的代码示例,展示操作系统在实际应用中的重要作用。让我们一起揭开操作系统的神秘面纱,探索它的奥秘吧!
|
2月前
|
存储 安全 开发者
探索操作系统的心脏:内核与用户空间的交互
在数字世界的复杂迷宫中,操作系统扮演着至关重要的角色。它不仅仅是软件与硬件之间的桥梁,更是维系计算生态平衡的关键。本文将深入探讨操作系统的核心组件—内核和用户空间,以及它们如何协同工作来支持现代计算需求。通过浅显的语言和生动的比喻,我们将揭开操作系统神秘的面纱,了解它是如何影响我们日常生活的每一个方面。无论你是科技爱好者还是普通用户,这篇文章都将带你领略操作系统的奇妙世界,让你对电脑内部的运作有一个全新的认识。
|
2月前
|
机器学习/深度学习 人工智能 Anolis
手把手教学攻略:在Anolis OS上部署OpenVINO深度学习模型
Anolis OS 作为国内首个正式提供 OpenVINO 开发包和镜像的服务器端操作系统,推动国内 AI 推理生态和能力的升级。
|
2月前
|
安全 Linux 网络安全
nmap 是一款强大的开源网络扫描工具,能检测目标的开放端口、服务类型和操作系统等信息
nmap 是一款强大的开源网络扫描工具,能检测目标的开放端口、服务类型和操作系统等信息。本文分三部分介绍 nmap:基本原理、使用方法及技巧、实际应用及案例分析。通过学习 nmap,您可以更好地了解网络拓扑和安全状况,提升网络安全管理和渗透测试能力。
179 5
|
2月前
|
算法 调度 C语言
探索操作系统的心脏:内核与用户空间的交互
【10月更文挑战第36天】本文将深入探讨操作系统的核心组件—内核,以及它如何与用户空间进行交互。我们将通过浅显易懂的语言和生动的例子来揭示这一复杂主题的面纱。文章不仅涉及理论知识,还会展示具体的代码示例,帮助读者更好地理解内核机制。无论你是初学者还是有一定基础的开发者,这篇文章都将为你提供新的视角和深入的理解。

热门文章

最新文章