fix(check): 修留出集暴露的 5 处(规则集 2026.11-r3)

- 响应方式:「逐条响应」要说的是要求 / 参数 / 偏离,声明函填写说明不算;「否则视为无效响应」不算默认接受
- 偏离栏按「是不是明确满足」判断:偏离栏、响应情况栏一起看,其他短写法请人核对(最高重要);表体序号认「技-86」等
- 另报价、附加条件按结构判断(另一个不同的总价金额、保留 / 另行 / 调整报价等)
- 空白栏:「精确到年月日」不算没填
- 比对时折叠异体字(戶→户等),原文照存
- 记录决策 E2:先修再跑国动真实投标文件

开发集召回 75%、规矩投标文件问题数不变;留出集参考数字见 check-eval §12(已看过,仅参考)。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
YANG JIANKUAN
2026-11-04 20:34:12 +08:00
parent fee1c0f842
commit 902a130c82
13 changed files with 436 additions and 70 deletions

View File

@@ -253,7 +253,30 @@
这些修完以后,留出集已经测不出修复效果(看过了),报告里的留出集数字以本节为准。国动真实投标文件仍然用冻结代码跑一次,之后再修。
## 12. 下一步
## 12. 修留出集暴露的 5 处(2026-11-04,用户决定先修再跑真实文件,决策 E2)
规则集 `2026.11-r3`。
1. **响应方式识别**(`checklist/response_mode.py`):「逐条响应」那句话要说的是要求、条款、参数、偏离、采购需求,声明函填写说明里的「逐一、准确填写……」(10 份招标文件里 7 份都有这句套话)不算;「默认接受」的写法里,「视为」后面紧跟「无效 / 不 / 未 / 非」的(「否则视为无效响应」)是不响应的后果,不算。10 份招标文件的识别结果和档案一致(S03 → 默认接受,S09 → 逐条),S05 商务仍是「没写明」(原文确实没写)。
2. **偏离栏按「是不是明确满足」判断**(`check/deviation.py`):按表头认出偏离栏和响应情况栏,两栏合起来判断——任一栏明确写了不满足(短的一段里有「负偏离 / 部分响应 / 不满足」,长的一段开头就是这些)就是负偏离;偏离栏写的不是「无偏离 / 满足 / 符合」的其他短写法(「不完全一致 / 接近要求 / 基本一致」)请人核对,级别最高到重要;「响应情况」栏写的常是响应内容(「支持」「3 年」),只认明确的不满足。窄栏折成两段的「无偏」「离」合起来认。认不出表头时退回原来的整行明确写法。响应表规则用同一套判断,表体序号认「技-86」「C-3」「(一)」这类写法(原来只认纯数字,风格 B / C 的表整张被跳过)。
3. **另报价、附加条件按结构判断**(`check/rules.py`):另报价看「报价字样或备选 / 优惠 / 让利 / 如……调整为,加上一个和投标总价不同、不低于总价三成的金额」(金额在前在后都算),「备选 / 替代 / 方案二 / 第二套」致命,其余重要;业绩合同金额、限价、保证金不算。附加条件补「保留……权利」「另行签订」「以另行 / 实际 / 届时……为准」「调整报价」「价格波动」,商务语境补「交付 / 供货 / 服务期 / 售后 / 协议」,「不以任何理由……」算承诺。
4. **空白栏**:「精确到 / 格式为 / 显示」后面的「年月日」、后面跟「时」的不算没填。
5. **异体字**:比对时把「戶 / 戸 → 户」这类异体码位和 CJK 兼容汉字折叠(`text_layer.norm`、检索分词),原文照存。
每处都有开发集、留出集以外写法的单元测试;中间一版偏离栏判断把「投标响应」栏的响应内容和折行碎片当成了要核对的值,开发集上冒出几十个误报,改成两栏分开判断、按段判断后回落。
| 指标 | 开发集 修前 → 修后 | 留出集 冻结代码 → 修后(**已看过,仅参考**) |
|---|---|---|
| 查标召回 | 111 / 149(74%)→ 112(75%) | 40 / 74(54%)→ 51(69%) |
| 致命级召回 | 25 / 32 → 25 / 32 | 23 / 41 → 26 / 41 |
| D06 负偏离未说明 | 92% → 93% | 25% → 80% |
| 规矩的投标文件报出的问题 | 239 → 239 | 1134 → 82 |
| 规则问题查出 | 57 / 57 → 57 / 57 | 13 / 20 → 19 / 20 |
| 规则问题误报 | 0 → 4(规矩的投标文件上 1,都是「没读到响应情况」的重要级提示) | 3 → 0 |
留出集的正式成绩仍以 §11(冻结代码)为准:修的时候看过留出集的漏报,修后的数字有过拟合成分。
## 13. 下一步
1. 分项报价表和采购需求清单逐项对照(P13)**暂缓**:在开发集 7 份招标文件上试读「名称 + 数量」的采购清单表,S02、S08(服务类)没有这种表;S04 把「是否进口」一栏读成了名称;S10 采购包 2 的表跨页、第二页没有表头,漏了大半;S01 9 行里能和投标文件的分项对上名称的只有 7 行。P13 是致命级,按这个抽取质量在真实文件上会大量误报「缺项」,评测集里也没有注入过,先不上,覆盖范围里照写「还没有上线」。散文写法的单价上限同样暂缓。
2. 第 3 步冻结前:确认各项改动的单元测试都有开发集以外的反例;冻结后跑留出集(S03、S06、S09,风格 B + C)和国动真实投标文件,各一次。