1、基础原理
Hawa Code computer MCP 提供 computer 操作工具 ,Agent 通过截屏分析当前的 UI 元素,进行鼠标点击、快捷键、文本输出等操作,从而可以控制电脑。
2、核心工具
- key: 按下键盘上的某个键或组合键。
- type: 通过键盘输入一段文本。
- get_cursor_position: 获取光标当前在屏幕上的 (x, y) 像素坐标。
- mouse_move: 将光标移动到指定的 (x, y) 像素坐标。
- left_click: 点击鼠标左键。如果提供了坐标,会先移动到该位置。
- left_click_drag: 按住鼠标左键并拖动光标到指定的 (x, y) 像素坐标。
- right_click: 点击鼠标右键。如果提供了坐标,会先移动到该位置。
- middle_click: 点击鼠标中键。如果提供了坐标,会先移动到该位置。
- double_click: 双击鼠标左键。如果提供了坐标,会先移动到该位置。
- scroll: 向指定方向滚动屏幕。需要提供坐标(先移动到该位置)和 text 参数指定方向:"up"、"down"、"left" 或 "right"。可追加 ":N" 指定滚动像素数(默认 300),例如 "down:500"。
- get_screenshot: 截取屏幕截图。
- click_element: 点击上一次 get_screenshot 返回的 \`elements\` 列表中的元素,通过 \`text\` 参数传入元素 id
2、文字输入
通过框架直接输入文字效率低,文字输入统一改成了从剪切板进行复制。
3、截屏
模型通过截屏是了解当前系统操作界面主要手段,需要注意以下事项:
- 图片的分辨率要满足不同的模型对要求,同时也要考虑传输性能和成本。
- 不同模型对于图像内容元素坐标识别准确度不同,要给予不同的手段提高模型坐标识准确性,这样模拟鼠标点击时候才会执行成功。
3.1 缩放
不同的模型对图片的分辨率大小都是有要求的,图片的分辨率要小于等于模型的要求,还有就是高的分辨率不一定会提高模型识别的准确性,所以不需要提供模型要求上限分辨率图片,图片大小适中就可以。
如果电脑的分辨率高就要进行缩放,进行缩放的时候要要注意屏幕放大比例,高分辨率屏幕一般是 150%、200% 的缩放比例。
- 图片缩放比例:提交给模型图片分辨率/原始截屏图片分辨率
- 屏幕放大比例:屏幕的物理分辨率/屏幕的逻辑分辨率
模型识别电脑的分辨率为为图片分辨率,鼠标坐标需要进行转换。
鼠标屏幕坐标 = 模型图片坐标 / 图片缩放比例 / 屏幕放大比例。
3.2、Set-of-Mark(SoM)标注
模型进行鼠标点击的流程是获取图片、识别元素在图片中的位置坐标,工具调用进行点击,工具会把图片中的位置坐标转换成屏幕的位置坐标出触发点击事件。流程中模型对于图片中的元素位置识别非常重要,如果模型模型无法准确识别出元素的准确位置,触发的点击位置就是错误的,导致鼠标点击错误。这时候需要开启辅助位置。
提供给模型截图时候,同时标注图片的中的核心元素,比如 提交 button 的坐标和边界位置和id,然后通过 click_element 工具使用 id 进行元素点击,从而提升点击事件有效性。
- GPT5.5、claude-opus-4-7 模型测试图片中的元素坐标准确性高,不需要进行辅助识别。
- kimi 2.6 测试坐标中元素坐标识别准确性低,需要开启辅助识别。
- gpt5.5 模型默认图片为 auto,会进行缩放,应该修改为 origin 。
实现方式如下:
阶段 |
Windows |
macOS |
Linux |
a11y 检测 |
UI Automation (PS) |
AX API via JXA ( ) |
AT-SPI 2 ( ) |
OCR 兜底 |
(PS) |
Vision framework ( ) |
CLI |
依赖 |
内置 |
macOS 内置;OCR 需 Xcode CLT |
、 |
权限 |
无 |
首次需授予辅助功能 |
无 |
3.4、上下文裁切
截图通过 base64 字符传输,体积非常大,但是实际上只对当前屏幕内容有效,如果屏幕的内容发生变化必须进行重新截图,不然就会发生错误。所以截图内容长期在上下文中意义不大。
- 上下文中截图内容只保留最后两次,归档后的图片保存到磁盘上,修改上下文,去掉图片内容,改为图片的磁盘路径,特殊情况需要读取的时候有可以通过 Read 工具进行读取。
- 历史消息存储也把图片放到外部存储,读取历史消息的时候还原为 base64 字符串。
欢迎大家了解使用 Hawa Code