桃子桃子快讯
返回首页
工具

REFLEX:录制一次即可重放 GUI 操作,全程零 LLM 调用

REFLEX 通过屏幕录制与 OpenCV 模板匹配实现 GUI 工作流重放,在随机化界面下达到接近 100% 准确率,…

2026.08.10 · 周一5 分钟阅读

REFLEX 是一个用 Python 编写的开源 GUI 自动化工具,核心思路是把人类演示一次录制下来,编译成「视觉状态机」,然后依靠 OpenCV 模板匹配在界面变化后照样重放,全程不调用任何大模型。它把自己定位在传统 RPA 与当下「computer-use agent」之间:RPA 重放速度极快但界面一变动就崩,而基于 LLM 的 GUI agent 每点一下都要付一次模型调用,既慢又贵且不稳定;REFLEX 想用录制 + 视觉匹配的方式保留确定性、压低成本。

录制—编译—重放三段流程

整个工作流分四步:

  • 录制:通过 mss 构建约 12fps 的屏幕环形缓冲,配合 pynput 的全局输入钩子,把一次人工演示抓成「帧 + 操作」的序列。
  • 编译:每一次点击都被建模为一个状态(state),记录「目标裁剪区、紧致带、上下文裁剪区、紧贴光标的标签条」等局部画面;坐标不存为真值,「裁剪出来的图」才是真值。
  • 重放:在实时屏幕上做 OpenCV 模板匹配(金字塔搜索),命中后再点击,并校验屏幕是否真的发生了变化;若超时则进入 BLOCKED 状态——运行时宁可停下来也不猜。
  • 修复(原型):BLOCKED 的运行被打包成精简修复包,只调用模型一次拿到修复方案,验证成功后写入技能的新版本,避免同类异常再次消耗模型调用。

基准结果:随机化界面下近 100% 命中

作者用两个实验验证鲁棒性。第一个是自带的 Tkinter Mock 应用(reflex/mock_app.py),每次启动都会随机化窗口位置、行顺序、强调色、转圈动画时长,并写下地面对数(ground-truth log)用于对账。在 100 次无人值守的「演示 → 编译 → 随机化重启 → 重放」循环中:

  • 完美命中(字段全对、行顺序对、最终 DONE):100
  • 错填(文本进错字段):0
  • BLOCKED(诚实拒绝、不乱填):0
  • 崩溃:0

中位重放时间 6.5 秒,演示耗时 14.4 秒,每次重放的 LLM 调用数为 0。

第二个实验针对真实 Chrome 标签页(一次性 Profile),每次重放都会随机化窗口位置和表单字段顺序,以 document.title 暴露的真实文本作为 ground truth。30 次重复中 1 次因演示本身无效被剔除(DEMO-INVALID),其余 29 次全部 PERFECT。

匹配规则是「失败驱动」出来的

matcher.py 里每一条规则都对应一次被实测捕获的失败,作者把这条「问题 → 解法」的链路列得很完整:

  • 变化检测统计「移动过的像素数」而不是平均像素差:一次菜单弹出只改动了 0.2% 的屏幕,平均差曾误判为「无变化」。
  • 无特征的裁剪区会被拒绝匹配,而不是盲目给出高置信度:曾出现一块空白补丁跨应用匹配另一块空白,置信度 1.0,导致 33 个字符填错窗口。
  • 列表里用「紧致带」优于方形裁剪:行重排会把旧邻居拉进裁剪区,引发 0.81 的虚假置信度。
  • 标签条从光标行穿过、并做全局匹配:三个像素完全相同的空表单字段,只有靠旁边的 label 才能区分。
  • 双胞胎容差(twin margin):最佳匹配必须比次佳高 0.02 以上,否则视为噪声,不做定位。
  • 边域救援使用 Sobel 梯度幅值:随机化强调色会让灰度相关性掉到 0.72–0.85,但梯度结构在换色后仍然稳定。
  • 聚焦点击靠「下一状态的可见文字」验证:1 像素的光标无法被变化检测发现,只有键入真的出现才算数。

此外,每次匹配决定都会写入 diag_find.jsonl 诊断日志,出错时可以一键回放证据链。

运行方式与边界

环境需求为 Windows + Python 3.13+,通过 pip install mss pynput opencv-python numpy 安装。两行命令即可跑通完整流程:python reflex/flow.py 跑单次「演示 → 编译 → 随机化重放 → 评判」,python reflex/bench100.py 跑 100 次无人值守基准(需要空闲桌面)。输入只由 kernel/motor.py 发出,使用 SendInput 走 0–65535 的虚拟桌面坐标并对 DPI 免疫;每次输出前会检查 SAFE_STOP 文件,只要把该文件丢到 journal/ 旁边,所有动作会立刻停下,作为安全开关。

作者也明确列出了几条边界:基准是受控的 Mock 应用而非生产套件,只能算「一个工作流、一台机器」的验证;修复路径仍是原型,没有量化;目前仅支持 Windows(依赖 SendInput 与虚拟桌面坐标);录制质量受演示环境影响,在屏幕剧烈变动时录下来的锚点会更弱。

信源