UI-TARS-desktop 大模型应用分析报告
1. 项目概述
- 项目名称: UI-TARS-desktop
- 项目描述: UI-TARS-desktop是字节跳动开源的多模态AI代理栈,提供桌面应用和智能体框架,能够通过自然语言控制计算机和浏览器,实现自动化GUI交互。该项目代表了AI智能体在桌面自动化领域的重要突破。
- 主要功能:
- 自然语言控制桌面应用
- 智能浏览器自动化
- 视觉-语言多模态模型驱动
- 实时反馈和状态显示
- 技术栈:
- 编程语言: TypeScript (主要), Python
- 框架: Electron, React, FastAPI
- 大模型: UI-TARS, Seed-1.5-VL/1.6 series
- 其他: SQLite, gRPC
2. 项目逻辑或数据流分析
整体流程
sequenceDiagram
participant User
participant App
participant LLM
participant ComputerOperator
participant BrowserOperator
User->>App: 输入自然语言指令
App->>App: 捕捉屏幕内容
App->>LLM: 发送请求(屏幕截图 + 指令)
LLM->>LLM: 分析指令和屏幕内容
LLM->>App: 返回操作指令
alt 需要控制桌面
App->>ComputerOperator: 执行鼠标/键盘操作
ComputerOperator->>App: 操作结果反馈
else 需要控制浏览器
App->>BrowserOperator: 执行浏览器操作
BrowserOperator->>App: 操作结果反馈
end
App->>User: 显示执行结果关键模块
- 输入模块: 处理用户自然语言指令
- 屏幕捕捉模块: 实时捕获屏幕内容作为视觉输入
- 大模型调用模块: 调用UI-TARS多模态模型分析指令和屏幕内容
- 操作执行模块: 执行鼠标、键盘或浏览器操作
- 输出处理模块: 实时反馈操作结果
3. 提示词分类统计
| 类别 | 数量 | 用途说明 |
|---|---|---|
| 系统提示词 | 1 | 定义AI代理的角色为GUI自动化专家 |
| 用户交互提示词 | 1 | 引导用户输入自然语言指令 |
| 任务处理提示词 | 5+ | 执行特定任务(如打开应用、设置配置、浏览网页)的提示词 |
| 工具描述提示词 | 2 | 描述Computer Operator和Browser Operator的功能 |
| 少样本示例提示词 | 3+ | 包含使用示例的提示词 |
| 其他 | 0 | 其他类型的提示词 |
提示词总数: 12+
4. 大模型应用场景分析
场景 1: 桌面应用控制
- 触发条件: 用户输入关于桌面操作的指令,如"打开VS Code的自动保存功能"
- 使用的提示词: 系统提示词 + 任务处理提示词
- 代码位置:
apps/ui-tars/src/operators/computer/operator.ts - 输入输出:
- 输入: 自然语言指令 + 屏幕截图
- 输出: 一系列鼠标/键盘操作指令
- 作用: 允许用户通过自然语言控制桌面应用,实现GUI自动化
场景 2: 浏览器自动化
- 触发条件: 用户输入关于浏览器操作的指令,如"搜索UI-TARS-Desktop项目的最新issue"
- 使用的提示词: 系统提示词 + 浏览器操作提示词
- 代码位置:
apps/ui-tars/src/operators/browser/operator.ts - 输入输出:
- 输入: 自然语言指令 + 浏览器页面截图
- 输出: 浏览器导航和元素操作指令
- 作用: 实现自动化浏览器操作,如网页导航、表单填写、数据提取
场景 3: 远程操作
- 触发条件: 用户选择远程操作模式
- 使用的提示词: 远程操作提示词
- 代码位置:
apps/ui-tars/src/operators/remote/operator.ts - 输入输出:
- 输入: 自然语言指令 + 远程屏幕截图
- 输出: 远程操作指令
- 作用: 允许用户远程控制其他计算机或浏览器
5. 提示词工程技术
使用的技术
- Few-shot Learning: 使用示例帮助模型理解任务要求
- Chain-of-Thought (CoT): 引导模型逐步思考操作步骤
- Role-playing: 将模型角色定义为"GUI自动化专家"
- Instruction Tuning: 使用明确的指令格式引导模型行为
- ReAct (Reasoning + Acting): 结合推理和行动,典型于Agent系统
提示词模板化
- 是否使用模板引擎: 是 (TypeScript模板字符串)
- 模板类型: 动态模板
- 变量替换方式: 动态填充任务描述、操作目标等变量
动态提示词生成
- 上下文注入: 将屏幕截图和当前系统状态注入提示词
- 对话历史管理: 保留多轮对话历史以提供上下文
- 提示词拼接策略: 组合系统提示词、任务描述和示例
6. 上下文构建
6.1 Agent 循环构造分析
Agent 类型: Tool-using Agent
循环机制:
- LLM makes the loop: LLM决定是否需要继续循环
- LLM in the loop: LLM在循环中进行决策
- LLM ends the loop: LLM决定循环的结束
核心逻辑:
graph TD
A[用户请求] --> B{LLM 决策}
B -->|需要工具| C[调用Computer/Browser Operator]
C --> D[获取操作结果]
D --> E{LLM 决策}
E -->|继续循环| B
E -->|完成| F[返回最终结果]
B -->|直接回答| F关键提示词:
- 系统提示词: "你是一个GUI自动化专家,可以通过自然语言控制计算机和浏览器"
工具调用机制:
- 根据指令类型决定调用Computer Operator还是Browser Operator
- 处理工具返回结果并决定是否需要进一步操作
- 根据任务完成情况决定结束循环
6.2 工具列表与调用方案
| 工具名称 | 功能描述 | 参数 | 返回值 | 代码位置 |
|---|---|---|---|---|
| Computer Operator | 控制桌面应用,执行鼠标/键盘操作 | 指令、屏幕截图 | 操作结果 | apps/ui-tars/src/operators/computer/operator.ts |
| Browser Operator | 控制浏览器,执行页面导航和元素操作 | 指令、页面截图 | 操作结果 | apps/ui-tars/src/operators/browser/operator.ts |
工具调用 Scheme:
{
"type": "operator",
"name": "ComputerOperator",
"parameters": {
"instruction": "打开VS Code的自动保存功能",
"screenshot": "base64_image"
}
}工具使用场景:
- 桌面自动化: 使用Computer Operator,提供GUI自动化能力
- 浏览器自动化: 使用Browser Operator,提供网页交互能力
工具提示词:
- "Computer Operator可以控制你的计算机实现GUI自动化"
- "Browser Operator可以运行后台浏览器执行GUI任务"
7. 关键发现与洞察
值得学习的提示词设计
- 多模态融合: 将视觉输入(屏幕截图)与文本指令相结合,充分发挥多模态模型的优势
- 角色明确: 将模型角色定义为"GUI自动化专家",明确模型的任务边界
- 示例引导: 提供丰富的使用示例,帮助模型理解复杂任务要求
项目特色
- 原生GUI Agent: 提供本地和远程桌面与浏览器操作能力
- 完全开源: 代码完全开源免费,支持自定义扩展
- 跨平台: 支持Windows/macOS/Linux操作系统
- 隐私保护: 完全本地化处理,数据安全隐私
可能的优化空间
- 模型优化: 进一步优化UI-TARS模型在复杂GUI场景下的理解能力
- 错误处理: 增强模型对操作失败的处理和恢复能力
- 扩展性: 提供更多可配置选项,满足不同用户的个性化需求
技术亮点
- 视觉理解: 屏幕内容视觉理解和界面元素识别
- 精确控制: 精确的鼠标和键盘控制能力
- 实时交互: 实时反馈操作状态和结果