QCU 2.0.0:补齐 Windows、Linux 与 GNOME Wayland

QCU 2.0.0:补齐 Windows、Linux 与 GNOME Wayland

最近,我把 QCU 的一轮跨平台更新整理到了 2.0.0:Windows 的入口兼容、UIA 控件操作、原生窗口截图和鼠标键盘后备,Linux 的 AT-SPI2 与 X11 通道,以及 GNOME Wayland 的原生截图和输入,都已经有了对应实现与测试记录。

这轮完善沿用了 QCU 的核心原则:优先读取结构化控件,使用明确的目标引用执行操作,再读回结果;需要原生输入或截图时,再显式启用对应通道。 常驻进程、精简观察、缓存查询、批量执行这些快速特性,也继续保留。

项目仓库:ergou-yu/quick-computer-use。

本文按 2.0.0 整理功能。这个版本号承接已经验证的 1.11.0 功能基线,本次版本整理没有新增运行时行为或修改动作契约。下文的跨平台功能测试和性能数据保留原始版本、日期与测量口径,方便核验。

一、QCU 的操作机制:先拿到控件,再执行动作

QCU,全称 Quick Computer Use,是给 AI Agent 使用的计算机操作 skill 和配套控制层。它把网页和桌面应用里的按钮、输入框、复选框、列表项等对象整理成结构化信息,让 Agent 根据角色、名称、值和状态定位目标。

在支持的界面上,典型流程是:

text 复制代码
选择浏览器页面或应用窗口
    → observe:读取控件及其 ref
    → act:填写、点击、勾选或选择
    → verify:读回值、状态或结果文本

网页主要通过无障碍信息、DOM 和 CDP 操作;桌面分别对接 macOS AX、Windows UI Automation、Linux AT-SPI2。一次观察返回的 ref 是控件引用,和目标、后端生命周期、观察代次一起绑定。

例如,填写一个中文输入框时,QCU 可以直接调用控件的文本接口,然后读回完整字符串。提交表单时,可以在点击后检查结果文本是否变成 Saved 1。在这些路径上,不需要每一步先截图,再让视觉模型识别按钮位置。

截图仍然有价值:检查界面外观、保存证据,或为显式坐标操作提供依据。2.0.0 完善了这些后备能力,同时保持普通语义操作独立运行。项目目前没有实现覆盖任意图标、模板和界面的通用 OCR/VLM 定位系统;自绘界面能做到什么,需要结合目标本身验证。

二、从 Windows 到 Wayland,这轮具体补了什么

近期更新分为四步:

阶段 主要完善 对实际使用的影响
1.9.1:Windows 兼容 PowerShell/CMD 入口、UTF-8 JSON 管道、Win32 进程与端口检查 Windows 下可以稳定传递 JSON、中文和引号,复用常驻进程
1.9.2:Windows 原生后备 绑定 HWND 的 PrintWindow/GDI 截图,鼠标、键盘消息输入 UIA 之外增加明确的原生操作入口,截图和动作继续绑定同一窗口
1.10.0:Linux AT-SPI2 控件操作,X11 截图与 XTEST 输入 Linux 桌面获得结构化观察、语义操作及 X11 后备
1.11.0 → 2.0.0 整理 GNOME 46/50 Wayland 原生桥接,统一版本与说明 Wayland 下增加窗口截图和虚拟键鼠输入,保留原有语义路径

Windows:除了能运行,还要能正确控制窗口

Windows 默认使用 UIA 暴露的 Patterns 完成点击、赋值、勾选和选择。原生后备使用已绑定的 HWND:截图返回 PNG、窗口身份、物理像素原点与尺寸;鼠标支持点击、双击、右键、悬停、滚轮和拖动,键盘支持已实现的命名按键与文字输入。

入口也做了适配。PowerShell 5.1 可以通过 act -、batch - 的标准输入传 JSON,减少引号和中文编码问题;源码入口优先使用匹配的 pythonw,避免弹出控制台影响目标窗口焦点。进程存活和 CDP 端口归属通过 Win32 API 查询,减少启动外部命令的开销。

这里有一个必须说明的区别:本轮真机验证通过的默认原生输入是 HWND 消息通道。 另一个显式可选的 SendInput 通道,曾在测试机上返回接受事件,但没有观察到预期界面结果,因此仍记为结果未知,不能写成所有物理输入都已验证成功。

