feat(check): 偏离栏直读、响应错位判断;复查复用和硬预算(C2)

- deviation.py:模型判已响应的条目,证据所在表格行的偏离格写着「偏离 / 部分满足」等
  就改判负偏离;照抄要求格、响应格写的是别的内容的改判「响应可能对不上」
- reuse.py:按「提示词 + 要求 + 候选句原文」算缓存键,存模型原始结论;复查时内容没变、
  证据找得回的条目直接沿用,不调模型
- 每次检查送给模型的字数有上限,超出的条目列为请人工核对,写进覆盖范围
- 开发集 17 份:召回 61% → 73%,负偏离未说明 64% → 90%,规矩投标文件问题数不变

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
YANG JIANKUAN
2026-11-04 17:47:12 +08:00
parent 81c58798d2
commit df3ebbb6a1
12 changed files with 430 additions and 23 deletions

View File

@@ -21,6 +21,7 @@ from decimal import Decimal, InvalidOperation
from typing import Any
from uuid import UUID
from bid_doctor.check import deviation
from bid_doctor.check.match import BidDoc
from bid_doctor.document.pipeline import layout
from bid_doctor.document.pipeline.layout import column as _col
@@ -996,7 +997,7 @@ SERIAL = re.compile(r"\d{1,3}")
def _negative(cell: str, head: str) -> bool:
t = norm(cell)
if NEG_RESP.match(t):
if NEG_RESP.match(t) or deviation.negative(t):
return True
if YES_NO_HEAD.search(head) and t in ("否", "×"):
return True