1. 前言
微软杨建伟团队,最近在AI Agent方面动作连连,前两天开源了OmniParser V2,2月26日又开源了Magma,OmniParser专注在对GUI的识别解析,而Magma则是基于多模态技术,能够同时应对GUI和物理世界的交互,两者有一定的差异。后续也会带来OmniParser的实战分享,目前还在实测中。
话不多说,先看下Magma能做什么? 主要是两类任务:
- 多模态理解(Multimodal Understanding):能够理解来自不同领域(包括数字世界和物理世界)的多模态输入,不仅在语义层面,还具备空间和时间上的理解能力。
- 多模态动作预测(Multimodal Action Prediction):能够将长时序任务分解为精准的动作序列,使 AI Agent系统能够有效执行。
2. Magma是什么
Magma 是一个多模态 AI Agent的基础模型。具备感知多模态世界的能力,并能够执行目标驱动的行动。也就是说,Magma主要是实现以下目标:
- 语言和时空智能:具备语言理解能力和时空智能,以理解图像和视频,将自身行动建立在观察的基础上,并进一步将外部目标转化为行动计划和执行方案。
- 数字与物理世界:不局限于数字世界(如网页导航)或物理世界(如机器人操作),能够跨越这两个世界,就像人类一样自由切换和适应。
基于上述理念,Magma构建了一个新的预训练数据集,其中主要包含来自真实世界的无标签视频,以及现有的带注释的智能体数据。同时,设计一种新的预训练框架,统一训练三种模态(文本、图像和动作),以训练一个全新的多模态 AI Agent基础模型——Magma。
可以看到,Magma是直接训练一个通用的基础模型,使其能够以零样本(zero-shot)方式适应不同的下游任务。但是简单地组合这些数据集并不能直接提升模型能力,因为多模态理解主要依赖文本(例如图像和视频的文本描述),而执行动作任务主要依赖空间信息(如 UI 的 2D 坐标或机器人手臂的 7-DoF 运动)。为了解决该问题,需要具备两种任务的能力:
- 动作对齐(Action Grounding):模型需在给定视觉-空间观察的情况下预测下一步可能的可执行动作。
- 动作规划(Action Planning):基于视觉观察生成合理的未来动作序列。
3. 怎么预训练Magma
训练Magma,需要大规模异构训练数据,包括现有的多模态理解数据、UI 导航数据、机器人操作数据,以及无标签的真实世界视频。此外,也提出了一种新的数据采集流程,以可扩展且低成本的方式收集无标签视频。为了从原始视频和机器人轨迹中提取有用的动作监督信号,需要精确去除视频中的摄像机运动,然后将物体的运动转换为“动作”监督信号,用于模型训练。这些数据为模型提供独特的学习信号,帮助它理解跨模态关联,并提升其长时序动作预测与规划能力。
此外,由于文本和动作在本质上存在巨大差异(文本是离散的,而视觉 token 是连续的),这导致了跨模态学习的鸿沟。为了解决这一问题,提出一种通用预训练框架,统一训练文本、图像和动作三种模态。更具体地说,提出了Set-of-Mark(SoM)和 Trace-of-Mark(ToM)作为辅助任务,使不同输出模态之间建立桥梁。不仅增强文本与动作模态之间的对齐,还促进了图像与动作模态的结合,从而实现更好的多模态协同理解和决策能力。
4. 安装Magma以及测试
clone项目到本地:
git clone https://github.com/microsoft/Magma
cd Magma
创建并激活conda环境
conda create -n magma python=3.10 -y
conda activate magma
升级 pip
并安装基础依赖
pip install --upgrade pip
pip install -e .
安装训练所需的依赖
pip install -e ".[train]"
安装agent相关的依赖
pip install -e ".[agent]"
使用 Huggingface Transformers 进行推理
加载模型和处理器:
from PIL import Image
import torch
from transformers import AutoModelForCausalLM
from transformers import AutoProcessor dtype = torch.bfloat16
model = AutoModelForCausalLM.from_pretrained("microsoft/Magma-8B", trust_remote_code=True, torch_dtype=dtype)
processor = AutoProcessor.from_pretrained("microsoft/Magma-8B", trust_remote_code=True)
model.to("cuda")# Inference
image = Image.open("./assets/images/magma_logo.jpg").convert("RGB")convs = [{"role": "system", "content": "You are agent that can see, talk and act."}, {"role": "user", "content": "<image_start><image><image_end>\nWhat is the letter on the robot?"},
]
prompt = processor.tokenizer.apply_chat_template(convs, tokenize=False, add_generation_prompt=True)
inputs = processor(images=[image], texts=prompt, return_tensors="pt")
inputs['pixel_values'] = inputs['pixel_values'].unsqueeze(0)
inputs['image_sizes'] = inputs['image_sizes'].unsqueeze(0)
inputs = inputs.to("cuda").to(dtype)generation_args = { "max_new_tokens": 500, "temperature": 0.0, "do_sample": False, "use_cache": True,"num_beams": 1,
} with torch.inference_mode():generate_ids = model.generate(**inputs, **generation_args)generate_ids = generate_ids[:, inputs["input_ids"].shape[-1] :]
response = processor.decode(generate_ids[0], skip_special_tokens=True).strip()print(response)
5. UI Agent
构建 UI Agent。由于模型经过 Set-of-Mark 和 Trace-of-Mark 预训练,因此它与 OmniParser 具有天然的协同作用。关于OmniParser,可以参考《OmniParserV2+DeepSeek:基于纯视觉的 GUI Agent解决方案》。将它们结合在一起后,可以获得一个 UI Agent,并运行以下命令:
python agents/ui_agent/app.py
Magma 模型不仅具备 动作落地(action-grounding) 能力,还具备多模态理解和推理能力。因此,可以用文本让模型预测点击位置,例如:
指令:跳转到排名最高的帖子
还可以自由提问,只需在文本提示的开头添加前缀 "Q:",例如:
Q: 帖子标题是什么?
6. 参考材料
【1】GitHub - microsoft/Magma: [CVPR 2025] Magma: A Foundation Model for Multimodal AI Agents
【2】Magma: A Foundation Model for Multimodal AI Agents