Linux:语义操作、X11 和 Wayland 各有明确入口

Linux 的日常控件操作通过 AT-SPI2 完成,包括读取控件、填写文本、勾选、选择以及可用的控件动作。后端运行在常驻 worker 中,普通语义操作无需加载 X11 或 Wayland 原生适配器。

X11 后备会把 AT-SPI 目标关联到唯一的客户端窗口,使用窗口截图和 XTEST 输入。GNOME Wayland 则通过随包提供、需要用户显式安装并启用的扩展,与 GNOME Shell/Mutter 建立常驻 D-Bus 连接,获取目标窗口截图并使用虚拟输入设备。

Wayland 的一个实际难点是坐标:应用提供的 SCREEN 坐标不能直接假定为可靠的全局位置。QCU 的 GNOME 原生引用会读取窗口内的实时控件位置,再通过 Mutter 的窗口信息换算;截图也返回像素尺寸、逻辑坐标原点和缩放比例。窗口移动之后,需要更新这些信息。

当前宣布支持的原生 Wayland 环境是 GNOME 46 与 GNOME 50。KDE、Sway、Hyprland 等环境还没有对应原生适配器;其中应用暴露出来的 AT-SPI 语义能力,仍可按实际情况使用。

当前功能覆盖

场景 主要路径 使用前提或边界
网页 无障碍信息、DOM/CDP、ref 操作、条件验证、batch 使用明确的页面目标;QCU 自有浏览器 profile 不继承用户已登录的标签页
Electron/CEF 显式 desktop_cdp 桥 目标应用需要提供可连接的调试端点,并准确绑定对应页面
自有 WKWebView 应用 desktop_jsbridge 应用所有者嵌入桥接代码后使用
macOS 桌面 desktop_ax 需要对应系统权限;本轮没有重新完成 macOS 真机测试
Windows 桌面 desktop_uia,按需 HWND 截图与输入 依赖控件 provider;安全桌面等场景不在支持范围内
Linux X11 AT-SPI2,按需 X11/XTEST 需要桌面会话、系统 GI/AT-SPI 和相应依赖
GNOME Wayland AT-SPI2,按需 GNOME 原生桥 GNOME 46/50,原生能力需显式启用扩展

这些入口的共同目标,是保留用户选择的应用、窗口或页面。目标缺失或匹配不唯一时,QCU 会返回诊断信息。

三、补齐后备通道,怎样保留快速特性

QCU 的速度主要来自减少控制过程中的重复工作。

常驻 daemon 和 worker 复用连接与状态。 浏览器、桌面后端和 GNOME D-Bus 连接可以在会话内继续使用;GNOME 虚拟键鼠首次绑定时等待设备就绪,后续复用,不为每个输入事件重新启动子进程。

精简观察和缓存查询减少重复读取。 --compact 压缩返回内容,find、inspect 可以查询已经得到的观察结果。缓存用于定位线索,引用失效后仍需重新观察。

batch 减少跨进程往返。 当前批量接口允许 1---32 个动作,主要组合是若干次填写,再接一个最终动作;也可以在结束后返回一次精简观察。遇到失败或结果未知会停止。提交按钮应提供明确的后置条件,保证批量执行的终点可验证。

语义操作和原生后备按需加载。 普通控件填写、点击不会因为增加了截图功能,就被迫增加一次截图、OCR 或固定动作等待。等待由条件和限时轮询控制;操作仍可能等待应用更新或后端响应,不能据此理解为所有动作都没有等待。

对 Agent 来说,这些设计减少了重复观察、重复传输和命令往返。最终任务耗时还包括模型推理、应用响应、网络和验证,具体收益要按场景测量。

四、测试到底验证到了哪一层

跨平台原生流程主要完成于 2026 年 10 月 15 日 ;版本调整后,又在 10 月 16 日完成了 2.0.0 的本地 Windows 回归。Windows 原生流程在实际交互桌面上执行;Linux 流程在真实桌面组件构成的虚拟环境中执行。两者需要分开理解。

