UI-TARS桌面应用:视觉语言模型驱动的智能GUI代理配置指南
UI-TARS桌面应用:视觉语言模型驱动的智能GUI代理配置指南
【免费下载链接】UI-TARS-desktopThe Open-Source Multimodal AI Agent Stack: Connecting Cutting-Edge AI Models and Agent Infra项目地址: https://gitcode.com/GitHub_Trending/ui/UI-TARS-desktop
在传统自动化工具需要精确坐标定位和复杂脚本编写的时代,开发者和技术团队往往面临界面变化导致脚本失效、跨平台兼容性差等痛点。UI-TARS桌面应用通过视觉语言模型技术,实现了真正的智能GUI交互——它能像人类一样理解屏幕内容,识别界面元素,并执行点击、输入、导航等操作。本文面向技术爱好者和中级用户,深入探讨如何配置和优化这个开源的多模态AI代理栈,让AI真正理解你的电脑屏幕并执行复杂任务。
视觉引擎配置:为AI注入理解能力
视觉语言模型是UI-TARS的核心引擎,它决定了AI识别屏幕内容和执行操作的精度。与传统自动化工具依赖坐标定位不同,UI-TARS通过深度学习模型理解界面语义,实现真正的智能交互。
VLM模型配置界面展示语言选择、服务提供商配置、API密钥和模型名称等关键参数,是AI视觉理解能力的基础设置中心
配置视觉引擎时,你需要关注几个关键参数:
# 典型VLM配置示例 vision_provider: "huggingface" # 可选:huggingface, volcengine, local base_url: "https://api.huggingface.co/v1" # 服务端点地址 api_key: "hf_xxxxxxxxxxxxxxxxxxxx" # 认证密钥 model_name: "UI-TARS-1.5-7B" # 模型版本选择 detection_accuracy: "balanced" # 识别精度:high/balanced/fast timeout_ms: 30000 # 请求超时时间(毫秒)平台兼容性对比:
| 配置项 | macOS (Apple Silicon) | Windows 10/11 | Ubuntu 22.04+ |
|---|---|---|---|
| 推荐模型 | UI-TARS-1.5-7B | UI-TARS-1.5-7B | UI-TARS-1.5-7B |
| 内存需求 | 8GB+ | 8GB+ | 8GB+ |
| GPU加速 | Metal API | DirectML | CUDA/NVIDIA |
| 识别速度 | 快速 (M1/M2/M3) | 中等 | 中等 |
重要提示:对于本地部署场景,可以选择Hugging Face托管的UI-TARS-1.5模型,它提供了良好的平衡点——既有云端服务的便利性,又保持了一定的响应速度。企业级用户可以考虑火山引擎的专用部署方案。
权限管理系统:打通操作通道
在多平台环境中,权限管理是GUI代理正常工作的前提。UI-TARS需要访问系统级功能来模拟用户操作,这在不同操作系统中有不同的实现方式。
macOS系统权限配置界面展示UI-TARS申请屏幕录制权限的弹窗,这是视觉识别功能正常运行的前提条件
跨平台权限配置策略:
macOS权限配置:
- 辅助功能权限:系统设置 → 隐私与安全 → 辅助功能
- 屏幕录制权限:系统设置 → 隐私与安全 → 屏幕录制
- 输入监控权限:部分操作需要键盘输入权限
Windows权限配置:
# 以管理员身份运行PowerShell检查权限状态 Get-MpPreference | Select-Object -Property AllowBehaviorMonitoring # 如果需要,添加防火墙例外规则 New-NetFirewallRule -DisplayName "UI-TARS" -Direction Inbound -Program "C:\Program Files\UI-TARS\ui-tars.exe" -Action AllowLinux桌面环境:
# 对于GNOME桌面环境 gsettings set org.gnome.desktop.interface enable-animations false # X11环境可能需要xhost权限 xhost +SI:localuser:$(whoami)常见权限问题排查:
| 症状 | 可能原因 | 解决方案 |
|---|---|---|
| 屏幕识别失败 | 屏幕录制权限未开启 | 检查系统隐私设置 |
| 鼠标点击无效 | 辅助功能权限缺失 | 重新授权应用 |
| 键盘输入异常 | 输入监控被阻止 | 检查安全软件设置 |
| 跨应用操作失败 | 沙盒限制 | 调整应用沙盒配置 |
部署架构设计:从源码到可执行应用
UI-TARS采用现代化的Electron+Vite技术栈,支持跨平台构建和部署。项目结构清晰,模块化设计便于定制和扩展。
项目核心目录结构: apps/ui-tars/ ├── src/ │ ├── main/ # 主进程代码 │ │ ├── agent/ # 智能代理核心 │ │ ├── services/ # 后台服务 │ │ └── utils/ # 工具函数 │ ├── renderer/ # 渲染进程 │ │ ├── components/ # UI组件 │ │ └── pages/ # 页面组件 │ └── preload/ # 预加载脚本 ├── images/ # 应用图片资源 └── static/ # 静态资源构建与部署流程:
# 1. 获取项目源码 git clone https://gitcode.com/GitHub_Trending/ui/UI-TARS-desktop cd UI-TARS-desktop # 2. 安装依赖(推荐pnpm) npm install -g pnpm pnpm install # 3. 开发环境启动 pnpm run dev # 4. 生产环境构建 pnpm run build # 5. 平台特定打包 pnpm run make # 生成当前平台安装包macOS系统下UI-TARS应用安装界面,展示应用拖拽至Applications文件夹的完整过程
构建配置优化:
在electron.vite.config.ts中,可以根据目标平台调整构建参数:
// 性能优化配置示例 export default defineConfig({ build: { target: 'es2022', minify: 'terser', sourcemap: process.env.NODE_ENV !== 'production', rollupOptions: { output: { manualChunks: { vendor: ['react', 'react-dom', 'zustand'], vlm: ['@ui-tars/core', '@ui-tars/sdk'] } } } }, // 平台特定优化 platform: process.platform === 'darwin' ? { // macOS优化 entitlements: './entitlements.mac.plist' } : process.platform === 'win32' ? { // Windows优化 sign: './sign.js' } : { // Linux优化 desktop: './ui-tars.desktop' } });交互界面设计:自然语言驱动的任务执行
UI-TARS的任务执行界面采用简洁的对话式设计,用户通过自然语言指令控制计算机,系统通过视觉识别理解当前屏幕状态并执行相应操作。
UI-TARS任务执行界面展示自然语言指令输入区域和屏幕截图显示区域,用户可以通过简单的对话形式控制计算机
任务执行工作流程:
- 指令解析:自然语言指令被转换为结构化任务描述
- 视觉识别:通过VLM分析当前屏幕状态
- 动作规划:生成最优的操作序列
- 执行反馈:执行操作并验证结果
- 结果存储:保存任务执行记录和截图
典型任务场景示例:
// 文件操作任务 任务描述:"在桌面上创建名为'项目文档'的文件夹" 执行流程: 1. 识别桌面界面 2. 定位空白区域 3. 右键点击 → 新建文件夹 4. 输入名称"项目文档" 5. 验证文件夹创建成功 // 浏览器操作任务 任务描述:"打开Chrome并访问GitHub Trending页面" 执行流程: 1. 识别应用启动器 2. 搜索并点击Chrome图标 3. 等待浏览器加载 4. 在地址栏输入github.com/trending 5. 验证页面加载完成界面组件架构:
交互界面核心组件: ChatInput/ # 聊天输入组件 ├── SelectOperator.tsx # 操作器选择 ├── index.tsx # 主输入组件 └── vlmDialog.tsx # VLM配置对话框 Settings/ # 设置组件 ├── category/ # 分类设置 │ ├── vlm.tsx # VLM配置 │ ├── chat.tsx # 聊天设置 │ └── report.tsx # 报告设置 └── global.tsx # 全局设置服务提供商集成:灵活的多模型支持
UI-TARS支持多种视觉语言模型服务提供商,用户可以根据需求选择最适合的解决方案。这种模块化设计确保了系统的可扩展性和灵活性。
VLM服务提供商选择界面展示火山引擎、Hugging Face等多种VLM接口配置选项,支持不同部署场景的需求
服务提供商对比分析:
| 提供商 | 部署类型 | 适用场景 | 配置复杂度 | 成本考虑 |
|---|---|---|---|---|
| Hugging Face | 云端/本地 | 个人开发者、小团队 | 中等 | 按使用量计费 |
| 火山引擎 | 云端 | 企业级、生产环境 | 较高 | 套餐订阅 |
| 本地部署 | 本地服务器 | 数据敏感、网络限制 | 高 | 硬件投入 |
配置模板示例:
# Hugging Face配置 provider: "huggingface" model_family: "UI-TARS-1.5" deployment_type: "inference-endpoints" region: "us-east-1" authentication: type: "api_key" key: "${HF_TOKEN}" performance: max_tokens: 4096 temperature: 0.1 timeout: 30000 # 火山引擎配置 provider: "volcengine" model_family: "Doubao-1.5-UI-TARS" deployment_type: "dedicated-instance" region: "cn-beijing" authentication: type: "ak_sk" access_key: "${VOLC_ACCESS_KEY}" secret_key: "${VOLC_SECRET_KEY}" network: vpc_enabled: true security_group: "ui-tars-sg"集成验证脚本:
// 服务提供商连接测试 async function testProviderConnection(config: ProviderConfig) { try { const response = await fetch(`${config.baseUrl}/health`, { headers: { 'Authorization': `Bearer ${config.apiKey}`, 'Content-Type': 'application/json' } }); if (response.ok) { console.log(`✅ ${config.provider} 连接正常`); return true; } else { console.error(`❌ ${config.provider} 连接失败: ${response.status}`); return false; } } catch (error) { console.error(`❌ ${config.provider} 连接异常:`, error); return false; } } // 批量测试所有配置的提供商 const providers = ['huggingface', 'volcengine', 'local']; for (const provider of providers) { await testProviderConnection(getConfig(provider)); }任务执行引擎:UTIO框架深度解析
UTIO(通用任务输入输出)框架是UI-TARS的核心执行引擎,它定义了从任务接收到结果反馈的完整处理流程。这个框架确保了任务执行的可靠性和可追溯性。
UTIO框架工作流程图展示视觉语言模型从指令接收到任务执行的完整流程,包括任务分发、结果存储和服务调用
UTIO处理流程详解:
// 任务处理状态机 interface TaskStateMachine { // 1. 任务接收 PENDING: '等待处理', // 2. 视觉分析 ANALYZING: '分析屏幕', // 3. 动作规划 PLANNING: '规划操作', // 4. 执行中 EXECUTING: '执行操作', // 5. 验证结果 VERIFYING: '验证结果', // 6. 完成/失败 COMPLETED: '任务完成', FAILED: '任务失败' } // 任务执行器实现 class TaskExecutor { async execute(task: Task): Promise<TaskResult> { // 步骤1: 屏幕状态捕获 const screenshot = await this.captureScreen(); // 步骤2: 视觉语言模型分析 const analysis = await this.vlm.analyze({ image: screenshot, instruction: task.instruction }); // 步骤3: 动作序列生成 const actions = this.planner.generateActions(analysis); // 步骤4: 动作执行 const results = []; for (const action of actions) { const result = await this.performAction(action); results.push(result); // 步骤5: 实时验证 if (!await this.verifyAction(result)) { throw new Error(`动作验证失败: ${action.type}`); } } // 步骤6: 结果汇总 return { success: results.every(r => r.success), actions: results, screenshot: screenshot, timestamp: Date.now() }; } }错误处理与重试机制:
# 错误处理配置 error_handling: max_retries: 3 retry_delay: 1000 # 毫秒 fallback_strategies: - name: "坐标回退" condition: "element_not_found" action: "use_coordinate_fallback" - name: "文本匹配" condition: "visual_recognition_failed" action: "text_based_matching" - name: "手动干预" condition: "max_retries_exceeded" action: "request_human_assistance" # 性能监控指标 monitoring: metrics: - task_execution_time - screen_analysis_accuracy - action_success_rate - vlm_response_latency alerts: - condition: "success_rate < 0.8" action: "send_alert" - condition: "avg_latency > 5000" action: "scale_resources"性能优化策略:平衡速度与精度
在实际使用中,UI-TARS的性能表现直接影响用户体验。通过合理的配置优化,可以在识别精度和执行速度之间找到最佳平衡点。
性能调优参数矩阵:
| 参数 | 速度优先模式 | 精度优先模式 | 平衡模式 | 适用场景 |
|---|---|---|---|---|
| 检测精度 | 低 (fast) | 高 (high) | 中 (balanced) | 日常/关键任务 |
| 截图间隔 | 500ms | 1000ms | 750ms | 动态/静态界面 |
| 超时时间 | 10000ms | 30000ms | 20000ms | 简单/复杂任务 |
| 并发任务 | 3 | 1 | 2 | 批量/单次操作 |
| 缓存策略 | 启用 | 禁用 | 选择性启用 | 重复/新任务 |
内存与CPU优化配置:
// 资源管理配置 const resourceConfig = { memory: { max_heap_size: process.platform === 'darwin' ? '4g' : '6g', gc_strategy: 'aggressive', cache_size: '512mb' }, cpu: { max_workers: navigator.hardwareConcurrency - 1, worker_strategy: 'dedicated', priority: 'normal' }, gpu: { acceleration: true, backend: process.platform === 'darwin' ? 'metal' : process.platform === 'win32' ? 'directml' : 'webgl', memory_limit: '2g' } }; // 性能监控实现 class PerformanceMonitor { private metrics = new Map(); trackMetric(name: string, value: number) { this.metrics.set(name, { value, timestamp: Date.now(), context: this.getContext() }); // 自动调整策略 if (name === 'task_execution_time' && value > 10000) { this.adjustStrategy('reduce_accuracy'); } } getRecommendations(): OptimizationTip[] { const tips = []; if (this.getAvg('memory_usage') > 0.8) { tips.push({ level: 'warning', message: '内存使用率过高,建议减少并发任务', action: 'reduce_concurrency' }); } if (this.getAvg('vlm_latency') > 3000) { tips.push({ level: 'info', message: 'VLM响应较慢,考虑切换提供商或调整模型', action: 'optimize_vlm_config' }); } return tips; } }跨平台性能基准测试:
| 测试场景 | macOS (M2) | Windows 11 | Ubuntu 22.04 |
|---|---|---|---|
| 屏幕识别速度 | 120-180ms | 150-220ms | 140-200ms |
| 任务执行延迟 | 200-300ms | 250-350ms | 230-320ms |
| 内存占用峰值 | 1.2-1.8GB | 1.5-2.2GB | 1.3-2.0GB |
| 并发任务数 | 3-4 | 2-3 | 2-3 |
故障诊断与问题解决
即使经过精心配置,在实际使用中仍可能遇到各种问题。建立系统化的故障诊断流程可以帮助快速定位和解决问题。
常见问题诊断矩阵:
| 症状表现 | 可能原因 | 诊断命令 | 解决方案 |
|---|---|---|---|
| 应用启动失败 | 依赖缺失或权限问题 | npm list --depth=0 | 重新安装依赖,检查权限 |
| 屏幕识别无响应 | 权限未开启或VLM服务异常 | ls -la ~/.ui-tars/logs/ | 检查系统权限,验证VLM连接 |
| 操作执行异常 | 元素定位失败或动作超时 | tail -f ~/.ui-tars/debug.log | 调整识别精度,增加超时时间 |
| 内存使用过高 | 内存泄漏或资源未释放 | ps aux | grep ui-tars | 优化配置,重启应用 |
| 网络连接失败 | 代理设置或防火墙阻止 | curl -v https://api.huggingface.co | 检查网络配置,更新代理设置 |
日志分析与调试技巧:
# 1. 查看实时日志 tail -f ~/.ui-tars/logs/main.log # 2. 过滤关键错误 grep -E "(ERROR|FAILED|Exception)" ~/.ui-tars/logs/main.log # 3. 性能分析 node --inspect-brk apps/ui-tars/dist/main/main.js # 4. 网络请求调试 export NODE_DEBUG=http,net npm run dev # 5. 内存泄漏检测 node --trace-gc --trace-gc-verbose apps/ui-tars/dist/main/main.js开发者工具使用:
// 在渲染进程中打开开发者工具 import { ipcRenderer } from 'electron'; // 调试VLM请求 window.debugVLM = async (imageData, instruction) => { const result = await window.vlmService.analyze(imageData, instruction); console.log('VLM分析结果:', result); return result; }; // 屏幕元素检测 window.inspectScreen = () => { const elements = window.screenInspector.detectElements(); console.table(elements.map(el => ({ type: el.type, text: el.text?.substring(0, 30), bounds: el.bounds, confidence: el.confidence }))); }; // 动作执行跟踪 window.traceAction = (action) => { console.group(`执行动作: ${action.type}`); console.log('动作参数:', action.params); console.log('执行前截图:', action.beforeScreenshot); console.log('执行后截图:', action.afterScreenshot); console.groupEnd(); };扩展开发指南:定制化操作器
UI-TARS的模块化架构支持自定义操作器开发,用户可以根据特定需求扩展系统功能。操作器是任务执行的基本单元,每个操作器负责一类特定的交互操作。
操作器开发模板:
// 自定义操作器基类 import { BaseOperator, Task, TaskResult } from '@ui-tars/sdk'; export abstract class CustomOperator extends BaseOperator { // 操作器元数据 metadata = { name: 'custom-operator', version: '1.0.0', description: '自定义操作器示例', capabilities: ['click', 'type', 'scroll'] }; // 初始化方法 async initialize(config: OperatorConfig): Promise<void> { this.logger.info(`初始化 ${this.metadata.name}`); // 初始化资源连接等 } // 清理方法 async cleanup(): Promise<void> { this.logger.info(`清理 ${this.metadata.name}`); // 释放资源 } // 执行任务主方法 abstract execute(task: Task): Promise<TaskResult>; // 验证任务结果 protected async verifyResult(result: TaskResult): Promise<boolean> { // 实现结果验证逻辑 return result.success; } } // 具体操作器实现 export class FileManagerOperator extends CustomOperator { metadata = { ...super.metadata, name: 'file-manager', description: '文件管理操作器', capabilities: ['create_file', 'delete_file', 'rename_file', 'list_files'] }; async execute(task: Task): Promise<TaskResult> { const { action, params } = task; switch (action) { case 'create_file': return await this.createFile(params.path, params.content); case 'delete_file': return await this.deleteFile(params.path); case 'rename_file': return await this.renameFile(params.oldPath, params.newPath); case 'list_files': return await this.listFiles(params.directory); default: throw new Error(`不支持的操作: ${action}`); } } private async createFile(path: string, content?: string): Promise<TaskResult> { // 实现文件创建逻辑 return { success: true, message: `文件创建成功: ${path}`, data: { path } }; } // 其他方法实现... }操作器注册与配置:
# 操作器配置文件 operators.yaml operators: - name: "file-manager" type: "custom" class: "./operators/FileManagerOperator" config: root_path: "~/Documents" default_encoding: "utf-8" enabled: true - name: "browser-automation" type: "builtin" class: "@ui-tars/operator-browser" config: browser_type: "chromium" headless: false viewport: { width: 1920, height: 1080 } enabled: true - name: "system-commands" type: "custom" class: "./operators/SystemCommandsOperator" config: allowed_commands: - "ls" - "pwd" - "echo" timeout: 30000 enabled: true # 操作器依赖管理 dependencies: file-manager: requires: ["fs-extra", "chokidar"] browser-automation: requires: ["puppeteer-core", "playwright"] system-commands: requires: ["execa", "tree-kill"]测试与验证:
// 操作器单元测试 import { describe, it, expect, beforeEach } from 'vitest'; import { FileManagerOperator } from './FileManagerOperator'; describe('FileManagerOperator', () => { let operator: FileManagerOperator; beforeEach(async () => { operator = new FileManagerOperator(); await operator.initialize({ root_path: './test-files' }); }); it('应该成功创建文件', async () => { const task = { action: 'create_file', params: { path: './test-files/new-file.txt', content: '测试内容' } }; const result = await operator.execute(task); expect(result.success).toBe(true); expect(result.message).toContain('文件创建成功'); }); it('应该处理无效路径', async () => { const task = { action: 'create_file', params: { path: '/invalid/path/file.txt', content: '测试' } }; await expect(operator.execute(task)) .rejects .toThrow('路径无效'); }); afterEach(async () => { await operator.cleanup(); }); });实际应用场景与最佳实践
UI-TARS的设计理念是解决实际工作流中的自动化需求。以下是一些典型应用场景和相应的配置建议。
开发工作流自动化:
# 开发环境配置 development_workflow: tasks: - name: "启动开发服务器" trigger: "项目打开时" actions: - type: "terminal" command: "npm run dev" wait_for: "服务器启动完成" - name: "运行测试套件" trigger: "代码保存时" actions: - type: "terminal" command: "npm test" capture_output: true - name: "代码质量检查" trigger: "提交前" actions: - type: "terminal" command: "npm run lint" - type: "terminal" command: "npm run typecheck" # 集成开发环境交互 ide_integration: vscode: - 打开特定文件 - 运行调试配置 - 执行终端命令 webstorm: - 重构代码 - 运行单元测试 - 代码审查跨平台测试自动化:
// 跨平台测试脚本 const testScenarios = { 'macos': { browser: 'safari', screen_resolution: '1440x900', permissions: ['accessibility', 'screen_recording'] }, 'windows': { browser: 'edge', screen_resolution: '1920x1080', permissions: ['uia_access'] }, 'linux': { browser: 'firefox', screen_resolution: '1366x768', permissions: ['x11_access'] } }; // 自动化测试执行 async function runCrossPlatformTests() { for (const [platform, config] of Object.entries(testScenarios)) { console.log(`开始 ${platform} 平台测试...`); // 配置平台特定设置 await configurePlatform(platform, config); // 执行通用测试用例 const results = await executeTestSuite({ include: ['login_flow', 'data_entry', 'file_operations'], exclude: platform === 'linux' ? ['safari_specific'] : [] }); // 生成测试报告 await generateTestReport(platform, results); } }性能监控与优化:
// 性能监控面板 class PerformanceDashboard { private metrics = new Map(); // 收集关键指标 collectMetrics() { return { task_execution: { success_rate: this.calculateSuccessRate(), avg_duration: this.calculateAvgDuration(), error_distribution: this.getErrorDistribution() }, resource_usage: { memory: process.memoryUsage(), cpu: this.getCPUUsage(), network: this.getNetworkStats() }, vlm_performance: { response_time: this.getVLMResponseTime(), accuracy: this.getVLMAccuracy(), cost: this.calculateVLMCost() } }; } // 生成优化建议 generateRecommendations(metrics: any): OptimizationRecommendation[] { const recommendations = []; if (metrics.task_execution.success_rate < 0.85) { recommendations.push({ priority: 'high', action: '调整VLM识别参数', details: '当前成功率较低,建议提高识别精度或调整超时设置' }); } if (metrics.resource_usage.memory.heapUsed > 1024 * 1024 * 1024) { recommendations.push({ priority: 'medium', action: '优化内存使用', details: '内存使用超过1GB,考虑减少并发任务或优化缓存策略' }); } return recommendations; } }行动路线图:从入门到精通
快速启动检查清单:
- 验证系统环境:Node.js 20.x+,Python 3.8+,Git
- 获取项目源码:
git clone https://gitcode.com/GitHub_Trending/ui/UI-TARS-desktop - 安装项目依赖:
pnpm install - 配置VLM服务:选择提供商并获取API密钥
- 设置系统权限:确保屏幕录制和辅助功能权限
- 运行测试任务:验证基本功能是否正常
- 调整性能参数:根据硬件配置优化设置
- 探索高级功能:尝试自定义操作器和集成
深入学习路径:
- 概念理解:阅读核心文档,理解UTIO框架和视觉语言模型原理
- 基础实践:完成快速入门指南,掌握基本配置和任务执行
- 进阶配置:学习性能调优、错误处理和监控配置
- 扩展开发:开发自定义操作器,集成外部系统
- 生产部署:配置高可用架构,建立监控告警体系
社区参与渠道:
- 问题反馈:在项目仓库提交Issue,描述具体问题和复现步骤
- 功能建议:参与Discussion,分享使用场景和改进想法
- 代码贡献:遵循贡献指南,提交Pull Request
- 经验分享:编写技术博客,分享配置技巧和最佳实践
- 生态建设:开发插件和扩展,丰富UI-TARS生态系统
通过本文的详细指南,你应该已经掌握了UI-TARS桌面应用的核心配置方法和优化技巧。这个开源的多模态AI代理栈为GUI自动化带来了新的可能性——不再是简单的脚本录制,而是真正的智能理解和执行。无论是日常办公自动化、开发工作流优化,还是复杂的系统测试,UI-TARS都能提供强大的支持。现在就开始你的智能自动化之旅,探索视觉语言模型在实际应用中的无限潜力。
【免费下载链接】UI-TARS-desktopThe Open-Source Multimodal AI Agent Stack: Connecting Cutting-Edge AI Models and Agent Infra项目地址: https://gitcode.com/GitHub_Trending/ui/UI-TARS-desktop
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考