AI 智能体

MoCli具备视觉指向功能的AI桌面助手

阿瑞
2026-04-12
104 阅读
热度 107
MoCli具备视觉指向功能的AI桌面助手




MoCli Logo

MoCli

AI‑Powered Desktop Companion with Visual Pointing


📖 简介

MoCli 是一个运行在 Windows 桌面上的 AI 伴侣助手。它以一个优雅的三角形光标驻留在屏幕上,通过语音唤醒或系统托盘与用户交互。

MoCli 能看到你的屏幕、听到你的声音、理解你的意图,并用自然语言回答问题——还能精准地将光标飞向屏幕上的任何元素来指引你。

✨ 核心能力

  • 🎯 视觉指向 — 结合 VLM(视觉语言模型)截屏分析,三角形光标会飞向 AI 识别到的目标位置
  • 🗣️ 语音唤醒 — 说出唤醒词(默认"贾维斯")即可开始对话,无需动手
  • 🎤 语音识别 (STT) — 基于 SenseVoice 离线语音转文字,隐私安全
  • 🔊 语音合成 (TTS) — 对接本地 TTS 服务,AI 回复自动朗读
  • 🌀 状态可视化 — 聆听时绿色呼吸圆球,思考时紫色呼吸圆球,待机时静默三角形
  • ⚙️ Win11 风格设置面板 — Fluent Design 三栏标签页,支持实时光标坐标显示与定点测试

🏗️ 项目架构

MoCli 采用模块化架构,每个文件职责单一、松耦合:

MoCli/
├── main.py          # 程序入口 — 模块组装、信号编排、VoiceManager
├── settings.py      # 配置管理 — DBManager(SQLite) + 设置面板 + 系统托盘
├── triangle.py      # 三角形光标 — 弹簧物理跟随 + 飞行动画 + 呼吸状态
├── screen.py        # 屏幕截图 — 无损物理像素截屏 + Base64 编码
├── llm.py           # 大模型引擎 — Prompt 构建 + 多模态请求 + 坐标解析
├── wakeup.py        # 语音唤醒 — sherpa-onnx KWS 关键词检测
├── stt.py           # 语音识别 — SenseVoice 离线推理 + WebRTC VAD
├── tts.py           # 语音合成 — aiohttp 异步流式 PCM 播放
├── system_prompt.md # 系统提示词(只读参考)
├── requirements.txt # Python 依赖清单
└── mocli.db         # SQLite 配置数据库(自动生成)

数据流

语音唤醒 ──→ STT识别 ──→ 截屏+构建Prompt ──→ VLM推理 ──→ 解析回复
                                                            │
                              ┌────────────────────────────┤
                              ↓              ↓              ↓
                         气泡显示       光标飞行指向      TTS朗读

🚀 快速开始

环境要求

项目 要求
操作系统 Windows 10 / 11
Python 3.10 或更高版本
VLM 服务 任何兼容 OpenAI API 的视觉语言模型(如 LM Studio、Ollama)
TTS 服务 本地 TTS HTTP API(可选,如 Qwen3-TTS)
麦克风 支持 16kHz 采样的音频输入设备(语音功能需要)

安装步骤

# 1. 克隆项目
git clone https://github.com/your-repo/mocli.git
cd mocli

# 2. 创建并激活虚拟环境
conda create -p .conda python=3.10 -y
conda activate ./.conda

# 3. 安装依赖
pip install -r requirements.txt

# 4. 下载语音模型(语音功能需要)
# KWS 唤醒模型
# 将 sherpa-onnx-kws-zipformer-wenetspeech-3.3M-2024-01-01 目录放在项目根目录
# STT 识别模型
# 将 sherpa-onnx-sense-voice-zh-en-ja-ko-yue-2024-07-17 目录放在项目根目录

# 5. 启动
python main.py

注意:首次运行会自动创建 mocli.db 配置数据库。语音模型目录不存在时,程序会优雅退化为纯文本模式。


⚙️ 配置说明

所有配置通过系统托盘 → 右键 → 设置进入 Win11 风格的设置面板管理。

🧠 大模型 Tab

配置项 说明 默认值
Base URL VLM API 端点 http://127.0.0.1:1234/v1/chat/completions
模型名称 模型标识符 microsoft_fara-7b
API Key 认证密钥 lm-studio

🗣️ 语音 Tab

配置项 说明 默认值
启用语音唤醒 KWS 开关 ✅ 开启
唤醒词 触发词 贾维斯
启用语音回复 TTS 开关 ✅ 开启
TTS 服务地址 TTS API URL http://localhost:8100/v1/audio/speech
TTS 模型 TTS 模型名 model-base

⚙️ 高级 Tab

配置项 说明
实时光标位置 显示鼠标当前物理像素坐标 (50ms 刷新)
定点测试 输入归一化坐标 (0-1000) 测试光标飞行精度,停留 15 秒
全局偏移量 归一化偏移补偿 (0-1000),应用于所有 AI 指向动作
对话记忆 滑动条调节短时记忆条数 (2-50)
系统提示词 只读预览当前 Prompt

🎯 视觉定位系统

MoCli 使用 0-1000 归一化坐标系 进行视觉定位,这是当前主流 VLM 最擅长的定位方式:

┌──────────────────────────┐
│ (0,0)          (1000,0)  │
│                          │
│        (500,500)         │  ← 屏幕正中央
│                          │
│ (0,1000)      (1000,1000)│
└──────────────────────────┘