测试项目 环境与结果 证据范围
Linux 完整回归,1.11.0 783 passed、10 skipped,27.21 秒 回归套件,包含多种测试类型;平台流程另列
Windows 完整回归,2.0.0,10 月 16 日 792 passed、1 skipped,60.15 秒 包含真实 Chromium/CDP 及 portable contract/mock;不等于 792 个真机界面场景
GNOME 46 Wayland Ubuntu 24.04、GNOME 46.2、Python 3.12.3;29 条记录命令,完整流程通过 实际 Shell/Mutter、GTK3、AT-SPI2 的 headless 集成
GNOME 50 Wayland Ubuntu 26.04、GNOME 50.1、Python 3.14.4;29 条记录命令,完整流程通过 同上;完整成功流程使用下文说明的临时桌面设置
GNOME 46 容器对照 Ubuntu 24.04;29 条记录命令,完整流程通过 补充环境对照
X11 回归 GTK、Xvfb、Openbox;25 条记录命令,完整流程通过 实际 X11 虚拟桌面流程
GNOME JS 故障边界 12 项通过 mock host,单独计数

Windows 1.9.2 的原生真机记录还包括:26 条 CLI 命令的原生流程,以及原有 UIA 的 6 项直接检查、16 条 CLI 命令回归。测试环境为 Windows 10 build 19045、Python 3.12,使用一次性 WinForms 窗口和独立 Chromium profile。

2.0.0 的版本检查确认 Python、PowerShell 和 CMD 入口均报告 qcu 2.0.0,项目声明、锁文件与 wheel 元数据一致,GNOME 扩展资源包含在 wheel 内,skill 格式校验通过。Linux 和 GNOME 的功能、性能证据沿用 1.11.0 原始记录。

这些命令数包含预期拒绝、诊断和清理。比如旧引用被拒绝,本身就是符合预期的结果;没有单独设置后置条件的 Ctrl+A、End,只能记录已发送、结果未知。不能把命令数直接当成业务成功次数,也不能把两个平台的回归数量相加后当成独立功能数。

GNOME 测试中 DISPLAY 未设置,GTK 使用 Wayland,合成器禁用 XWayland。实际经过了 GNOME Shell、Mutter、D-Bus、AT-SPI 和应用进程,不过它仍是虚拟桌面集成测试,尚未完成物理 Linux 桌面验证。

完整记录见项目测试报告、GNOME 三环境运行和Linux/X11 回归运行。

实际跑出来的效果

GTK 测试从读取控件开始,把 Linux 中文 🚀 写入输入框,并通过 AT-SPI 读回确认;随后完成勾选和列表选择。batch 一次填写两个字段并点击保存,检查结果文本变为 Saved 1。

显式启用原生操作后,测试继续完成保存按钮点击、F6、悬停、右键、双击、滚轮和拖动,并检查对应结果。实际 GNOME 50 截图中能看到 Batch 中文 追加🚀、上海、勾选状态、被选中的 Item,以及 Saved 2 等界面状态,和结构化读回结果对应。

测试还移动了窗口,重新检查截图坐标原点与后续原生引用操作;停用 GNOME 扩展后,原生请求被拒绝,AT-SPI 语义填写继续成功。重新启用扩展后,旧原生实例绑定也会失效,需要重新建立。

这说明,在这组标准 GTK 控件和受控环境中,语义操作、原生输入、截图和结果验证能够衔接起来。证据覆盖的是这些明确场景,复杂业务软件的覆盖程度还需要继续扩展。

五、速度数据:区分任务总耗时和后端耗时

1. 六字段网页表单:batch 的收益已经有量化结果

Windows 1.9.2 使用同一个六字段网页表单,分别测试静态页面和持续联网页面。每个场景、每种模式各跑 3 轮,共 12 个任务成功。统计范围为观察、填写、提交和验证的 CLI 总耗时,排除导航、冷启动和模型推理。

场景 QCU 逐条调用中位数 QCU batch 中位数 中位耗时比 CLI 调用数
静态网页 3858 ms 1231 ms 约 3.14× 9 → 3
持续联网页面 3574 ms 3091 ms 约 1.16× 9 → 3

静态页面里,减少调用往返的收益比较明显,整段操作从约 3.86 秒降到约 1.23 秒。静态页面的输出字节中位数也从 47,991 降到 17,895,减少约 63%。

持续联网页面上的改善小得多:两轮 batch 的点击/验证阶段出现约 1.9 秒等待,具体原因尚未确定。原始记录保留了这部分抖动,因此不能只取最快一次来描述效果。

