如何评价GLM开源CogAgent-9,成为GLM-PC基座模型?
11月29,智谱正式提出GLM-OS概念,并发布AutoGLM和GLM-PC两款Agent产品。近期GLM-PC的基座模型——CogAgent-9开源,供社区进一步开发。
CogAgent-9-20241220是基于GLM-4V-9训练而成的专用Agent任务模型。该模型仅需屏幕截图作为输入(无需HTML等文本表征),便能根据用户指定的任意任务,结合历史作,预测下一步的GUI作。得益于屏幕截图和GUI作的普适性,CogAgent可广泛应用于各类基于GUI交互的场景,如个人电脑、、车机设备等。
相较于2023年12月开源的第一版CogAgent模型,CogAgent-9-20241220在GUI感知、推理预测准确性、动作空间完性、任务普适性和泛化性等方面均实现了显著提升,并支持中英文双语的屏幕截图和语言交互。
<>论文:>
s://arxiv.org/as/2312.08914
<>代码:>
s://githu/THUDM/CogAgent
<>模型:>
s://modelscope/models/ZhipuAI/cogagent-9-20241220(方便下载)
<>体验链接:>
s://modelscope/studios/ZhipuAI/CogAgent-Demo
<>技术文档:>
s://cogagent.aminer/log#/articles/cogagent-9-20241220-technical-report
<>执行过程>
CogAgent以GUI截图为唯一环境输入,结合已完成的动作历史,计算当前GUI截图中最合适的动作。该动作通过CogAgent端侧应用(如GLM-PC和CogAgentDemoApp)注入GUI,GUI响应并更新图像内容;同时,该动作被添加至动作历史。CogAgent根据更新后的历史动作和截图,计算后续作。此过程循环往复,直至CogAgent判定指令执行完毕。
CogAgent的输入仅包含三部分:用户的自然语言指令、已执行历史动作记录和GUI截图,无需任何文本形式表征的布局信息或附加元素标签(setofmarks)信息。
其输出涵盖以下四个方面:
<>思考过程(Status&Plan):>CogAgent显式输出理解GUI截图和决定下一步作的思考过程,包括状态(Status)和计划(Plan)两部分,输出内容可通过参数控制。<>下一步动作的自然语言描述(Action):>自然语言形式的动作描述将被加入历史作记录,便于模型理解已执行的动作步骤。<>下一步动作的结构化描述(GroundedOperation):>CogAgent以类似函数调用的形式,结构化地描述下一步作及其参数,便于端侧应用解析并执行模型输出。其动作空间包含GUI作(基础动作,如左键单击、文本输入等)和拟人行为(高级动作,如应用启动、调用语言模型等)两类。<>下一步动作的敏感性判断:>动作分为“一般作”和“敏感作”两类,后者指可能带来难以挽回后果的动作,例如在“发送邮件”任务中点击“发送”按钮。
<>模型升级>
<>模型基座与结构升级:>CogAgent采用了更强大的视觉语言模型GLM-4V-9作为基座,显著提升了模型的图像理解性能。
<>视觉处理模块优化:>实现了更高效、一的视觉处理模块,支持1120*1120原生高分辨率图像输入。通过带参数的下采样方法,在几乎不损失模型能力的前提下,提高了模型效率。CogAgent在结构上支持任意例或大小的图像输入,但在训练和推理中,一将输入图像缩放到1120*1120。尽管输入图像尺寸固定,结果显示,即使在2K或更高分辨率的屏幕上,模型仍能保持准确的理解能力。为获得更佳表现,建议用户适当增加图标和文字的相对大小,确保缩放后截图中的内容清晰可辨。
<>数据集丰富与完:>广泛收集并整合了多种数据集,包括无数据和GUI指令微调数据集。无数据涵盖开源GUI布局数据集、自采集的应用和网页数据集;GUI指令微调数据集则包含更长链路、更多应用、跨应用的GUIagent任务数据集等。此外,利用CogAgent自我生成数据,进一步扩充和完了数据集。
<>预训练策略优化:>VLM和GUI预训练旨在提升模型对视觉输入和GUI界面的基础理解能力。研究团队首次提出了GUIGrounding预训练,利用屏幕截图和布局对,构建界面子区域与布局表征(如DOM元素)的对应关系,从而构造GUI的REG和REC任务:
GUIReferringExpressionGeneration(REG):预测截图上某一区域对应的布局表征。GUIReferringExpressionComprehension(REC):预测截图中某一元素对应的位置。此方法已应用于多个GUI理解数据构造和GUIagent工作中。在原论文中,我们使用40万网页数据,构造了1.4亿的REC®训练样本。在此基础上,进一步扩充和优化了训练数据,加入了桌面应用和移动应用的布局数据,使模型更适应实际应用场景。
<>后训练策略改进:>后训练在提升模型GUIagent分析、推理、预测能力方面至关重要。我们采用了更科学的后训练策略,分为两个难度递进的阶段:
GUIinstructiontuning:融合GUI相关多任务数据,深化模型对GUI内容和功能的理解,具备初步问答能力。使用了广泛的开源数据和私有收集数据。GUIagentT:使模型具备完的GUIagent推理能力,训练数据包括开源数据集(如Mind2We)和额外收集的多平台跨应用数据。
<>模型推理及思维链优化:>将思维链分解为Status(当前屏幕状态)、Plan(全局计划)、Action(下一步自然语言描述)、Operation(下一步形式语言描述)。通过随机采样混合多种模式训练数据(如Action-Operation、Status-Action-Operation等),可根据交互情景、计算资源和准确率需求灵活调整和控制推理过程中的实际输出。
<>动作空间完:>明确了基础动作空间,并新增了LLM、QUOTE_TEXT、LAUNCH等高级动作,增强了模型的使用工具和交互能力。
<>评测结果>
CogAgent在以下四个数据集中了CogAgent-9-20241220和类似模型的性能。
02.最佳实践
<>模型推理>
代码下载
gitclones://githu/THUDM/CogAgent.git
cdCogAgent
模型下载
modelscopedownload--modelZhipuAI/cogagent-9-20241220--local_dir./cogagent
CLI模型推理
pythoninference/cli_demo.py--model_dir./cogagent--platform"Mac"--max_length4096--top_k1--output_image_path./results--format_keystatus_action_op_sensitive
推理结果:
显存占用:
搭建WeUI可直接clone魔搭社区创空间并运行:
gitclones://modelscope/studios/ZhipuAI/CogAgent-Demo.git
cdCogAgent-Demo
pipinstall-rrequirements.txt
pythonapp.py
<>模型微调>
我们使用ms-swift对cogagent-9-20241220进行微调。ms-swift是魔搭社区提供的大模型与多模态大模型训练和部署框架。ms-swift开源:s://githu/modelscope/ms-swift
在这里,我们将展示可直接运行的demo,并给出自定义数据集的格式。
在开始微调之前,请确保您的环境已准备妥当。
gitclones://githu/modelscope/ms-swift.git
cdms-swift
pipinstall-e.[llm]
微调脚本如下:
CUDA_VILE_DEVS=0\
swiftt\
--modelZhipuAI/cogagent-9-20241220\
--dataset'modelscope/coco_2014_caption:validation#20000'\
--train_typelora\
--torch_dtypefloat16\
--num_train_epochs1\
--per_dev_train_atch_size1\
--per_dev_eval_atch_size1\
--learning_rate1e-4\
--lora_rank8\
--lora_alpha32\
--target_modulesall-linear\
--freeze_vittrue\
--gradient_accumulation_steps16\
--eval_steps100\
--se_steps100\
--se_total_limit5\
--logging_steps5\
--max_length2048\
--output_diroutput\
--warmup_ratio0.05\
--dataloader_num_workers4
训练显存资源:
自定义数据集格式如下,只需要指定`--dataset<dataset_path>`即可:
自定义数据集文档:s://swift.readthedo.io/zh-cn/la/Customization/%E8%87%AA%E5%AE%9A%E4%9%89%E6%95%0%E6%8D%AE%E9%9%86.html
[
{
"messages":[
{
"role":"user",
"content":"Task:在设置的桌面与程序坞部分,开启调度中心板块中“显示器具有单空间”的选项\n(Platform:Mac)\n(AnswerinAction-Operation-Sensitiveformat.)\nHistorysteps:\n0.CLICK(ox=[[588,946,616,985]],element_='设置')\t点击屏幕下方的“设置”菜单,从而打开设置\n1.CLICK(ox=[[227,561,297,585]],element_='桌面与程序坞')\t点击左侧菜单中的“桌面与程序坞”选项,进入桌面与程序坞的设置界面。\n2.SCROLL_DOWN(ox=[[367,39,691,929]],step_count=75,element_='动')\t在当前屏幕的右侧动区域中,向下动以查看更多选项。\n"
},
{
"role":"assistant",
"content":"Action:点击“调度中心”板块中的“显示器具有单空间”选项,从而开启该功能。\nGroundedOperation:CLICK(ox=[[655,842,671,857]],element_='“显示器具有单空间”的开关按钮')\n<<一般作>>"
}
],"images":["images/0000000000336.png"]
},
{
"messages":[
{
"role":"user",
"content":"Task:通过启动台打开设置,导航到“网络”部分,将DNS设置手动IP为8.8.4.4。\n(Platform:Mac)\n(AnswerinAction-Operation-Sensitiveformat.)\nHistorysteps:\n0.CLICK(ox=[[7,6,27,31]],element_='苹果标志')\t点击屏幕左上角的“苹果”图标,以便打开设置。\n1.CLICK(ox=[[3,77,161,99]],element_='设置…')\t点击屏幕左上角菜单栏中的“设置…”选项,以打开设置界面。\n2.CLICK(ox=[[7,478,125,512]],element_='网络')\t点击左侧菜单中的“网络”选项,进入网络设置界面。\n3.CLICK(ox=[[155,217,459,270]],element_='Wi-Fi,已连接')\t点击屏幕中间偏上的“Wi-Fi”选项,进入Wi-Fi设置界面。\n4.CLICK(ox=[[405,280,447,296]],element_='详细信息…')\t点击Wi-Fi名称旁边的“详细信息…”按钮,以查看当前Wi-Fi的详细信息。\n5.CLICK(ox=[[27,344,45,362]],element_='DNS')\t点击左侧菜单中的“DNS”选项,进入DNS设置界面。\n6.CLICK(ox=[[166,308,442,399]],element_='8.8.8.8')\t点击DNS输入框,准备输入新的DNS。\n7.TYPE(ox=[[163,308,443,322]],text='8.8.4.4',element_='ip输入框')\t在DNS输入框中输入8.8.4.4,以设置手动IP。\n8.CLICK(ox=[[410,636,440,651]],element_='好')\t点击界面右下角的“好”按钮,以确认并保存DNS设置的更改。\n"
},
{
"role":"assistant",
"content":"Action:已经完成了“通过启动台打开设置,导航到‘网络’部分,将DNS设置手动IP为8.8.4.4”这一任务,执行结束。\nGroundedOperation:END()\n<<END>>"
}
],"images":["images/0000000000482.png"]
}
]
这里`--adapters`需要替换成训练生成的lastcheckpoint文件夹.由于adapters文件夹中包含了训练的参数文件,因此不需要额外指定`--model`。