前言¶
在使用 DeepSeek Harness (DSH) 为视觉模型接入 Windows 桌面控制时,传统基于 UI Automation(可访问性树)的自动化方案在现代应用上表现不佳。Chromium、WebView2 和 Electron 窗口几乎不暴露可访问控件,导致基于树的工具无法读取界面内容。
dsh-computer-use-native 插件通过截图获取真实渲染像素,利用 Win32 FFI 直接驱动窗口,解决了这一痛点。它不依赖可访问性树,默认将输入消息发布到目标窗口队列,保持桌面焦点不被抢占。
是什么¶
这是一个为 Windows 桌面自动化设计的 DSH 插件,专为视觉模型设计。它通过 PrintWindow 和 PW_RENDERFULLCONTENT API 截取真实桌面或窗口像素,将图像输入给模型,再由插件将图像坐标转换为屏幕坐标执行操作。
核心功能¶
插件提供以下工具:
| 工具名称 | 功能 |
|---|---|
computer_screenshot |
截取桌面或指定窗口,返回图像及视口 ID |
computer_window |
列出窗口、读取几何信息或置顶窗口 |
computer_click |
在截图位置点击、双击或右键 |
computer_move |
移动鼠标指针(用于悬停菜单) |
computer_type |
输入 Unicode 文本 |
computer_key |
发送按键或组合键 |
computer_scroll |
在指定位置滚动滚轮 |
computer_drag |
在两点间拖拽 |
技术细节¶
坐标映射¶
模型处理的是截图,截图可能经过缩放。插件通过 viewport 记录图像尺寸、来源屏幕矩形、缩放因子和窗口信息。当模型给出图像坐标时,插件通过视口将图像像素精确还原为屏幕坐标,避免模型因缩放计算失误导致点击偏差。
输入路由¶
所有输入工具支持 dispatch 参数,默认为 background(后台)。
* background:将消息(如 WM_LBUTTONDOWN)直接发布到目标窗口队列,窗口不会被置顶,光标不会移动,不影响当前用户操作。
* foreground:通过模拟真实光标移动和点击来操作,代价更高,且可能打断用户。
性能优化¶
截图成本主要在编码。插件对“看”进行了优化:
* 像素差异比较:将屏幕像素缩小为 32x20 的亮度网格,只有当差异超过 2% 时才视为“变化”并重新截图。
* 无变化复用:若屏幕未动,插件直接复用之前的视口,不发送图像,也不写入附件。首次截图约 238ms,重复截图约 41ms。
安装与启用¶
- 安装插件:
dsh plugin add dsh-computer-use-native
- 安装指定版本(推荐,防止更新后行为改变):
dsh plugin --profile web add github:dao-awa/dsh-computer-use-native#1354d1d1481619c2cc0a5ecccfa8180f1a34452a
- 重要:安装后必须重启 DSH 并开始新会话。Bundles 需要在会话创建前挂载。
前提条件与注意事项¶
- 运行环境:需要 Windows 10 或更高版本(x64),Node.js 22 或更高版本。
- DSH 服务:DSH 实例需启用
computerUse、tools、systemPrompt和attachments服务。 - 模型支持:需要配置一个接受图像输入的模型路由。
- 应用兼容性:由于不使用可访问性树,此方案对现代应用(Chromium、WebView2、Electron)有效,但传统基于树的工具在这些应用上会失效。
- 共存冲突:与
computer-use-win(MCP) 服务器同时使用会造成工具重叠和混淆,建议二选一。 - 权限:插件以当前 DSH 进程权限运行,使用前请检查源码与许可证(MIT)。
总结¶
dsh-computer-use-native 提供了基于像素的 Windows 桌面控制能力,通过视口坐标映射和后台输入分发,在保证准确性的同时降低了交互成本。对于需要视觉模型操作现代 Windows 应用的场景,它是目前可行的技术方案。