MISS · 漏抄漏抄短气泡
客户紧贴我方长回复下面发了句"嗯嗯",小气泡贴着屏幕底边,VL 整条没看见——这句话就"消失"了。
企微好友单聊的 AI 自动代回,不是"读"聊天记录,是"看"聊天截图。看,就会看错——漏回、答非所问、自问自答,九成事故都出在这一环。这页讲清它为什么换不掉、会怎么翻车、以及怎么治。
// 面向运营与产品 · 结合真实事故与修复记录
VL = Vision-Language 模型,"能看图说话的 AI"。它只负责整条流水线里的"看"——眼睛和脑子是两个不同的模型,所以"漏看消息"和"回复质量差"是两类问题,别混为一谈。
云电脑 · 每轮 tick
给企微窗口拍截图 → VL 模型认出每个气泡的文字、判断靠左(客户)还是靠右(我方)、找出待回的新消息。
云端服务器 · chatReply
读出来的客户消息发给对话大模型,结合整段历史与客户画像,以"小艳"人设想好这句怎么回。
云电脑 · SendInput
把回复一个字一个字打进企微输入框、按发送——跟真人操作一模一样,企微侧看不出任何自动化痕迹。
同事说的"卡顿",绝大多数是眼睛看漏了,不是脑子想不出来。眼睛是整条链里唯一的非确定性读取环节——后面所有的坑和修法都围绕它展开。
"别猜像素了,直接拿结构化数据不行吗?"——这个念头被完整验证过:四条路全是死路,每条都有实测证据。
| 路线 | 实测结论 | 判定 |
|---|---|---|
| 无障碍接口(UIA) | 企微聊天区是自绘界面,系统无障碍树里是空的,一个字都读不到。 | ✗ DEAD |
| 浏览器调试口(CDP) | 企微确实开着调试端口,但只挂到内嵌的"腾讯文档"网页——聊天主窗根本不是网页(Skia 自绘),够不着。 | ✗ DEAD |
| 官方 API | 腾讯不提供"替员工在好友单聊里发言"的接口;客服接口只管客服会话,不管好友聊天。 | ✗ DEAD |
| 会话存档(付费) | 技术上能读结构化消息,但客户端会给客户弹"对方已开启会话存档"——直接穿帮,"真人小艳"人设崩了。 | ⚠ 业务否决 |
VL 看截图不是偷懒的权宜之计,是平台逼出来的唯一可行读法。既然眼睛换不掉,功夫就只能花在"给这双会看错的眼睛配护栏"上——别再花时间重探结构化读取。
VL 不是每次都错,它是概率性的——偶尔看错一次,后果就是漏回或答错人。以下五种全部真实发生过:
客户紧贴我方长回复下面发了句"嗯嗯",小气泡贴着屏幕底边,VL 整条没看见——这句话就"消失"了。
我方发的长文案气泡接近满宽,VL 把它判成"靠左=客户说的"——机器把自己的话当客户消息,自问自答回给真客户。
"你撤回了一条消息"这种居中灰条被读成客户发言——对着系统提示一本正经地回复。
同一个客户昵称,这次读"愿"、下次读"原"——系统以为是仨人,聊天记忆被拆碎、上下文接不上。
VL 回答撞上字数上限,吐出半截坏数据,整轮读取作废。现修法:坏数据里能捞出完整的部分先用上(截断抢救)。
截屏机制的天生软肋:企微不在前台 / 被别的窗口盖住 = 系统整轮失明空转。桌面必须保持无遮挡。
为了少看错,系统用像素对比(diff):把上次截图存成基线,新截图跟基线一比,哪块像素变了就只让 VL 看那一小块。想法很好,但早期版本埋了个雷:
// 根因一句话:让不可靠的一方(VL)推进了可靠一方(像素基线)的状态——方向反了。
抓住矛盾信号:像素说"变了"、VL 却说"没消息"——两者打架时绝不推进基线,改走一次全屏重读复核(就是以前"重启能救回来"的那条路,现在每轮自动走)。连续两次全读确认无待回,才当已读回执之类的噪音放行。一句话:把"重启大法"做成了系统的自动反射。
个案补丁打不完。真正让同类事故收敛的,是这四条通用原则——每条都对应着一族被消灭的 bug:
读取、生成、发送任何一步失败,都不许把消息"记账"成已处理——留给下一轮重试。上一节的基线雷、"生成失败后永久沉默"的弃单雷,根子都是违反了这条。
拿不准就这轮不回。未回的消息一直在屏幕上,下轮还能看到;瞎回一条错话,代价大得多——只治随机误读,系统性误读靠别的规则兜。
能用死规则判的绝不交给 AI 猜:我方气泡是浅蓝色、客户是灰白色——查像素颜色比让 VL 判"左右"可靠,用它做发送前的最后一道否决。
给"看错率、弃权率、回复时延"埋点数数。没有度量,每次修复都不知道有没有效、也排不出主矛盾(误发 vs 漏读)——这是"同类 bug 反复出现"的元根因。
另一台云电脑跑一个 AI 扮演的假客户,按完整人设连续找真系统聊天,专门把它聊到出错。单元测试测不出的链路脆弱点,被镜像对手一冲就现形——一轮对抗挖出 14 个缺陷。
给运营同学的三步现场动线——先想机制,再自查环境,最后带证据上报: