这道题本质是在问,怎么把视觉理解和[[RAG]]结合起来,让系统不仅能看懂界面,还能解释每个组件是干嘛的。说白了,就是给AI装上一双眼睛和一本操作手册。
整体流程分三步:先解析截图得到结构化UI表示,然后去知识库里检索相关说明,最后生成自然语言回答。用户可以直接传截图,也可以附带问题,比如“这个按钮点了会怎样”。
先说图像解析模块,这是入口。我会用UI专用的检测模型,比如ScreenSpot或者CogAgent的grounding能力,把按钮、输入框、导航栏这些组件框出来。同时用[[OCR]],比如PaddleOCR,提取里面的文字,然后把位置、类型、文字信息组装成结构化的UI树,就像{type: "button", bbox: [x,y,w,h], text: "提交", parent: "form_A"}这样。这一步的关键是精度,如果框不准或者OCR漏字,后面全白搭。
接下来是知识库构建,我把它分成三层。第一层组件层,存标准控件的功能定义,比如“按钮用于触发动作”,用[[CLIP]]把控件截图和文本描述对齐到同一个向量空间。第二层产品层,放具体产品的UI规范和设计文档,比如“我们App的提交按钮必须搭配确认弹窗”。第三层场景层,存用户常见问题、操作SOP、报错案例,比如“点击提交后报错500怎么办”,存成问题-截图-解答三元组。这样按层组织,检索时可以按需召回,不会把底层通用知识和上层业务细节混在一起。
检索增强生成这部分,我走的是多路召回加融合排序。一路是视觉相似检索,用组件截图去知识库找长得像的UI;一路是文本语义检索,用用户问题去找功能描述;还有一路是规则匹配,比如精确匹配组件ID。三条路召回的候选用轻量模型比如[[ColBERT]]做[[重排]],然后我把结构化的UI上下文和检索到的知识拼在一起,喂给VLM或者纯文本LLM生成回答。这里有个坑:如果检索到的知识冲突,比如通用规范和业务规范打架,我会让模型优先用业务规范,并给出置信度。
实际落地时,有几个优化点。延迟是大问题,我会预计算热门界面的解析结果,检索用[[HNSW]]近似搜索,生成用[[蒸馏]]小模型。冷启动阶段,先用通用UI知识库,比如Android和iOS设计规范,等业务数据积累多了再逐步替换。UI频繁变更时,我会给每个组件建一个指纹,比如布局哈希,变更时只增量更新索引,不用全量重建。
最后说风险。前提是图像解析的精度要足够,如果OCR识别率低于90%,或者检测框偏移严重,这个系统基本不可用。常见失败场景是动态组件,比如下拉菜单里的选项,单张截图根本看不到,这时候需要引入时序,支持多张截图,比如点击前和点击后,来判断状态变化。
还有一个延伸点:当知识库规模大到百万级,多路召回的重排会成为瓶颈,我会考虑用[[GraphRAG]],把组件间的交互关系建模成图,用图遍历来替代部分检索,这样召回更精准,但图构建和维护的成本也更高。
所以整体上,我会把这个系统看成“视觉+知识”的桥梁,核心不是模型多强,而是知识库的质量和检索的精准度。我更倾向先小规模验证,比如只做登录页,跑通再铺开,避免一开始就追求全量覆盖导致失控。