论文标题:
UI-TARS: Pioneering Automated GUI Interaction with Native Agents
论文地址:
https://arxiv.org/pdf/2501.12326
开源地址:
https://github.com/bytedance/UI-TARS
模型地址:
https://modelscope.cn/collections/UI-TARS-bccb56fa1ef640
UI-TARS 具有以下几项创新点:
-
GUI增强感知(Enhanced Perception):利用大规模GUI截图数据集,实现对 UI 元素的上下文感知理解并生成精确描述;
-
统一动作建模(Unified Action Modeling):将动作标准化处理到跨平台的统一空间中,并通过大规模动作轨迹实现精确定位和交互;
-
System 2 推理(System-2 Reasoning):将深思熟虑的推理纳入多步决策,并涵盖任务分解、反思思维等多种推理模式。
-
迭代式反思训练(Iterative Training with Reflective Online Traces):通过在数百台虚拟机上自动收集、过滤和反射细化新的交互轨迹来解决数据瓶颈问题。同时基于迭代训练和反思训练,UI-TARS 持续从错误中学习,并在最少的人为干预下适应不可预见的情况。
字节豆包大模型团队认为,如果想要 AI 智能体真正实现类人的自主任务执行能力,就必须解决当前通用大模型直接应用在 GUI(图形用户界面)智能体上存在的一些技术缺陷与不足。
首先,用户指令的执行需要提取特定元素的坐标信息,而通用大模型通常缺乏所需要的精确数值理解能力。其次,通用大模型在处理目标驱动场景时往往理解不到位,这就需要开发者提供详细的自然语言说明操作步骤,增加了开发者的负担。最后,同时发送图片信息与元素描述不可避免地造成模型调用过程中消耗大量的token,会导致性能损耗,成本升高。
在 Operator 中,OpenAI 通过 GPT-4o 的视觉能力和强化学习实现的高级推理相结合,让智能体可以像人类一样与图形界面进行交互,灵活地执行任务。
UI-TARS 也很好地解决了上述瓶颈,它依托强大的通用多模态语言模型进行视觉识别,并面向智能UI交互进行了定向训练。这样做的结果便是:UI-TARS 在GUI智能体领域能够发挥出远胜于其他通用模型或GUI模型的表现,与此同时可以兼容各种形式的操作系统。
效果好不好,用权威基准测试结果来说话。在线动态环境可以模拟真实世界场景的交互,而 GUI智能体通过实时执行操作来改变环境状态,从而可以满足用户需求。
其中在 OSWorld 上,当限定的最大步数为 15 时,UI-TARS 的任务成功率可达 22.7%,超过了 Claude 的 14.9%,也超过了 Operator 的 19.7%。而当限定步数提升到 50 步时,UI-TARS 的成功率达到了 24.6%,同样也超过 Claude,但根据 OpenAI 公布的数据,Operator 在50步时的表现达到了 32.6%,相对 UI-TARS 有明显优势。这意味着 test-time scaling 是 UI-TARS 下一步需要升级的方向。
不仅如此,在基于 Andriod 操作系统的 AndroidWorld 基准上,UI-TARS 获得了 46.6%的任务成功率,大幅超过了GPT-4o的 34.5%。
除了在线动态环境中实现能力新SOTA之外,UI-TARS 同样在Multimodal Mind2Web(用于创建和评估执行语言指令的 web智能体)以及 Android Control(评估移动端环境中的规划和动作执行能力)、GUI Odyssey(专注于移动端环境中跨应用导航任务)等三个离线静态、预定义环境相关的基准测试中表现领先。
更进一步,UI-TAR 的智能体系统是端到端的,这被认为是智能体AI的下一个方向。
自GPT-4出现后,智能体成为了AI领域研究的热门领域,最近又经历了一次范式革新。首先是智能体框架(Agent Framework),其主要利用高性能基础模型(如GPT-4o)的理解和推理能力来增强任务的灵活性。他们实现了自动化和灵活的交互,也可以借助更多模块不断增强,或完成多智能体协作,但它仍然依赖人为定义的工作流来构建其操作。因此,智能体框架会面临适应性较差、模块不兼容等问题,维护开销较大。
在当前阶段,一些研究团队已经提出了**智能体模型(Agent Model)**新范式,其中任务以端到端的方式学习和执行,将感知、推理、记忆和动作统一在一个不断发展的模型中。
这种方法从根本上实现了数据驱动,让智能体可以无缝适应新任务、界面或用户需求,无需依赖手动制作的提示或预定义规则,拥有强大泛化能力,也可以进行自我改进。
向人类看齐:充分利用 System 2 推理能力
在技术报告中,UI-TARS 的定位是「一个原生 GUI 智能体模型,其设计目标是在不依赖繁琐的人工设计规则或级联模块的情况下进行运作。」
从功能上看,UI-TARS 可直接感知屏幕截图、应用推理过程并自主生成有效操作。此外,UI-TARS 还可以学习之前的经验,通过利用环境反馈来迭代改进其性能。下图展示了其整体架构。
整体来说,UI-TARS 的能力都是围绕感知、推理、动作以及经验学习进行的。
具体来说,给定一个初始任务指令,为了完成任务,UI-TARS 会迭代式地接收来自设备的观察结果并执行相应的操作。在每个时间步骤,UI-TARS 会以任务指令、先前交互的历史和当前观察为输入,基于预定义的动作空间输出动作。执行完动作之后,设备会提供后续观察,持续迭代。
为了进一步增强智能体的推理能力,并让决策更加深思熟虑,字节豆包大模型团队还集成了一个以「思维(thoughts)」形式出现的推理组件,该组件会在每个动作之前生成。
这些「思维」能反映System 2思维的反思性质。它们是至关重要的中间步骤,可引导智能体在继续之前重新考虑以前的动作和观察,与环境细致互动,构成反思性交互,从而确保每个决定都是意图明确的并且都是经过仔细思考的。
数据集、推理与长期记忆,UI-TARS 集成了一系列创新
了解了 UI-TARS 的技术框架,我们再继续深入其各个层面的细节,看看这个 Computer Use 智能体的优良表现究竟来自何处。同时,这也或许能让我们洞见一二 Operator 等其它同类智能体的设计思路。
要训练GUI智能体,还需要过数据这一关。字节豆包大模型团队采用原生智能体方法,直接处理GUI截图输入,利用大规模统一数据集来提升性能。
具体实施包括:收集大规模数据集;为界面元素创建结构化描述(类型、视觉、位置、功能);提供密集描述包括空间关系和整体布局;标注状态转换数据;合成多样化问答数据集;增加Set-of-Mark提示,在界面上添加不同属性的标记,帮助模型定位识别元素。
通过这些步骤,UI-TARS 能更好地理解和处理GUI任务。
(图注)感知与 grounding 数据样本
研究团队还进行了统一的动作空间建模与 grounding,在增强模型准确理解和定位视觉元素的能力的同时,让模型学会一些连续的多步轨迹,在完成一些任务时可以不假思索地完成,类似于System 1 思维。下表 1 给出了不同平台的统一动作空间,而表 2 则展示了 grounding 与多步动作轨迹数据的基本统计信息。
那么,UI-TARS 是如何将System 2 推理能力整合进来的呢?
具体来说,该团队采用的做法是首先使用 GUI 教程来增强模型的推理能力——他们为此编排了一个 6M 规模的高质量 GUI 教程,平均每个教程包含 510 个文本 token 与 3.3 张图像。
然后,再使用思维增强来进行推理模拟,也就是通过标注「思维」来填补感知与动作之间的空白,从而增强前面提到的动作轨迹数据。这些思维使模型能够显式地表示其决策过程,从而更好地与任务目标对齐。
整体来看,UI-TARS 在推理方面采用的方法不同于 Operator 使用思维链的方式。从实验结果看,UI-TARS 的推理方法在可用步数较少时可能更胜一筹,但当可用步数较多时,后者会有更加明显的优势。
有了推理能力后,该团队还让 UI-TARS 具备了可从长期记忆学习之前的经验的能力。这样一来,这个智能体就能在使用之中不断迭代进步了。这主要涉及三个过程,即在线轨迹 bootstrapping、反思微调、Agent DPO。
在线轨迹 bootstrapping 的过程如下图所示,简单来说先让智能体在目标 GUI 环境内基于指令生成一些原始轨迹,再对其进行过滤,得到高质量数据。然后利用结果轨迹来实现自我提升。
反思微调则是让模型看到自己犯下的真实世界错误与其纠正方案,从而让模型学会从次优决策中恢复。
Agent DPO 可通过直接编码对正确动作的偏好(而非错误动作)来优化 UI-TARS,从而更好地利用可用数据。
总之,通过这些技术创新,UI-TARS 拥有了强大的完成复杂任务的能力。
01
模型体验
调整浏览器字体设置
修改PPT颜色
手机端Agent
02
魔搭最佳实践
模型部署
进入访问入口
以UI-TARS-7B-SFT为例,在页面上点击部署-阿里云PAI Model Gallery部署:
按照页面提示登录阿里云
选择对应的GPU资源,点击部署
根据模型的大小,推荐的GPU型号
模型大小 | GPU型号 | GPU个数 |
2B | T4 | 1 |
7B | A10 | 1 |
72B | GPU H | 2 |
查看API信息
点击查看调用信息,得到对应接口的endpoint url和token
如果使用OpenAI API,对应的url参数值为/v1
接口调用示例代码
示例代码为单图里面,后续每一步可以按照操作步骤,截图再次运行推理代码。
推荐使用开源项目UI-TARS-desktop调用接口操作本地桌面应用,以及通过 Midscene.js 用代码实现浏览器自动化操作。
UI-TARS-desktop客户端:https://github.com/bytedance/UI-TARS-desktop
Midscene.js 浏览器控制:https://github.com/web-infra-dev/midscene
import base64`` ``import requests``from openai import OpenAI`` ``openai_api_base = "<EAS API Endpoint>/v1"``openai_api_key = "<EAS API Token>"`` ``client = OpenAI(` `api_key=openai_api_key,` `base_url=openai_api_base,``)`` `` ``models = client.models.list()``model = models.data[0].id``stream = True`` ``instruction = "search for today's weather"`` ``## Below is the prompt``prompt = r"""You are a GUI agent. You are given a task and your action history, with screenshots. You need to perform the next action to complete the task.` ` ``## Output Format`` ```\nThought: ... `` Action: ...\n```````## Action Space`` ``click(start_box='<|box_start|>(x1,y1)<|box_end|>')``left_double(start_box='<|box_start|>(x1,y1)<|box_end|>')``right_single(start_box='<|box_start|>(x1,y1)<|box_end|>')``drag(start_box='<|box_start|>(x1,y1)<|box_end|>', end_box='<|box_start|>(x3,y3)<|box_end|>')``hotkey(key='')``type(content='') #If you want to submit your input, use \"\```\" at the end of `content`.```scroll(start_box='<|box_start|>(x1,y1)<|box_end|>', direction='down or up or right or left')``wait() #Sleep for 5s and take a screenshot to check for any changes.``finished()``call_user() # Submit the task and call the user when the task is unsolvable, or when you need the user's help.`` `` ``## Note```- Use Chinese in `Thought` part.````- Summarize your next action (with its target element) in one sentence in `Thought` part.`````## User Instruction``"""`` `` ``def encode_base64_content_from_url(content_url: str) -> str:` `"""Encode a content retrieved from a remote url to base64 format."""`` ` `with requests.get(content_url) as response:` `response.raise_for_status()` `result = base64.b64encode(response.content).decode("utf-8")`` ` `return result`` `` ``img_url = "https://pai-quickstart-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/modelscope/eas/macos_desktop.jpg"``image_base64 = encode_base64_content_from_url(img_url)`` `` ``chat_completion_from_base64 = client.chat.completions.create(` `model=model,` `messages=[` `{` `"role": "user",` `"content": [` `{` `"type": "image_url",` `"image_url": {"url": f"data:image/jpg;base64,{image_base64}"},` `},` `{"type": "text", "text": prompt + instruction},` `],` `},` `],` `frequency_penalty=1,` `max_tokens=128,` `stream=stream,``)`` ``if stream:` `for chunk in chat_completion_from_base64:` `print(chunk.choices[0].delta.content, end="")``else:` `result = chat_completion_from_base64.choices[0].message.content` `print(result)
模型微调
这里我们介绍使用ms-swift对bytedance-research/UI-TARS-2B-SFT进行微调。更多RLHF训练方法可以查看:https://github.com/modelscope/ms-swift/tree/main/examples/train/multimodal/rlhf
在开始微调之前,请确保您的环境已正确安装:
# 安装ms-swift``git clone https://github.com/modelscope/ms-swift.git``cd ms-swift``pip install -e .
我们给出可运行的微调demo和自定义数据集的样式,微调脚本如下:
CUDA_VISIBLE_DEVICES=0 \``MAX_PIXELS=1003520 \``swift sft \` `--model bytedance-research/UI-TARS-2B-SFT \` `--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 50 \` `--save_steps 50 \` `--save_total_limit 5 \` `--logging_steps 5 \` `--max_length 2048 \` `--output_dir output \` `--warmup_ratio 0.05 \` `--dataloader_num_workers 4
训练显存占用:
关于自定义数据集,你可以组织成jsonl格式,下面给出了一条数据样本样例,训练时使用`–dataset <dataset_path>`指定即可:
{"messages": [{"role": "user", "content": [{"type": "text", "text": "You are a GUI agent. You are given a task and your action history, with screenshots. You need to perform the next action to complete the task.\n\n## Output Format\n```\\nThought: ...\nAction: ...\\n```\n\n## Action Space\n\nclick(start_box='<|box_start|>(x1,y1)<|box_end|>')\nleft_double(start_box='<|box_start|>(x1,y1)<|box_end|>')\nright_single(start_box='<|box_start|>(x1,y1)<|box_end|>')\ndrag(start_box='<|box_start|>(x1,y1)<|box_end|>', end_box='<|box_start|>(x3,y3)<|box_end|>')\nhotkey(key='')\ntype(content='') #If you want to submit your input, use \\\"\\\n\\\" at the end of `content`.\nscroll(start_box='<|box_start|>(x1,y1)<|box_end|>', direction='down or up or right or left')\nwait() #Sleep for 5s and take a screenshot to check for any changes.\nfinished()\ncall_user() # Submit the task and call the user when the task is unsolvable, or when you need the user's help.\n\n\n## Note\n- Use Chinese in `Thought` part.\n- Summarize your next action (with its target element) in one sentence in `Thought` part.\n\n## User Instruction\nI'm looking for a software to \"edit my photo with grounding\""}]}, {"role": "assistant", "content": "Thought: 左键单击桌面上的“Google Chrome”图标以打开浏览器,其位于桌面的中间偏左位置,第二列的第一个。图标是圆形的,外圈是红色、黄色、绿色组成的圆环,内圈是一个蓝色的圆形。\nAction: click(start_box='<|box_start|>(246,113)<|box_end|>')"}], "images": ["https://modelscope-open.oss-cn-hangzhou.aliyuncs.com/images/agent.png"]}
推理脚本:
CUDA_VISIBLE_DEVICES=0 \``MAX_PIXELS=1003520 \``swift infer \` `--adapters output/vx-xxx/checkpoint-xxx \` `--stream true \` `--max_new_tokens 2048
推送模型到ModelScope:
CUDA_VISIBLE_DEVICES=0 \``swift export \` `--adapters output/vx-xxx/checkpoint-xxx \` `--push_to_hub true \` `--hub_model_id '<your-model-id>' \` `--hub_token '<your-sdk-token>'
AI大模型学习福利
作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
大模型&AI产品经理如何学习
求大家的点赞和收藏,我花2万买的大模型学习资料免费共享给你们,来看看有哪些东西。
1.学习路线图
第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;
第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;
第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;
第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;
第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;
第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;
第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。
2.视频教程
网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己整理的大模型视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。
(都打包成一块的了,不能一一展开,总共300多集)
因篇幅有限,仅展示部分资料,需要点击下方图片前往获取
3.技术文档和电子书
这里主要整理了大模型相关PDF书籍、行业报告、文档,有几百本,都是目前行业最新的。
4.LLM面试题和面经合集
这里主要整理了行业目前最新的大模型面试题和各种大厂offer面经合集。
👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;
• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;
• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;
• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。
1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集
👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