Files
kefu/deploy/recognition-audit-20260916/protocol-report.md
T
2026-09-21 10:34:06 +08:00

5.5 KiB
Raw Blame History

协议识别、上下文及数据库边界测试

测试日期:2026-09-16。只测试用户指定的两份目录,所有收发均为合成数据和模拟客户端。

结果

目录 范围 结果
C:/wechat_rpa 协议收发门禁、识别、会话隔离、模型/知识库合成联测、Qt 页面、数据库与新增边界 142 项通过,0 失败,0 跳过
C:/kefu/wechat_rpa 数据库消息读取、视觉读取优先级、增量游标、坏时间戳 35 项通过,0 失败,0 跳过

共 177 次测试执行,部分相同测试在两个目录各执行一次。新增 11 项协议边界测试及 4 项共享数据库测试。源目录没有 protocol_engine.py 或原账号协议收发测试,其 model_protocol.py 是模型接口相关文件,不能当作企业微信协议能力;没有向该目录复制协议功能。

已复现并修复的 4 个问题

  1. 图片后跟文字被当成纯文字问题回答。 原协议实现只检查最后一条消息类型。现在检查整个未回复批次,出现图片、语音等内容就留待人工,撤销旧草稿及旧批准状态。人工已回复的历史媒体不阻断新文本;联系人恢复系统通知正确分隔旧批次。
  2. 回执不确定导致暂停后,重启丢失暂停状态。 现在重新加载当前账号的 uncertain 队列时恢复 needs_attention,不会通过重启绕过暂停;其他账号的旧队列不误暂停当前账号。
  3. 超过 100 条连续未回复消息只取末尾,丢失前面的条件后仍自动回答。 现在读取 101 条作为边界探针;超过 100 条连续未回复客户消息则提示人工处理。恰好 100 条保留全部;长历史中已有我方回复分界时,正常后续问答不受影响。
  4. NaN、Infinity 或异常巨大时间戳进入识别及排序,随后可能导致日期格式化异常。 两份目录的 wxwork_db.py 均增加有限值和本地日期可表示性校验,拒绝坏行,保留后续正常消息。正常秒及毫秒时间戳行为不变。

上下文及知识库证据

  • 协议调用 model_context_text:上下文开启时按配置轮数保留双方历史、角色和时间戳;关闭时只保留未回复批次。轮数最大 50;连续客户补充不会单纯因为配置轮数小而被裁掉。超过 100 条当前批次按上面的规则交人工,不能称为无限上下文。
  • test_protocol_knowledge_integration 使用真实本地 ASGI 网关处理、临时已发布知识和模拟模型接口,验证知识命中内容注入请求,knowledge_trace/model_task_id 被保留,引用记录入库,关闭知识库时无注入,高风险裁判结果进入审核,批准后模拟回执防重。
  • 上述知识库联测通过,证明代码路径;不代表用户当前账号已开启知识库、有已发布知识或真实外部模型已回答。实际账号连接和线上模型探测由主任务另行核对。
  • 当前协议版仅支持自动处理文字。图片/语音能识别类型并保留人工,不等于已理解其语义。

执行模块

目标目录:test_native_protocol_pipeline、test_protocol_features、test_protocol_cross_machine、test_wecom_native_protocol、test_protocol_knowledge_integration、test_protocol_audit_boundaries、test_contact_reply_guard.ProtocolContactTests、test_database_timestamp_audit、test_database_reply_priority。

源目录:test_database_timestamp_audit、test_database_reply_priority。

覆盖同名不同 ID、跨账号隔离、同秒/迟到落库、超过 2000 条分批增量、人工回复和新消息使草稿失效、取消/停止、重复回执、未知回执和重启、安装路径、缺失数据库、版本门禁、业务错误包和灰度错误,以及离屏实际 Qt 协议页面交互。

修改与备份

  • C:/wechat_rpa/protocol_engine.py
  • C:/wechat_rpa/wxwork_db.py
  • C:/kefu/wechat_rpa/wxwork_db.py
  • 新增 C:/wechat_rpa/test_protocol_audit_boundaries.py
  • 两目录新增 test_database_timestamp_audit.py

原文件分别保存在各目录 backups/recognition-audit-20260916;protocol_engine.py 的首份备份为测试前版本,protocol_engine.media-fix.py 为此次迭代中的中间备份。哈希见 protocol-fix-manifest.json 和 protocol-database-fix-manifest.json;后一份对应最终协议及数据库修改。

隔离、证据与限制

使用临时 application_data_dir、配置、SQLite 和发送队列;业务 socket.connect/connect_ex 被阻断,仅允许 Windows asyncio 自建内部 socketpair 唤醒管道;真实 native kernel 访问被阻断,发送锁使用本进程独有名称。没有执行真实 --protocol-send-test,没有注入、发送客户消息,没有改真实配置或聊天队列。

  • protocol-target-final.json / .log:142 项最终结果。
  • protocol-source-final.json / .log:35 项最终结果。
  • protocol-boundary-before.json / .log:最初 7 项边界的 2 处失败证据。
  • protocol-tail-before.json / .log:100 条截断复现与联系人恢复回归证据。
  • protocol-timestamp-target-before.json / .log、protocol-timestamp-source-before.json / .log:两目录异常时间戳复现;subTest 失败数不是缺陷数量。
  • run_protocol_audit.py:可重复隔离测试脚本;AUDIT_OUTPUT_TAG 环境变量指定报告后缀。
  • 一次性 fix_* 脚本已有备份时拒绝重复执行,勿盲目重跑。

Qt 仍打印此前确认的 GetGpuDriverOverlayInfo 日志,实际离屏 Web 页面测试正常完成。本次没有进行真实微信收发或注入验证,故不把模拟回执测试当作当前微信客户端实机验收。