本地三模型控屏:让你的电脑“看得见、听得懂、会动手”
你肯定遇到过这种烦:
- 跟云端 AI 说“把这段数据从网页抄到表格”,它要你截图、上传、等半天。
- 你看着进度条发呆,心里默念:我只是想少点几下鼠标啊。
把这套事搬到本地,感觉会完全不一样:说一句话,电脑 1 秒内就开始动。不靠 API 往返,也不需要把屏幕截图交给云端。
这篇给你一套可落地的方案:Whisper + Qwen + Moondream 三模型流水线。你照着搭完,就能做一个离线“电脑助理”。
这套架构到底怎么跑的?
一句话:语音 → 文本 → 意图计划 → 看屏幕定位 → 执行动作。
- Whisper:你说话,它把语音变成文字。
- Qwen(指令模型):读文字,判断你想干嘛,输出一份“操作计划”。
- Moondream(视觉语言模型):看屏幕截图,帮你找按钮/输入框/菜单的位置。
- 执行器(Automation):根据坐标点击、输入、快捷键、滚动。
为什么快?
- 云端方案慢在“截图上传 + 云端推理 + 返回指令”。
- 本地方案省掉网络往返,截图只在你电脑里转一圈。
隐私也省心:屏幕内容、账号信息、表格数据都不出机器。
开始动手前:你需要准备什么
硬件建议
- CPU 也能跑,只是延迟会抖。
- 想稳定 1 秒级:
- 有 NVIDIA 显卡更舒服(8GB 显存起步更稳)
- Apple Silicon(M 系列)也能玩,但不同推理框架速度差异很大
软件环境
- Python 3.10+
- Git
- 一个能跑本地模型的推理框架(你任选其一):
- Ollama(上手快)
- llama.cpp(轻量、可控)
- vLLM(吞吐高,部署偏工程化)
模型选择建议(别贪大)
- Whisper:
- 追求速度:
small/medium - 追求准确:
large-v3(慢一点)
- 追求速度:
- Qwen:
- 建议用 7B 级别的指令模型(本地更现实)
- Moondream:
- 优势是轻量、适合做“屏幕问答 + 粗定位”
提醒一句:控屏这事,稳定比聪明更重要。模型越大越聪明,但延迟和不可控也会涨。
你要实现的最小可用版本(MVP)
目标非常具体:
你对着麦克风说:“打开浏览器,搜索某某,然后把第一条结果标题复制到备忘录。”
电脑能完成:
- 听到语音 → 转文字
- 生成计划(例如:打开浏览器 → 聚焦地址栏 → 输入关键词 → 回车 → 读取第一条标题 → 打开备忘录 → 粘贴)
- 循环执行每一步:每一步都截图给 Moondream 做定位,然后点/输入
这就是最小闭环。
核心数据结构:让模型输出“可执行计划”
控屏翻车的高发原因:让大模型直接输出“点击右上角那个按钮”。
右上角是哪个?它一激动就瞎编。
更靠谱的做法:让 Qwen 输出结构化步骤,然后每一步交给 Moondream 去“看图找位置”。
给你一个计划格式(你可以照抄):
{
"goal": "把第一条搜索结果标题复制到备忘录",
"steps": [
{"action": "hotkey", "keys": ["CMD", "SPACE"], "why": "打开Spotlight"},
{"action": "type", "text": "Safari"},
{"action": "key", "key": "ENTER"},
{"action": "hotkey", "keys": ["CMD", "L"], "why": "聚焦地址栏"},
{"action": "type", "text": "moondream github"},
{"action": "key", "key": "ENTER"},
{"action": "vision_click", "query": "第一条搜索结果标题"},
{"action": "hotkey", "keys": ["CMD", "C"]},
{"action": "app_open", "name": "Notes"},
{"action": "hotkey", "keys": ["CMD", "V"]}
]
}
注意这里的关键点:
- 只有
vision_click这种动作需要视觉模型。 - 其他动作尽量用快捷键(快、稳、跨分辨率)。
组件 1:Whisper 语音转文字(低延迟玩法)
低延迟的窍门就一个:别录一大段再识别。
用“短音频分块 + 流式识别”会更接近即时对话。
你可以用这些方案:
faster-whisper(很多人用它做实时转写)whisper.cpp(C++ 实现,速度不错)
你要的效果是:
- 你说完一句话,200~500ms 内能出文字
- 文字够准,别老把“备忘录”听成“背忘路”
实操建议:
- 中文场景用
medium往往够了 - 环境吵就加 VAD(语音活动检测),少吞字
组件 2:Qwen 负责“把人话变成计划”
Qwen 这部分要做两件事:
- 识别你的意图(你要达成什么)
- 拆成可执行步骤(尽量用快捷键,少依赖视觉点击)
你可以这样写提示词(精简但够硬):
你是桌面自动化规划器。
输出严格的 JSON,不要输出解释。
只允许 action: hotkey/type/key/app_open/vision_click/wait。
能用快捷键就别用 vision_click。
每一步 why 简短说明目的。
再把用户指令丢进去,让它吐 JSON。
工程上建议加两层保险:
- JSON Schema 校验(格式不对就让它重写)
- 黑名单动作拦截(比如“删除所有文件”“发送邮件给所有联系人”这种直接拒绝)
别怕麻烦,这一步能救你无数次。
组件 3:Moondream 负责“看屏幕找东西”
Moondream 在这里干的事很朴素:
- 你给它一张屏幕截图
- 你问它:某个元素在哪(按钮/输入框/第一条结果/关闭图标)
- 它回答一个位置(理想是坐标或边框)
现实里可能遇到两个情况:
- 模型能直接给坐标:爽,直接点。
- 模型只能描述位置:那就再做一步“从描述到坐标”的转换(比如结合 OCR、模板匹配、或者让模型输出 bbox)。
想让它更稳:
- 截图别太大。缩放到 1280 宽左右,推理快很多。
- 提问别抽象。别问“把它打开”,要问“右上角的搜索输入框在哪里”。
执行器:让电脑真的动起来
执行器是最“土但关键”的部分。
你可以用:
- macOS:
- 快捷键/AppleScript
- Accessibility API(更稳,但要写一些系统交互)
- 跨平台:
pyautogui(简单粗暴,适合原型)
原型阶段我更建议用 pyautogui,因为你先把闭环跑通再说。
执行器要做的事:
- 截图:每一步执行前/后截一张
- 点击:把 Moondream 给的目标点映射到真实屏幕坐标
- 输入:文本、回车、快捷键
- 失败重试:点不到就换策略(滚动、缩放、再截图)
把三者串起来:循环就这么写
下面是你需要的“脑内主循环”(伪代码,方便你照着实现):
while True:
audio = record_until_silence()
text = whisper_transcribe(audio)
plan = qwen_make_plan(text) # JSON steps
for step in plan["steps"]:
if step["action"] in ["hotkey", "type", "key", "app_open", "wait"]:
execute(step)
continue
if step["action"] == "vision_click":
screenshot = capture_screen(resize=1280)
point = moondream_locate(screenshot, step["query"]) # x,y
click(point)
跑起来后你会发现:体验差距就出在细节。
- 截图+视觉推理要快
- 规划别啰嗦
- 点击别抖
延迟压到 1 秒级:真有用的优化点
想快,别堆更大的模型,堆这些:
- 减少视觉调用次数:
- 能快捷键就快捷键
- 能 Tab 切焦点就别满屏找输入框
- 屏幕截图缩放:
- 4K 屏直接喂模型,速度必炸
- 缓存策略:
- 同一个界面连续点击多个元素,别每次都重新跑完整推理
- 分级推理:
- 小模型先粗定位,失败再升级策略
- 把“等待”写进计划:
- 页面没加载完就点,必错
体感上,少一次视觉推理,就像少等一次红灯。
适合用它干哪些活?(真的能省时间那种)
这套离线控屏最香的场景是:
- 每天都要在多个系统之间搬数据:网页 → Excel → IM → 邮件
- 批量处理:改文件名、导出报表、重复填表
- 盯着屏幕点鼠标的脏活:复制粘贴、点菜单、翻页检查
你给它一句话,它帮你把“机械动作”做了。
你只要盯关键节点:做对没、有没有越权。
避坑清单(血压飙升预警 😅)
- 别让模型直接执行危险动作:删除、转账、群发、覆盖文件。
- 做权限闸门:高风险动作必须二次确认。
- 坐标会漂:分辨率变化、窗口没激活、DPI 缩放都会让点位偏掉。
- 解决:点击前先把目标应用激活;尽量用 UI 元素定位而不是绝对坐标。
- 模型会“自信胡说”:明明没找到按钮,它也能编个位置。
- 解决:让 Moondream 返回置信度;低于阈值就改用滚动/搜索/快捷键。
- 输入法坑:中文输入法状态切换会导致输入乱码。
- 解决:统一用英文输入,或每次输入前强制切输入法。
- 页面动态加载:按钮位置会跳。
- 解决:等待页面稳定(固定等待 + 视觉检测“加载中”消失)。
你可以怎么升级:从“能用”到“很好用”
想玩得更爽,可以加这些模块:
- 记忆层:记录你常用应用的打开方式、常用按钮的相对位置。
- 任务模板:把“日报生成”“发票整理”“竞品数据抓取”存成一键指令。
- 多模态校验:Moondream 找到元素后,用 OCR 再验一次文字,避免点错。
- 回放系统:每次执行把步骤录成脚本,下次直接复用,不用再推理。
一个很现实的结论
当本地小模型组合起来,能比云端大模型更快、更稳、更不泄露数据,“AI 一定要在云端”这话就站不住了。
你的电脑也不用再当工具了。
它可以当个真正的助手:你动嘴,它动手。