Mano-P 开源 computer use 本地模式:截图不上传的桌面自动化实践
1. 为什么“截图不上传”这件事值得单独聊第一次看到 Mano-P 这个项目的时候我正坐在一台老笔记本前帮朋友处理一个特别琐碎的需求把某个桌面软件里几十条记录一条条复制出来整理成表格。手动点大概要半小时写脚本调接口对方又没有开放接口。这种“看得见、点得着、但就是没法自动化”的场景做过程序的人应该都懂属于典型的脏活累活。Mano-P 想解决的恰好就是这一类问题。它做的事情可以概括成一句话让 AI 直接看你的屏幕、动你的鼠标键盘把原本需要人手动完成的桌面操作接管掉而且整个过程截图和操作数据都留在本地不上传。关键词里的 computer use、本地模式、开源基本就是它的三个核心标签。先说清楚它是什么。Mano-P 是一个开源的 computer use 方向的实现所谓 computer use直白点讲就是让 AI 像人一样操作电脑——看屏幕内容、理解界面、移动鼠标、点击按钮、输入文字。它不是那种只会在聊天框里回答问题的 AI而是能真正“动手”的那一类。你给它一个任务描述比如“把这份表格里的邮箱都提取出来”它会自己截图、自己识别、自己操作。再说它能做什么。最典型的几类场景重复性的表单填写、跨软件的数据搬运、界面测试、批量文件整理、需要人工盯着点的流程。这些活儿的共同点是——逻辑不复杂但必须有人坐在电脑前一下一下点。Mano-P 的价值就在于把这部分人力释放出来。那它解决了什么问题我认为核心是两个。第一是隐私。市面上不少 computer use 方案是把屏幕截图传到云端做推理这意味着你屏幕上的一切——聊天记录、文档内容、账号信息——都可能离开你的设备。Mano-P 主打本地模式截图不出本机这对处理敏感数据的人来说是刚需。第二是可控和可改。开源意味着你能看到它怎么工作的能改能接自己的模型能适配自己的流程而不是被一个黑盒绑死。适合谁看如果你是会写点代码、想让 AI 帮忙干桌面杂活的开发者这个项目值得研究如果你是做自动化测试、RPA 相关工作的它的思路能给你不少启发哪怕你只是想搞明白 computer use 到底是怎么落地的跟着走一遍也能有收获。下面我就按自己的理解把这个项目的设计思路、核心细节、实操过程和踩坑经验完整拆一遍。2. 整体设计思路为什么是“本地截图 视觉模型 动作执行”这套组合2.1 computer use 的本质是一条感知到动作的闭环很多人第一次接触 computer use会以为它是个“更聪明的脚本工具”。其实不是。传统脚本是坐标驱动的你告诉它点 (100, 200)它就点 (100, 200)界面一变就废。而 computer use 是感知驱动的它先看当前屏幕长什么样理解界面上有哪些元素再决定点哪里。这个差别决定了它对界面变化的容忍度高得多。Mano-P 的整个架构本质上就是在跑一个闭环截图 → 理解 → 决策 → 执行动作 → 再截图。这个循环一直转直到任务完成或者达到终止条件。听起来简单但每一环都有讲究。先说截图。这是整个闭环的输入源也是最敏感的一环。Mano-P 选择在本地完成截图不往外传这是它和云端方案最大的分野。截图之后图像会交给视觉模型去理解——识别按钮、输入框、文字内容、界面布局。理解完模型输出一个动作指令比如“点击坐标 (x, y)”或者“在输入框输入某段文字”。执行器接到指令调用系统层面的鼠标键盘接口去执行。执行完再截一张图看看结果对不对然后进入下一轮。这个闭环的设计哲学我理解是把不确定性交给模型把确定性交给代码。模型负责“看懂”和“决定”代码负责“执行”和“校验”。这样既利用了模型的泛化能力又保证了动作的可靠性。2.2 为什么坚持本地模式而不是云端推理这是 Mano-P 最值得说的一点。云端推理有它的好处模型可以更大更强不用占本地算力。但代价是隐私和延迟。隐私这块不用多解释。你的屏幕上有多少东西是不该外传的工作文档、私人聊天、密码管理器界面、银行页面……只要截图上传理论上就有泄露风险。Mano-P 把截图和推理都放在本地等于从物理上切断了这条泄露路径。对于企业环境或者处理敏感数据的个人这不是“加分项”而是“能不能用”的门槛。延迟是另一个常被忽略的点。computer use 是个高频循环每一步都要截图、推理、执行。如果每轮都要把截图传到云端再等结果回来网络抖动一下整个流程就卡住了。本地推理虽然单次算力可能不如云端但省掉了往返时间整体体验反而更顺。当然本地模式也有代价——它吃本地算力。视觉模型跑在本地对显卡或者 CPU 有要求。Mano-P 作为开源项目把模型选择权交给你你可以根据自己机器的配置挑合适的模型这也是开源的好处。2.3 开源带来的可扩展性才是长期价值一个 computer use 工具好不好用很大程度上取决于它能不能适配你的具体场景。闭源方案你只能用它给的功能遇到不支持的界面就束手无策。Mano-P 开源意味着你可以换模型。觉得默认模型识别不准可以接自己微调过的视觉模型。改动作空间。默认支持点击、输入、滚动你想加拖拽、快捷键自己扩展。接自己的流程。把 Mano-P 当成一个库嵌进你现有的自动化系统里。审计行为。每一步它做了什么、为什么这么做你都能看到日志这在处理重要任务时特别关键。我个人的判断是computer use 这个方向现在还处在早期没有哪家能做到“开箱即用覆盖所有场景”。这种情况下开源项目的可塑性比一时的功能完整度更重要。Mano-P 走的就是这条路。3. 核心细节解析截图、理解、执行三个环节的关键点3.1 截图环节频率、范围和格式都有讲究截图看着简单其实细节很多。第一个问题是截多大范围。全屏截图信息最全但分辨率高、传输和推理成本大只截活动窗口信息少但快。Mano-P 这类方案通常支持配置截图区域我的经验是如果任务只涉及单个应用就锁定那个窗口如果要在多个窗口间切换才用全屏。第二个问题是截图频率。截太勤算力浪费截太疏可能错过界面变化。合理的做法是事件驱动 固定间隔兜底动作执行后立刻截一张确认结果如果界面没变化就等一小段时间再截。这样既保证响应及时又不会空转。第三个问题是图像格式和压缩。本地推理虽然不走网络但图像还是要喂给模型格式和分辨率直接影响推理速度。一般会把截图缩放到模型输入尺寸比如 1280 宽或者 1024 宽太大没必要模型也吃不下。格式上 PNG 无损但大JPEG 小但可能有压缩伪影影响文字识别。我的建议是文字密集的界面用 PNG图像为主的界面可以用 JPEG 换速度。提示截图区域如果包含任务无关的敏感信息比如另一个窗口的聊天内容最好在截图前做区域裁剪或者遮挡本地模式虽然不上传但减少无关信息也能提升模型识别准确率。3.2 理解环节视觉模型怎么“看懂”界面这是整个流程里最核心也最难的一环。模型要做的是把一张像素图变成结构化的理解这里有个按钮那里有个输入框这段文字是什么内容。目前主流做法有两类。一类是纯视觉模型直接把截图喂进去让模型输出界面元素的描述和坐标。另一类是视觉 OCR 混合先用 OCR 把文字提取出来再结合视觉模型判断布局。Mano-P 这类项目通常会提供多种后端你可以根据场景选。纯视觉模型的好处是端到端能理解图标、按钮这类非文字元素缺点是坐标定位可能不够精确尤其是小元素。OCR 混合的好处是文字定位准适合表单填写这类以文字为主的场景缺点是对纯图形界面无能为力。我的实操经验是表单类任务优先用 OCR 辅助图形界面操作优先用纯视觉。另外给模型的提示词prompt非常关键。你要明确告诉它输出格式比如“返回一个 JSON包含动作类型和目标坐标”否则模型可能给你一段自然语言描述解析起来很痛苦。还有一个容易被忽略的点上下文。单看一张截图模型可能不知道当前处于流程的哪一步。把任务描述、历史动作一起喂给模型它的决策会准很多。比如同样是看到一个“下一步”按钮如果知道前面已经填完了所有字段模型就知道该点了。3.3 执行环节动作要稳校验要勤执行环节是把模型的决策变成真实的鼠标键盘操作。这里的关键词是稳。鼠标点击最稳的方式是调用系统 API 直接发送点击事件而不是模拟物理移动。模拟物理移动虽然看起来更“像人”但慢且容易受干扰。点击坐标要精确到元素中心边缘点击容易点偏。键盘输入要注意焦点问题。输入之前必须确保目标输入框已经获得焦点否则文字会跑到别的地方。稳妥的做法是先点击输入框等一小段确认焦点切换再输入。执行完一定要校验。校验的方式就是再截一张图对比执行前后的界面变化。如果预期界面变了但实际没变说明动作失败了需要重试或者换策略。这个校验机制是 computer use 和普通脚本最大的区别之一——它能感知自己有没有做对。注意执行动作之间要留出合理的等待时间。界面渲染、动画、网络加载都需要时间动作发太快界面还没反应过来下一步就点空了。一般每个动作后等 0.5 到 1 秒比较稳妥具体看应用响应速度。4. 实操过程从零跑通一个桌面自动化任务4.1 环境准备与依赖安装假设你拿到的是 Mano-P 的源码第一步是把环境搭起来。这类项目通常依赖 Python 环境加上一些系统级的库用于截图和模拟输入。# 创建独立环境避免污染系统 Python python -m venv mano-env source mano-env/bin/activate # Windows 用 mano-env\Scripts\activate # 安装项目依赖 pip install -r requirements.txt系统层面截图和输入模拟通常需要额外的库。Linux 下常见的是 X11 相关的库Windows 下一般用系统自带的接口macOS 需要授予辅助功能权限。这一步最容易卡住的就是权限——macOS 和部分 Linux 发行版会限制程序控制鼠标键盘必须在系统设置里手动授权否则程序跑起来但点不动。模型这块如果项目默认接的是本地视觉模型你需要提前把模型权重下载好放到指定目录。模型大小和你的显存直接相关显存不够就选小一点的量化版本。我一般会先用最小的模型跑通流程确认整条链路没问题再换大模型提升准确率。4.2 配置本地模式与模型参数Mano-P 的配置文件通常是个 YAML 或者 JSON里面有几个关键项要改。mode: local # 关键本地模式截图和推理都不出本机 screenshot: region: active_window # 截图范围可选 fullscreen / active_window / custom format: png max_width: 1280 model: backend: local_vision path: ./models/vision-small device: cuda # 有显卡用 cuda没有就 cpu action: click_delay: 0.6 # 每次动作后的等待秒数 max_retries: 3 # 动作失败重试次数这里每个参数背后都有取舍。region选active_window能大幅减少无关信息提升识别准确率max_width设 1280 是速度和精度的平衡点再大推理明显变慢click_delay设 0.6 秒是我在多数桌面应用上实测比较稳的值太快容易点空太慢整体效率低。max_retries这个参数特别重要。computer use 不可能 100% 一次成功界面偶尔卡顿、模型偶尔看错都正常。给它 3 次重试机会能显著提升整体成功率。但也不能设太高否则一个死循环会卡很久。4.3 定义任务并跑通第一个流程配置好之后就可以定义任务了。任务描述要写得具体、可验证。比如“把记事本里的内容复制到表格里”就太模糊改成“打开记事本选中全部文字复制切换到表格软件粘贴到 A1 单元格”就清楚多了。from mano import ManoAgent agent ManoAgent(configconfig.yaml) task 1. 打开记事本应用 2. 选中全部文字并复制 3. 切换到表格软件 4. 粘贴到 A1 单元格 5. 保存文件 result agent.run(task) print(result.status)跑起来之后你会看到它一步步截图、决策、执行。第一次跑建议盯着看观察它在哪一步犹豫、哪一步出错。我第一跑的时候它在“切换到表格软件”这步卡住了因为它不知道用 AltTab 还是点任务栏。后来我在任务描述里补了一句“用 AltTab 切换窗口”就顺了。这个例子说明一个经验任务描述里要包含你期望的操作方式。模型不知道你的偏好你告诉它它才能按你的习惯来。4.4 观察日志与调优跑通之后重点就变成调优了。Mano-P 一般会输出详细日志记录每一步的截图、模型输出、执行动作、校验结果。这些日志是调优的金矿。我会重点看三类信息模型识别错的元素、执行失败的动作、重试次数多的步骤。识别错可能是截图区域不对或者模型太小执行失败可能是等待时间不够或者坐标偏了重试多说明这一步本身设计得不合理需要拆细。调优是个迭代过程别指望一次到位。我的习惯是先把成功率从 60% 调到 90%剩下的 10% 用重试兜底。追求 100% 一次成功不现实也没必要。5. 常见问题与排查技巧实录5.1 动作执行了但界面没反应这是最常见的问题。原因通常有三个焦点不对、等待太短、坐标偏移。排查顺序先看日志里点击的坐标是不是目标元素的中心如果偏了说明模型定位不准考虑换模型或者调整截图分辨率如果坐标对但没反应多半是焦点问题在点击前加一步“激活窗口”如果都正常就是等待时间不够把click_delay调大试试。我遇到过一次特别隐蔽的点击坐标完全正确但就是没反应最后发现是那个按钮处于禁用状态需要先勾选一个复选框。这种情况模型看不出来只能靠你在任务描述里补上前置条件。5.2 模型识别不准老是点错元素识别不准先别急着换模型检查这几项截图分辨率是不是太低文字糊了模型当然认不出截图区域是不是包含了太多干扰元素提示词是不是没写清楚。如果都排除了再考虑换模型。换模型之前可以试试给目标元素加描述。比如任务里写“点击右下角的蓝色保存按钮”比“点击保存按钮”准确率高很多。模型对颜色、位置的描述是有感知的。5.3 流程跑到一半卡死卡死通常是陷入了死循环某个动作一直失败一直重试但每次失败原因都一样。这时候max_retries就起作用了达到上限后应该主动退出并报错而不是无限重试。排查时看日志里重复出现的动作那就是卡点。常见原因是界面状态和模型预期不符比如弹了个意料之外的对话框。解决办法是在任务里加异常处理分支如果检测到某个对话框先关掉它再继续。5.4 常见问题速查表现象可能原因排查方向解决建议点击无反应焦点不对/等待太短看坐标和焦点日志加激活窗口步骤调大延迟点错元素模型识别不准看截图清晰度和提示词提高分辨率细化元素描述流程卡死死循环重试看重复动作日志设重试上限加异常分支输入文字错位输入框未获焦点看输入前是否点击输入前强制点击目标框整体很慢模型太大/截图太频看单步耗时换小模型降截图频率提示调试阶段建议把每一步的截图都存下来出问题时能回放整个流程。这比看文字日志直观得多尤其是排查识别类问题时。6. 我对本地 computer use 的一点实际体会用下来最大的感受是本地模式带来的不只是隐私安全还有一种心理上的放松。你知道屏幕上的一切都没离开这台机器用起来就没有顾虑敢让它去操作那些涉及敏感信息的界面。这一点在云端方案上是做不到的。另一个体会是computer use 现在的成熟度适合处理中等复杂度、容错性高的任务。太简单的任务写脚本更快太复杂、一步错就满盘皆输的任务还是得人盯着。它最舒服的区间是那种“逻辑清晰但步骤繁琐”的活比如批量填表、跨软件搬运数据。最后分享一个小技巧把大任务拆成小任务。与其让 AI 一口气完成十步操作不如拆成三个小任务每个任务跑完你确认一下再跑下一个。这样单次成功率更高出问题也容易定位。我一开始图省事写了个超长任务结果中间错一步后面全乱排查了半天。拆开之后稳多了。