交付出件箱

← 返回出件箱

「远视储备不足怎么办」告警 · 定位 + 修复 + 17 维核验

环境标注:生产 = chat.tongban.love · 代码基线 = origin/test fb0dc9d7(该文件 main/test 一致)
日志时间为 UTC,文中已换成北京时间。⚠️ = 推断或查不到,单独列出。

一句话结论

一、处理历史

时间(北京) 事件 证据
9-18 20:36 / 21:09 两个会话问「远视储备不足怎么办?」,各报一次警 生产 backend.log.2026-09-18 UTC 12:36:10 / 13:09:28;chat_messages 两个会话
9-18 当时查过,判"AI 编造"、待长官定,没修 memory 记录(已于 9-24 更正)
9-24 11:28 上生产的 ed2e6346 修了另一类误报:家长写了度数且 <300 度 commit ed2e6346 R5
9-24 这句没写度数 → 9-23 的修复管不到 → 本次补 下文 V12

二、核验明细

# 维度 查法 证据 结论
V1 哨兵调用方 git grep 函数名(app/scripts/web/miniapp/tests) 只有 brain_gateway.py:780、:1354 两处 + 2 个测试文件;对照 is_hyperopia_topic 命中 2 文件 H5/小程序/企微共用这两处,改动只影响报警
V2 是否拦截输出 读两处调用原文 都是 try: if 哨兵: log_incident(...) except: warning,不改 full_text/ai_response 只报警,不拦不改
V3 生产/测试代码一致 git diff origin/main origin/test -- refractive_topic_guard.py 空 回放用生产现行代码 = 改前代码
V4 依赖的私有符号别处用没用 git grep _hyperopia_bound_degrees 等 3 个 各 2 处,全在本文件 无外部耦合
V5 提交守门 scripts/verify-trigger-files.txt 本文件 0 命中;对照 h5_chat 1 不触发 chat-e2e 守门
V6 告警消费方 grep device_reco web/miniapp/scripts/deploy 0;对照 chat_guardrail 在 app 2 文件 没有看板/统计依赖这个告警数
V7 告警时间线 生产 backend.log* 14 天 共 10 次(20 行含 webhook 行);本 query 仅 9-18 两次;9-24 0 次 今天没发生
V8 回答是否完整 生产 chat_messages 两个会话 助手回复 704 / 468 字,结尾是追问"最近查过眼轴吗" 完整送达
V9 "远视储备不严谨/眼轴储备"出处 生产容器知识库 A chunk_texts.json(13847 段) 第 12669 段原文「从远视储备转向眼轴储备 · 远视储备概念虽易于传播,但临床严谨性不足…」;"眼轴储备"20 段、"近视到站眼轴"21 段(对照"远视储备"839 段) AI 复述知识库,非编造
V10 系统自己怎么分人群 refractive_topic_guard.py:59-61 A=远视储备不足(临近近视·延缓眼轴增长);B=大远视 ≥+3.00D(需正常发育),"方向相反" "储备不足"=A 类,排除大远视
V11 知识库有无"储备不足"指大远视 知识库 A 同段共现 含"储备不足/没有远视储备"129 段,其中同段含"大远视" 0 段 医学前提成立
V12 生产真实数据回放 生产全部含"远视/远储"提问的问答对,旧规则 vs 新代码(整文件原样注入) 83 对:旧报 43 → 新报 31;放过 12 条全是"储备不足/没有储备"说法,对应回答 0 条提大远视;新增报警 0;400 度以上/中高度远视 7 条改前改后都报 只去误报,不漏真问题
V13 反问/歧义句不被误放 单测正对照 「有没有远视储备」「远视储备还剩多少」「远视300度是不是储备不足」「远是储备和远视眼的区别」「远视储备有没有了」「远视储备没有问题吧能用红光吗」→ 仍报警 通过
V14 单测 主会话亲跑 pytest 201 passed(改前 188,新增 13 条);-k 筛出的 16 条(新增 13 + 9-23 原有正对照 3)-v 全 PASSED 通过
V15 反向注错 子代理:删掉新分支后跑 新增豁免用例变红(4/4、3/3),正对照保持绿;恢复后 201 passed 新分支是通过的唯一原因
V17 回归 子代理:相关 9 个测试文件改前(origin/test)/改后各跑一次 改前 17 failed/232 passed → 改后 17 failed/245 passed;17 条失败名单逐条相同(存量:本机缺 faiss doctor_001 索引等) 无新增失败
V16 告警白话为何说"回答缺失" alert_notifier.py:258-306 白话 4 行由 27B 现场翻译,本告警类型无固定中文描述 白话段会猜错,见残留 R2

三、改了什么

四、残留(未处理 · 需决定)

# 事项 说明
R1 中文数字度数不认 「远视储备只有二十五度了」生产 2 条仍误报(9-23 的度数识别只认阿拉伯数字)。要修得改度数解析,且须保证「四百多度」仍报 —— 建议另开一单
R2 告警白话会编 27B 把"只报警"翻成"回答缺失/被拦截"。可给这类告警加固定中文描述,不走 27B
R3 知识库口径 「远视储备临床严谨性不足」是赵博士原话,但系统提示词和 839 段知识又把远视储备当核心指标。是否统一口径 → 赵博士/长官定
R4 发版排队 MR#744(数据库加固)test 部署自 20:41 卡住未落地,本修复发 test 后同样要等

五、上线记录