3.14× 是 QCU 内部逐条调用与 batch 的小样本对比。 本轮没有与另一套常规 computer use 在相同模型、机器和任务下进行完整对照,不能写成"QCU 普遍比其他 computer use 快 3 倍"。

2. GNOME Wayland:后端动作进入几十毫秒量级

下面是 1.11.0 最终虚拟桌面流程中的单次样本,单位均为毫秒:

操作 GNOME 46 后端耗时 GNOME 50 后端耗时
语义 fill,含读回 28.06 22.74
toggle,含状态验证 8.57 17.93
select,含状态验证 6.24 8.97
batch:两次填写、一次点击及观察 66.78 50.09
原生点击,含结果读回 35.89 58.74
原生 F6,含结果读回 32.88 25.91
原生拖动,含结果读回 24.83 19.86
两次目标窗口 PNG 截图 41.20 / 24.62 39.11 / 20.07

后端耗时不包含完整 CLI 进程成本。上表 batch 的完整 CLI 耗时,GNOME 46 为 172.95 ms ,GNOME 50 为 148.46 ms;语义 fill 的完整 CLI 耗时则分别为 132.78 ms、120.78 ms。模型推理仍然不在这些数字里。

这组数据说明,在本次标准控件场景中,常驻后端能够以较低开销完成动作和读回,新增 Wayland 后备也没有要求普通填写经过截图流程。它是小样本结果,尚不能推导复杂应用的 P95 延迟、长任务成功率,或不同桌面之间的普遍性能排名。

对应原始 JSON、PNG 和日志可从 GNOME 46 测试产物、GNOME 50 测试产物核验;Actions 产物受保留期限和访问权限限制。

六、完善程度,也体现在失败时能说明发生了什么

QCU 分开报告输入派发状态 dispatch_state 和结果状态 outcome。API 接受了请求,只能说明到了某个派发阶段;指定的文本、值或选中状态满足条件,才会得到 outcome: verified。

这在批量提交时尤其重要。填写两项以后点击保存,如果结果没有确认,batch 会停止,避免继续执行依赖保存成功的后续动作。已经发送或发送情况不确定的输入,也不会自动换一个通道重发。

引用和目标绑定同样如此。重新观察、切换目标或后端重启后,旧 ref 会失效;QCU 不会把它转换成之前缓存的坐标继续点击。原生输入还会检查前台、焦点、遮挡和当前几何信息,GNOME 桥也会检查 Shell 状态与窗口身份。

这些机制带来的实际效果,是更容易区分"目标没找到""动作没有发送""动作发送了但结果不确定"和"目标状态已确认"。Agent 可以据此决定重新观察、补充验证或停止,减少把未确认的结果继续传递下去。

QCU 2.0.0 把结构化操作扩展到了更多桌面环境,也让截图、原生输入和结果验证之间的关系更清楚了。接下来值得继续投入的是物理 Linux 桌面、多显示器与缩放组合、更多实际应用,以及相同条件下更大样本的端到端对比。这些验证会决定它能在哪些任务上稳定节省时间,也会让后续的效果描述更有依据。

相关推荐
Lv_沐曦1 小时前
Linux 上的Web文件管理器-filebrowser
linux·运维·服务器
闲云自留地1 小时前
CentOS 搬 Ubuntu 24.04:yum 变 apt、防火墙、SELinux、root 全差异避坑
linux·ubuntu·centos
科技每日热闻1 小时前
电气设备综合维保服务商怎么选?从预防性维护到数字化运维,看懂五个关键能力——企业选择维保合作伙伴,不能只看“坏了能不能修”,更要看能否覆盖资产与系统的长期运营
大数据·运维·人工智能
唐钰小宝B1 小时前
深度解读 JDK 8、JDK 11、JDK 17 和 JDK 21 的区别
java·开发语言·windows
最强小杰2 小时前
Claude Opus 4.8 调用报 529 怎么办?并发限制触发过载——退避策略与降级方案完整指南
运维·网络·python·ai
wang_yb2 小时前
MinMax vs Standard vs Robust:三种特征缩放怎么选
ai·数据分析·databook
Autumn_ing2 小时前
AI Agent工作台能做什么?一个产研任务从资料到交付怎么走
ai·agent·产品经理·墨刀·ai agent·prd·墨刀ai客户端
我科绝伦(Huanhuan Zhou)2 小时前
磐维数据库(PanWeiDB)日常运维命令总结
运维·数据库