audit_rules.py 4.1 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. # -*- coding: utf-8 -*-
  2. """审核规则集 — 历次分析实证教训的固化 (2026-08-24, 用户: "认真学习之前的分析经验, 固化到审核和判断规则").
  3. 判断侧机器闸已在 src/sop/discriminators.py (六道谱闸/漂移分型) 与 report_std (词表响亮/行数守恒/基线回归);
  4. 本文件 = 审核侧: 喂给审核模型 (本地 deepseek-r1/qwen3 与云端双模审) 的质疑清单, 每条来自至少一次实逮。
  5. 人读版全文 (含实证出处) = docs/审核规则_经验固化_v1.md。"""
  6. RULES = [
  7. # A 证据结构
  8. ('A1 同域绝对锚', '每个"×fleet高/z高/选择性高"是否配了同域绝对量+能量占比? 包络域禁 mm/s 换算(调制深度非正弦), 相对偏离绝对量微弱只能是参考级'),
  9. ('A2 机型固有线', '报的谱线过了全场基率核吗? fleet中位谱同处有峰=固有线/结构共振, 相对判据在该处失效'),
  10. ('A3 同源派生非独立', '"多条证据"里有几路真独立? 告警/运转时长/计数常由同一控制规则或同一传感器派生=一条证据; 同一路信号的多种统计量≠多类证据; ★自产报告(同一分析线此前产出)不作独立参照系, 与之对账只是自一致性回归'),
  11. ('A4 峰值测点非源头', '源≠路径≠响应; 判"共享机制"须过频段占比跨台恒定检验; 判"源头"用峭度测点分布而非峰值大小'),
  12. ('A5 双端对称判共模', '同部件前后两端同抬=外部共模候选(先查台风/电网窗); 单端独抬=个体; 但双端≠必然共模, 须查同期全场几台同变'),
  13. # B 统计口径
  14. ('B1 配对变化非共模', '判个体恶化用逐台配对变化的中位数+排名k/N; "中位数的变化"会把全场共模读成个体病'),
  15. ('B2 中位判恶化', 'max排名不判病情: 间歇尖峰(max高中位不动)先剔事件窗查工况; 判恶化只认逐日中位/基线'),
  16. ('B3 基线免污染', '基线窗内有无发作? 高基线台禁统一阈值(用相对自身基线), 否则横比排序全错'),
  17. ('B4 刀刃与落差', '门槛切出的N台≠共享机制: 必报第N→N+1名落差+分布连续性; 精确集断言必带near-miss'),
  18. ('B5 counts配duty', '动作次数必配时间占比; 时长÷次数混"单次长"与"连续满转"两种相反处置的故障'),
  19. ('B6 窗对齐', 'claim窗=evidence窗? 全窗统计稀释单月尖峰; 聚合抹时间维("曾异常已恢复"与间歇事件不可见)'),
  20. # C 管线静默失败 (2026-08-24 判级层4处同签名实逮)
  21. ('C1 空结果非阴性', '任何"未命中/为空/零重合"先证明解析成功: join键格式差/词表漂移/白名单滤列全朝"没问题"方向塌缩且穿过自检'),
  22. ('C2 默认值方向', '判级映射/聚合的默认分支落在哪级? 默认朝好=危险签名; 未知枚举必须响亮报错不许静默降级'),
  23. ('C3 落库非接上', '库函数+自检全绿只证库对; 生产路径是否 import 同一函数? 自实现的闸缺一条就全线漏'),
  24. # D 判级纪律
  25. ('D1 机制未定不命名', '归属未过全部前提闸只判"区域宽带/冲击异常", 不命名滚道/圈侧 — 限制错误传播半径'),
  26. ('D2 无信号非不支持', '交叉轴三分: 支持/无信号(中性,须报判据分辨力σ vs 预期效应量)/反证; 把无信号写成不支持会让现场放弃复查'),
  27. ('D3 冲突先疑己', '与第三方评级冲突=先假设自己错、补绝对量; 两家测的可能不是同一个量(总量级 vs 频率结构)'),
  28. ('D4 A类先清', '盲区/过载/通道死先于设备判断: 盲区台不进筛查集永不报异常; Health自检位≠采集存活(必用最后实测时间戳); 报告必带覆盖边界声明'),
  29. ('D5 数字可复现', '峰值结论声明用的_mean还是_max通道; 每个关键数字给复现路径(什么数据+什么计算); 台账损失过物理上限核'),
  30. # E 审核行为
  31. ('E1 建议是工单', '审出的每条建议须 采纳/改造/不采纳 三选一+证据; 审者报的数字同样是未验证claim, data-first复现后才可采纳'),
  32. ]
  33. def as_prompt():
  34. return '\n'.join(f'- {name}: {q}' for name, q in RULES)