换算公式

物理像素 X = ((归一化X + 偏移X) / 1000) × 屏幕宽度
物理像素 Y = ((归一化Y + 偏移Y) / 1000) × 屏幕高度

示例:屏幕 2560×1600,AI 返回 [POINT:500,500:目标],偏移量 (0,0)
→ 物理坐标 = (1280, 800) = 屏幕正中央 ✅

支持的模型

模型 归一化坐标支持
Claude 3.5 Sonnet ⭐ 官方推荐 0-1000
Gemini 1.5 Pro ⭐ 原生支持
Qwen-VL 系列 ✅ 训练数据含归一化标注
其他 OpenAI 兼容 VLM ✅ 通过 Prompt 引导

🎨 光标状态可视化

三角形光标会根据 MoCli 的工作状态自动变换形状和颜色:

状态 形状 颜色 动效
待机 🔺 三角形 暗灰 #282C34 弹簧跟随鼠标
聆听中 🟢 圆形 绿色 #00DC64 呼吸缩放 + 透明度脉动
思考中 🟣 圆形 紫色 #A032FF 呼吸缩放 + 透明度脉动
AI 飞行 🔺 三角形 青色 #00C8FF InOutQuad 缓动飞行
文本输入 🔺 三角形 橙色 #FFAA00 静止

📁 语音模型目录结构

MoCli/
├── sherpa-onnx-kws-zipformer-wenetspeech-3.3M-2024-01-01/
│   ├── encoder-epoch-99-avg-1-chunk-16-left-64.onnx
│   ├── decoder-epoch-99-avg-1-chunk-16-left-64.onnx
│   ├── joiner-epoch-99-avg-1-chunk-16-left-64.onnx
│   └── tokens.txt
│
└── sherpa-onnx-sense-voice-zh-en-ja-ko-yue-2024-07-17/
    ├── model.int8.onnx
    └── tokens.txt

模型可从 sherpa-onnx 官方仓库 获取。


🔧 技术细节

并发模型

MoCli 采用 方案 A:共享 asyncio 事件循环。wakeup、stt、tts 三个子系统在同一个后台线程的 asyncio 循环中运行,通过 asyncio.Queue 共享音频数据,降低线程切换开销。

DPI 处理

强制设置环境变量 QT_AUTO_SCREEN_SCALE_FACTOR=0,确保截屏坐标与 Qt 窗口坐标 1:1 对齐,避免高 DPI 屏幕下的偏移。

跨线程安全

所有后台线程(AI 请求、语音引擎)通过 pyqtSignal 信号桥与 Qt 主线程通信,避免直接操作 Widget 导致的线程死锁。

配置持久化

使用 SQLite 键值对数据库 (mocli.db),所有配置修改即时生效,无需重启。


📋 依赖清单

包名 用途
PyQt6 GUI 框架、系统托盘、动画引擎
requests VLM API HTTP 请求
Pillow 屏幕截图与图像编码
numpy 音频数据矩阵运算
PyAudio 麦克风采集与扬声器播放
sherpa-onnx KWS 语音唤醒 + SenseVoice STT
webrtcvad 语音活动端点检测 (VAD)
aiohttp TTS 异步流式 HTTP 请求

🐛 常见问题


Q: 启动后没有三角形光标?

确保以管理员权限运行终端。MoCli 需要系统级权限来创建置顶透明窗口。

Q: 语音唤醒不工作?
  1. 检查麦克风设备是否被其他应用占用
  2. 确认 KWS 模型目录 sherpa-onnx-kws-zipformer-wenetspeech-3.3M-2024-01-01 存在
  3. 检查设置面板中"启用语音唤醒"是否开启
Q: TTS 没有声音?
  1. 确认本地 TTS 服务已启动并监听正确端口
  2. 在设置 → 语音 Tab 中检查 TTS 服务地址和模型名
  3. 确认"启用语音回复"开关已开启
Q: 光标指向位置不准确?
  1. 在设置 → 高级 Tab 中使用定点测试验证精度(输入 500,500 应飞向屏幕正中央)
  2. 如果存在系统性偏移,调整全局偏移量进行补偿
  3. 确保没有使用 Windows 的显示缩放(推荐 100%)
Q: webrtcvad 安装失败?

确保 setuptools 版本低于 71:

pip install "setuptools<71"
pip install webrtcvad



📄 开源协议

本项目基于 MIT License 开源。

许可协议:知识共享声明

本站所有原创文章应用 CC BY-NC-SA 4.0 协议。转载请注明作者及出处,且不可用于商业目的。

免责声明

本站提供的所有资源仅供学习与学术研究参考。请于下载后 24 小时内自觉删除。如有侵权,请通过留言或反馈通道告知,我们将在收到通知后立即进行处理。

互动评论

登录后参与精彩讨论

资源下载

获取权限
¥299/ 永久有效
大小:260MB
版本:V2.0.1
浏览次数 104
最近售出 0
近期推荐
暂无推荐
Admin

阿瑞 (RUI)

SHUMOX FOUNDER

专注前端架构、React 生态与独立开发变现。分享最硬核的技术实战经验。

Gemini

Gemini

Powered byGoogle

本站由 Google DeepMind 的 Gemini 模型全栈构建。
探索人机协作开发的无限可能。

100% AI Generated Code

订阅周刊

每周一发布,分享最新的技术动态、设计灵感和独立开发经验。

© 2026 Shumox. All Rights Reserved.

苏ICP备2023001297号