让智能体看图自查:观察、行动、验证、修正要写成状态机|洹拓科技

一、四步本身不新,难的是把它写成一台状态机
据公开报道,某团队开源了一款视觉语言模型的两种精度版本,标注了总参数与单次推理激活参数两个口径,主打在前端开发、界面自动化和专业报告类图像的辅助解读三类任务里,通过视觉反馈反复执行观察、行动、验证、修正;演示中它能读截图、生成前端代码,再拿渲染结果和原图比对。参数口径与演示效果都不作为本篇的判断依据。工程上要问的只有两句:验证那一步拿什么判,这台机器什么时候停。
观察、行动、验证、修正这四步在自动化领域不新,新的是模型自己承担了三步——它既生成动作,又解读画面,又决定下一轮改什么。写成一串流程脚本和写成一台状态机是两件事。脚本跑完只留下成功或失败;状态机的每一轮都留下“当时看到什么、按什么标准判的、判分是多少、下一轮打算做什么”。差别在能不能复盘:回路一旦能自我修正,出错的位置就不再是某一行代码,而是某一轮的某个判定。
状态集合要显式列出来:取图、构造动作、执行动作、取回结果、分层比对、判定、继续或终止或转人工。转移规则要写成硬条件——只有比对结果落在容差之外,且四项停止条件一条都没触发,才允许进入下一轮。这一句是防止回路退化成反复试错的关键:没有谓词的循环,只会把预算烧在同一个错误上。
二、验证要分三层,每层给可判定的量和容差
比对标准写不成一句“和原图一致”,要拆成三层,各给度量。
结构层,管元素存在与层级。度量项:目标控件是否出现在控件树或可访问性树里、父子关系是否符合预期、是否处于可交互状态。这一层不给容差,按存在与否硬判;不可见的节点不能算存在。
几何层,管位置、尺寸与间距。度量项:包围盒中心偏移、宽高偏差、相邻元素间距偏差。容差要给相对量而不是绝对像素,比如按画布短边的百分比给出,否则换一次分辨率整批用例全废。关键控件单独设更严一档,普通装饰元素可以放宽。
表意层,管可读文本与控件语义。度量项:可见文本字符串比对,比对前要做归一化——全角半角、空白与软换行、标点形态;图标按钮的无障碍名;状态的呈现,比如选中与禁用是否可辨。
为什么不能拿像素比对当主判据:字体渲染差异、抗锯齿与次像素定位、滚动条与焦点环、动态内容里的时间戳与计数器,都会让逐像素差产生大量假失败,回路于是反复“修”一个根本不是问题的地方。像素比对的合理位置是兜底信号,用一个差异面积占比触发人工复核,而不是直接判定成功或失败。三层比对的顺序也有讲究:结构层没过就不该进几何层,几何层没过不该进表意层,越靠后越贵。
三、停止条件要写四项,缺一项就开始烧预算
- 最大轮数与单任务成本上限。两条要同时设:轮数控制最坏情况,成本上限控制总量,因为一轮的开销随输入图像与上下文长度差别很大。
- 连续两轮无改善即停。“改善”必须有量化定义,按三层得分向量判——几何层误差没下降、结构层缺失项没减少,就记作无改善。靠人看截图判断有没有进步,是这类回路最常见的隐性故障源。
- 达到容差即停,且达标也要落盘。静默成功是事故温床:达标那一轮的比对向量、动作序列和快照标识都要留下,否则线上出问题时没有正向样本可以对照。
- 触发黑名单动作即停并转人工。删除、提交、支付、发送、权限授予、对外发布这一类不可逆动作不进自动重试。黑名单要写成动作级别的清单,由执行环境拦截,而不是指望模型自觉。
四项里最容易漏的是第三项与第四项的顺序:达标即停要早于黑名单判定,否则一个已经做对的任务还会因为最后一步不可逆动作被卡住。
四、每轮必须落盘的留证字段
没有这些字段,你无法定位是哪一步在退化,只能重跑碰运气。
| 字段 | 记什么 | 少了它会发生什么 |
|---|---|---|
| 输入截图标识 | 图像指纹、来源页面、采集时刻的会话标识 | 分不清模型看到的和工程师看到的是同一张图 |
| 模型版本与精度 | 版本号、精度档位、采样参数 | 同一用例两次结果不同,找不到变量 |
| 当轮动作序列 | 动作类型、目标寻址方式、参数、执行返回 | 无法区分“没执行”和“执行了但判错” |
| 比对得分向量 | 三层各自的得分与容差判定结果 | 无改善即停的判定没有依据 |
| 失败假设 | 模型对当轮失败的归因文本 | 看不出归因是否一直在同一个错误上打转 |
| 下一轮计划 | 准备改什么、为什么这样改 | 复盘时分不清是策略错还是执行错 |
| 前后状态快照标识 | 动作执行前后的环境状态引用 | 只能用画面推断状态,把中间态当完成态 |
留证字段要按轮存,不是按任务存一条最终结果。按轮存的成本不高,价值出在回放:能重现某轮的判定输入,才算得上可审计。
五、三类任务的失败模式不一样,别用一套验收
前端代码生成:典型失败是绝对定位与响应式带来的“看起来对但不可用”。桌面视口下比对通过,窄屏、页面缩放、系统字体放大三类变化一来就散架。处置是把同一用例在多视口下各跑一次,把几何层容差按视口分别设定。
界面自动化:典型失败有两类。弹窗与权限提示会打断序列,回路会把提示当成界面的一部分去适配;坐标点击不幂等,重试一次等于真的多点了一次。所以寻址要优先走控件标识,坐标只作最后手段;重试前必须先判状态是否已推进,否则自查回路会放大事故。
专业报告类图像的辅助解读:这一类的失败最隐蔽。模型会把图上的标注——箭头、圈画、示意文字——误读成结论本身;会误读单位与刻度,把比例轴、对数轴或带缩放的比例尺按表面数字读。工程处置是把图上标注显式列为干扰源,输出限定为待复核摘录,任何数值结论必须附来源区域定位。它的产物是给人核对的线索,不能直接当作诊断意见或业务结论使用,这条要写进接口定义,不能只写在文档里。
三类任务共用的一条是前后状态快照。只靠看图判断成功,会把页面加载的中间态当成完成态;要在执行环境里取动作前后的状态——控件树、关键地址或记录标识、会话标识——先判“预期变化是否发生”,再叠加视觉比对。视觉一致不等于状态推进。
六、成本先掐住,再谈能力
回路的预算消耗比单次生成大得多,四招要同时用:比对用小分辨率,结构层与几何层不需要原始像素密度;只在失败时请求高分辨率截图,用于表意层与人工复核;缓存未变化区域的裁剪,别每轮把整张图重编码一遍;按层短路,前一层没过不进下一层。
在洹拓接这类任务时,我们给团队的最小验收表是三档:十类页面形态、二十个操作、五个异常态。页面形态覆盖表单、列表、详情、弹层、图表页等;操作覆盖输入、选择、提交、撤销、跳转;异常态必须包含加载未完成、权限弹窗、目标元素缺失、超长内容与渲染服务不可用。每一条用例逐项记录三件事:轮数分布、成功率、转人工率。
三项里最该看的是转人工率而不是成功率。成功率只说明这一版用例跑通了,转人工率说明这套回路在替谁兜底。回路能自我修正并不自动等于能无人值守,把它写成状态机、给足停止条件和留证字段,是为了让人在需要介入的时候,能在三分钟内看清它在哪一步、为什么停。