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

58 lines
5.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 协议识别、上下文及数据库边界测试
测试日期: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 页面测试正常完成。本次没有进行真实微信收发或注入验证,故不把模拟回执测试当作当前微信客户端实机验收。