
第一次接触self_operating_computer时我第一反应是“这不就是给大模型装上了一双眼睛和一只手吗”它要做的事情其实很直白让 AI 看着电脑屏幕自己移动鼠标、敲击键盘像真人一样完成你交代的任务。我前后用了两周在办公自动化和软件测试场景里跑了十几个任务踩了不少坑也摸清了它的脾气。这篇文章把完整的使用记录、原理拆解和避坑技巧整理出来给想入坑或者已经在折腾的朋友一个参考。不管你是写代码的、做测试的还是经常被重复操作折磨的办公族看完应该都能判断这个东西是不是你想要的。1. 项目定位与核心思路拆解1.1 它到底解决了什么问题传统自动化方案比如按键精灵、脚本录制、RPA工具核心思路都是“固定流程”。你要先录制一遍操作或者用选择器去点某个按钮一旦界面改版、分辨率变化、窗口位置移动脚本就废了。而self_operating_computer从根本上换了一条路它把屏幕截图发给多模态大模型让模型像人一样“看”图像然后直接输出操作动作。也就是说它不需要知道某个按钮的内部 ID不需要依赖控件树只要眼睛能看到的它就能尝试去点。我实际使用下来它最适合的场景是那些“没有 API 可用、又跨多个应用”的临时任务。比如把网页上的数据复制到 Excel、帮测试人员跑一遍 UI 冒烟测试、批量操作文件夹里的文件。以往这种任务要么写复杂脚本要么人工机械操作现在只要把目标用一句话告诉它它就能自己一步步执行。更重要的是这个项目给普通用户降低了自动化门槛。过去自动化是程序员的专属游戏现在只要会描述任务——“帮我打开某某软件点文件另存为桌面”——它就能替你动手。它解决的不是“自动化执行”这一件事而是“怎么让机器理解你的意图”这一层难题。1.2 它和传统 RPA、浏览器自动化有什么不同为了说清楚差别我把它和主流的自动化方式放在一起对比了一下方案核心机制优点缺点传统 RPA录制操作 / 控件选择器 / 固定坐标稳定、可控、适合重复流程开发成本高UI 一变就崩浏览器自动化解析 DOM 结构操作网页元素速度快选择器精确只能管浏览器跨应用不行self_operating_computer屏幕截图 多模态模型 鼠标键盘动作通用像人一样操作推理延迟高受视觉模型能力限制从对比里能看出它没有在“精确”上较劲而是赌“通用理解”。这正是它最有趣的地方。在实际测试中它打开的是真正的操作系统窗口点的是真正的鼠标键盘所以任何能显示在屏幕上的软件它都能操作。这个“看得见就能操作”的思路和人类使用电脑的逻辑完全一致也是它最大的差异化价值。不过通用带来的代价就是不确定性。它不是每步都保证正确有时候会看错图标、点错位置需要通过后端的反馈循环来纠错。理解这一点是后续使用和调试的心理基础。2. 工具选型与前置环境准备2.1 硬件与系统要求别急着跑先检查这几个点self_operating_computer本身是一个客户端程序重活图像理解、动作规划都在模型端完成所以对本地硬件的要求没有想象中高。我在一台 8GB 内存、无独立显卡的普通办公笔记本上跑过除了截图和动作执行会有一定延迟整体可用。但有几个系统层面的点特别影响体验提前避开比事后排查省事得多显示缩放必须设为 100%。Windows 默认 125% 或 150% 缩放时截图和鼠标坐标会产生偏移。这个现象非常常见我一开始没注意结果模型明明看见了按钮却点不中。多显示器会干扰视觉识别。如果连接了扩展屏截图很可能只截主屏或两张屏导致模型“看到”的内容和实际操作区域不一致。最好先只用单屏跑。避免动态壁纸和频繁弹窗。任何屏幕内容变化都可能被模型当成有效信息增加误判概率。系统权限要提前放开。macOS 下需要给终端授予“屏幕录制”和“辅助功能”权限Windows 上可能要关闭基于用户账户控制的弹窗拦截。我建议第一次运行前先新建一个干净的测试桌面环境桌面只放必要的图标后台不要开 IM 和全屏播放器否则模型很容易被无关信息干扰。2.2 环境搭建全过程从 Python 环境到模型密钥配置这个项目的安装不像普通脚本那样直接双击就完事需要一点命令行基础。好在流程不长照着做就行。我当时的完整步骤是这样的安装 Python 3.10 或更高版本并把 Python 加入系统 PATH。创建一个新的虚拟环境避免依赖冲突。从源码安装依赖。项目根目录下有 requirements 文件直接安装全部依赖python -m venv venv # Windows venv\Scripts\activate # macOS / Linux source venv/bin/activate pip install -r requirements.txt配置模型服务密钥。它默认调用某商业多模态模型的 API需要把密钥写入环境变量。在 Windows PowerShell 里可以用$env:API_KEY 你的密钥在 Linux/macOS 下用 export 设置。注意密钥别写进代码文件避免泄露。修改核心配置。如果用的是开源或自建模型需要改模型名称和接口地址。这里我遇到一个坑用默认配置连某个开源模型时动作输出格式经常出错后来改成官方推荐的商业模型才稳定。建议新手先沿用默认模型跑通流程再折腾其他模型。启动主程序python main.py启动后命令行会显示一个输入提示符你直接输入自然语言指令比如“打开计算器并计算 12 乘 8”它就会开始接管电脑。3. 实操过程与核心环节实现3.1 首次运行让 AI 打开计算器并算出结果我的第一个测试任务很简单“打开计算器计算 12345 乘以 6789”。当时想的是如果这么基础的任务都完不成那这工具也就只能当玩具。结果它稳稳地完成了过程让我印象深刻。程序先截了一张完整屏幕图然后模型根据截图推理出第一步移动鼠标到开始菜单位置点击左键。接着再截屏看到开始菜单弹出后模型识别出“计算器”应用图标移动鼠标点击。之后又是一轮截图、识别、点击它找到了数字按钮按顺序输入 12345再点乘号、6789最后按等号。整个过程总共产生了大约 15 次截图和 15 组动作指令耗时近两分钟。从这次运行我能明显看到它的执行节奏不是一口气把流程全部规划好而是每执行一步就重新看一眼屏幕根据最新状态决定下一步。这种“感知-行动”循环虽然慢但能处理很多意外情况比如弹窗、组件没有按预期打开。不过它也暴露了一个问题当界面比较拥挤时模型可能会认错图标。比如计算器窗口里数字和符号都是圆形小按钮它偶尔会把 8 和 9 搞混。虽然反馈机制能修错但整体速度会变慢。所以首次测试最好用窄而清晰的任务成功体验感会强很多。3.2 核心机制拆解截图-推理-执行-反馈循环要把它用好必须理解这套循环因为它决定了你该怎么写指令、怎么调参数。整个流程可以归纳为四步捕获屏幕程序用系统截图 API 截取当前完整屏幕压缩后放入消息队列。构造推理请求把截图和用户的目标任务、最近的交互历史一起包装成多模态模型的输入。模型需要理解“我看到了什么”以及“我现在该做什么”。输出动作指令模型返回一个结构化的动作序列例如移动鼠标到某个坐标点、点击左键、输入字符串、滚动滚轮等。每个动作都附带有模型认为合适的坐标或文本。执行动作并反馈操作系统的鼠标键盘驱动执行动作执行完成后截取新的屏幕图作为下一轮推理的输入。这个循环里最关键的参数有temperature我建议设为 0 或接近 0。机器操作不需要创意温度太高会让模型随机点击造成灾难性后果。max_tokens每个动作序列的输出长度默认值通常够用但如果任务步骤很多可以适当调大。历史消息轮数它会把最近几次截图和动作都放在上下文里让模型知道自己前面干了什么。但这个历史也是成本大头后面会细说。理解了这个循环你就知道为什么它执行任务会一顿一顿的。因为每一步都要等模型响应网络延迟加推理时间快则几秒慢则十几秒。这不能当作实时自动化来用应该把它看成一位“远程操作的实习生”你做一步盯一步。3.3 为什么不用坐标锁定而用视觉定位用过传统坐标点击脚本的人都知道固定坐标最烦人的是窗口一移动脚本就乱点。self_operating_computer的做法完全不同模型每一轮看到的都是一张新的截图它像人一样先“看见”目标图标在图片中的像素位置然后输出大概坐标。这个坐标是动态计算的不绑定任何窗口句柄。我用一个生活类比解释你让人去拿桌上水杯你不会提前告诉杯子离你几厘米你会说“看到那个白色保温杯了吗拿过来”。人根据视觉实时定位窗口挪了也能找到。这个项目也一样它靠的是视觉识别不是绝对坐标。当然这种“人眼式”定位也有代价。它要求模型确实能识别出屏幕上每个元素。如果某个按钮长得不明显、被遮挡、或者桌面分辨率特殊它就可能找错。实测下来软件界面放大到正常尺寸按钮文字清晰识别率很高但如果是极小的工具栏图标就容易翻车。所以实际操作时我会尽量把窗口放大把界面调到图标比较大的主题模式这样能显著提高成功率。4. 常见问题与排查技巧实录4.1 模型幻觉点错按钮怎么办说白了模型也会“眼瞎”。我在测试中遇到过它把“取消”当成“确定”把文件夹的“删除”当成“重命名”。这种问题无法彻底根除只能降低概率和弥补后果。降低概率的方法一是把温度设为 0二是给系统提示词注入明确的执行规则比如“点击前必须确认目标文本与任务一致”三是给 UI 留出更大的点击区域把窗口放到最大减少误触相邻元素。弥补后果的方法更重要给执行动作加一个“最小间隔时间”避免连续点击造成连锁错误。我还在程序外围写了一个小时级的“安全日志”记录模型每一步输出。一旦发现某步动作和任务不匹配立刻手动中断恢复到上一个截图状态。新手千万不要让它在未备份的正式环境上自由乱跑尤其是涉及删除、发送消息这种不可逆操作时一定要盯紧。4.2 DPI 缩放和窗口遮挡引起的坐标偏移这是我遇到的第一大坑而且很隐蔽。系统默认 125% 缩放时截图分辨率是逻辑分辨率的 1.25 倍但鼠标移动用的是系统逻辑坐标两者没有对齐导致模型点哪里都偏。后来我查了很久才想到把缩放改成 100%。窗口遮挡也很烦。比如你让 AI 打开某个文件但目标窗口被任务栏或别的窗口挡住一部分模型看不到全貌就会瞎猜。解决方法是启动任务前把不相关窗口全部最小化必要时让屏幕保持整洁。这个听起来像废话但对视觉模型是真的有效。如果要用多显示器最好在系统里设成“复制”而不是“扩展”让截图与实际操作落在同一块屏幕上。总之屏幕状态越简单坐标偏移越少。4.3 长时间运行的稳定性和上下文膨胀单次短任务很容易跑通但连续执行十几个操作后问题就来了。因为每一步都会把新截图塞进上下文几十轮之后请求体积越来越大模型响应速度明显变慢偶尔还会出现“内存不足”或接口超时。我测试过一个 20 步的批量改名任务跑到第 15 步时单次响应耗时从 5 秒涨到将近 20 秒最终直接超时报错。后来我做了两个改进效果立竿见影每执行 8 步就“截断历史”只保留最近 3 轮截图和动作记录让模型不背历史包袱。手动启动一步一停的模式执行一步确认一步减少上下文膨胀。需要注意的是截断历史意味着模型可能会忘记任务目标所以每次请求里都要把用户的原始指令重新拼进去。这算是一个经验细节处理后长任务稳定了很多。4.4 成本与性能优化多模态 API 是按 token 计费的一张截图可能折算成几百上千 token跑一次复杂任务可能产生大量费用。我第一周没注意跑了十几个任务账单比预想高出一大截。优化手段首先是压缩截图。项目默认截图是原始分辨率我改成在发送前用 Python 图片库直接缩放一半同时转成 JPEG质量从 95 降到 80。对模型来说识别难度略有增加但成本下降非常显著。其次是降低截图频率。原来每执行完一个动作就截一张图后来改成两步一截。风险是反馈延迟但多数场景下可接受。最后是选择更便宜的小模型做前期试跑。先用小模型把流程整体跑通确认任务逻辑没问题再切换大模型跑正式数据这样能把试错成本压下来。如果你和我一样是个人使用者这个技巧直接关系到钱包厚度。5. 进阶玩法与我的实测心得5.1 让它完成一个真实的办公任务批量整理文件夹除了计算器这种演示任务我还试过更接近实际工作的场景把某个文件夹里所有名称包含“发票”的文件重命名加上日期前缀然后移动到“已处理”目录。这个任务要打开文件资源管理器、在搜索框输入关键字、全选筛选结果、右键弹出菜单、重命名、再移动横跨多个交互层级比点计算器复杂得多。我给的指令是“打开资源管理器搜索发票把目前能看到的所有名称带发票的 Excel 文件重命名为发票_日期_原名移动到桌面已处理文件夹。”实际执行大致分了三段第一段打开资源管理器并搜索。这一步比较顺利它认出了地址栏和搜索框输入关键字后按回车。第二段全选搜索结果并尝试打开右键菜单。这里有波折它右键点在了列表空白处菜单弹出来了但第一项不是“重命名”。我看它悬停之后又移动了一下才选中“重命名”。说明反馈循环在起作用。第三段它逐个文件改文件名。这里耗时最长因为每个文件都要弹出重命名框、输入新名称、按回车。它偶尔会把日期和原名顺序搞反我会在小窗口里手动终止再发一条修正指令。这个任务最终用了 6 分多钟才完成但全程不需要我亲自点一下鼠标。放在以前要么手写几十行脚本要么就自己手动反锁半小时。从效果看它更像一个“听得懂人话的低效率助理”而不是“高性能员工”。但考虑到零开发成本这个效率完全可以接受。5.2 踩坑汇总与新手建议把这两周踩过的坑汇总成几条给准备入坑的朋友当参考首个任务选 Web 浏览器操作。浏览器界面元素标准化非常容易被视觉模型识别比桌面原生软件成功率高一截。先积累信心再挑战原生应用。给任务加超时保护。如果某一步 30 秒内没有产生新动作大概率卡住了。我写了一个简单的外部监控脚本检测到卡住就截图发回模型让它重新规划。永远不要在真实生产环境直接跑。先用虚拟机或专门建的测试用户等流程稳定了再上正式环境。你不知道哪一步会点错多一道保险总是好的。日志要留着截图快照。程序执行时我把每步截图同步存到本地文件夹出错了能回溯是哪一步出了问题。这个习惯帮我快速定位了至少三个 bug。不同任务之间最好重置进程。连续执行不同任务时旧任务的历史上下文可能误导新任务。我每次切换大任务都会重启程序清空会话遗忘成本比误操作成本低得多。最后说一点个人感受。我在实际使用中最大的体会是这个项目并不能完全替代传统自动化但它把“自动化”的定义拓宽了。以前你要对着 API 文档写代码现在只需要像指挥一个人一样说话。它确实不够快、不够稳但我坚信这种“视觉语言动作”的交互形式会是未来计算设备操作的一个重要方向。如果你有耐心愿意盯着它一步步执行它真的能帮你省下不少重复劳动的时间。建议新人从给文件重命名、批量打开网页这种小任务开始踩过几次坑之后你就会理解它的脾气和边界然后在合适的地方放心用起来。