7.1 KiB
视觉识别测试与修复报告
测试日期:2026-09-16。范围:C:/kefu/wechat_rpa、C:/wechat_rpa。
结果
| 目录 | 自动回归 | 失败/错误/跳过 | 真实本机 OCR 合成图片测试 |
|---|---|---|---|
| C:/kefu/wechat_rpa | 625 | 0 / 0 / 0 | 24 / 24 字符完全匹配 |
| C:/wechat_rpa | 625 | 0 / 0 / 0 | 24 / 24 字符完全匹配 |
两次 625 项回归来自同一组测试在两个目录运行,不应描述为 1250 个独立场景。真实 OCR 使用已安装 RapidOCR、微软雅黑生成的中文昵称图片,覆盖 1×、2×、3×尺寸和明暗主题,未 mock OCR 引擎;不等同于真实微信界面识别准确率。两份代码的 OCR 文件原内容一致。
执行模块:test_visual_pipeline、test_vision_fallback、test_message_navigation、test_self_reply_loop、test_vision、test_session_name、test_unread_cross_machine、test_reply_safety、新增 test_visual_identity_audit、新增 test_visual_cache_audit。
覆盖:未读红点和红色草稿区分;不同 DPI 的导航与裁剪;窗口捕获失败/黑屏/遮挡保护;系统入口和未知行过滤;连续两帧确认;快速 OCR→检测 OCR→模型识别的模拟降级;昵称及会话键;待回复消息合并;左右气泡/我方消息回环保护;发送前会话校验;草稿、人工审核、重复发送和不确定回执处理。test_vision 只执行导入安全断言,未执行其手动调用远程视觉 API 的 main。
发现并修复
- 相似昵称被合并为同一客户。 原
NameReader.canonical按编辑距离 1 和出现频次强制修正姓名,客户乙@微信可被改成先见过的客户甲@微信,会员0002可被改成会员0001。即使 OCR 置信度 99% 也会发生,两个会话最后使用相同历史键。现在禁止任意客户姓名模糊合并;仅保留已知固定界面词误读,以及客户名完全相同的固定平台后缀误读修正。 - 升级 OCR 缓存仅以头像为键。 两人使用相同默认头像且快速 OCR 失败时,第二人的检测 OCR 被跳过,直接读取第一个人的名字;名字裁片读取失败也仍可复用头像缓存。缓存键现同时绑定头像与当前昵称裁片,裁片不可读时不复用。列表重排但裁片相同仍能命中。字体/抗锯齿变化时可能增加一次 OCR,优先保证不串客。
- 畸形 OCR 数据会通过身份判断或抛异常。
NaN/正无穷置信度会绕过原< 0.8判断;无限坐标在int()时引发OverflowError,连后续正常识别项也丢失。现过滤非有限值与不在 0–1 范围的置信度,跳过异常项继续处理正常项。
最小复现保存在 visual-bugs-before.json(5 测试,包含 9 个失败子项和 1 个异常)及 visual-cache-before.json(3 测试,2 失败)。新增 8 项正式回归验证原缺陷及原有兼容行为。
改动及备份
两个目录分别修改 session_name.py、wechat_bot.py(仅 _row_name_deep_cache_key);分别新增 test_visual_identity_audit.py、test_visual_cache_audit.py。原文件分别保存在各自 backups/recognition-audit-20260916/visual/。没有替换整份目录,没有修改用户配置、聊天档案、待回复队列或协议实现。
运行器:run_visual_audit.py。最终证据:visual-source-final.json/.log、visual-target-final.json/.log。本机 OCR 证据:visual-real-ocr-source.json、visual-real-ocr-target.json。改动清单:visual-changes.json、visual-cache-changes.json。
隔离与局限
所有应用数据目录指向临时目录;真实桌面输入、剪贴板、屏幕截图和 HTTP 被拦截,网络套接字仅允许本机临时端口测试;发送互斥量使用进程独立名称。最终两次回归均未触发任何外部动作拦截(0 次)。没有点击/输入微信,没有真实发送,没有上传客户资料,没有发起付费模型调用。
首轮并行测试曾出现 7 个失败,原因是测试未隔离 Windows 全局发送锁,两个测试进程互相抢锁。加上独立审计锁名后原始 617 项在两个目录均通过,该首轮现象不是产品缺陷。运行器同时修正了 Windows 下退出临时工作目录前清理会报文件占用的问题。
视觉模式现有身份设计仍主要依赖显示昵称。完全同名的不同联系人不能仅凭昵称证明是同一人;本轮修复解决了差字姓名和同头像缓存串用,但未重构持久化身份体系。也未验证真实微信所有版本/字体/截断昵称/复杂背景下的识别率,未验证远程视觉模型服务在线状态。AI 上下文与知识库端到端由主任务其他分支单独报告。
追加:视觉问答知识引用留痕修复
只读复核未发现上述昵称/缓存修复的阻断性回归:@徽信 后缀仅在客户主体完全匹配已知名字时纠正;默认头像不同昵称已有独立回归;裁片不可用时不复用识别结果;裁片变化会重新识别,未读筛选页的第二帧也执行深度 OCR。视觉调用仍将按会话取出的 history 传给 ai_chat.get_ai_reply;_call_model_with_observer 的模型回调在原调用线程执行,不会丢失 thread-local 网关 trace。
发现并修复一项额外可追溯缺陷:视觉 _orchestrated_reply 原来取到网关 knowledge 后未传给 _record_model_call,待回复状态也没有 knowledge_trace 与 model_task_id,与协议路径不一致。现在按协议字段语义保留这两项,在磁盘持久化/恢复时保留,新客户消息开始下一轮时清除旧引用。仅保存知识开关、检索模式、耗时及每个命中的 id/revision/score(最多20条),不保存知识正文或聊天原文;调用前消费旧 thread-local trace,防止内部识别调用的旧记录误挂到安全兜底回复。发送和审核判断未改动。
新增 test_visual_knowledge_trace_audit.py 6 项:历史/图像与引用同时保留;无裁判也可记录引用;重启恢复;丢弃额外大正文;下一轮清除旧引用;旧内部调用不冒充本次问答;其中有关清除行为分别覆盖新消息和新模型结果。最小复现 visual-trace-before.json 为6项全部未通过(2失败/4错误),修复后两目录各 526项/0失败/0错误/0跳过。涉及 test_reply_safety、test_visual_pipeline、test_model_router 及新增模块;526项包含原625项的大量复测,不能相加声称1151个独立测试。
按日志测试 ID 去重:原集合625项,追加集合526项,重合431项,合并为每目录720个独立自动测试。本机真实 OCR 的24组图片单独计数,未包含在自动测试数字中。两个目录同一组场景重复运行,不把数量翻倍当作独立场景。
追加改动仍仅为两目录 wechat_bot.py 与新增测试;补丁前版本保存在各目录 backups/recognition-audit-20260916/visual-trace/wechat_bot.py。相关证据:visual-trace-source.json/.log、visual-trace-target.json/.log、visual-trace-changes.json、visual-deduplicated-counts.json。末次回归外部动作拦截次数仍为0。