feat(check): 响应方式识别(C12)和「这条要不要投标人回答」;评测集纠错
- checklist/response_mode.py:按类别(技术 / 商务)识别招标文件的响应方式(逐条响应 / 默认接受),规则优先; 两种写法冲突按逐条,认不出按逐条并写进覆盖范围。 - check/applicability.py:无效情形(★ / 斜体下划线标注的条款除外)、日期与递交、没要求附材料的评分标准、 无需提供证明或由采购人查询的资格,不逐条找响应,写进覆盖范围;要求附证明材料按原文判断,中标后才交的不算。 - 默认接受的要求没找到响应:一般要求记 implicit_accepted、不出问题;实质性要求记 implicit_review、提示级 人工核对;要附证明材料的不免(迁移 0006)。 - match.py:修同一行单元格又是别的条目候选句时的 KeyError(每条清单项单独记候选句,句子从总表里查)。 - 评测集:注入器同一要求的所有表格行一起改;散文、附件、格式文件里也响应了的要求不挂漏响应类问题; 错位响应必须是另一个参数;复核判不成立的单元不再挂;regen.py 按固定种子重新生成。 开发集 17 份:规矩投标文件报出的问题 639 → 229,误报 21.3 → 12.4 / 100,召回 68% → 65%,致命级 20 → 21 / 32 (docs/architecture/check-eval.md §4)。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -52,8 +52,14 @@ def spec(result: Result, item: dict[str, Any]) -> Spec | None:
|
||||
name = str(item.get("title") or "")
|
||||
base = {"importance_basis": item.get("importance_basis"), **result.detail}
|
||||
scope = "、".join(result.detail.get("search_scope") or [])
|
||||
if result.verdict == "responded":
|
||||
if result.verdict in ("responded", "implicit_accepted"):
|
||||
return None
|
||||
if result.verdict == "implicit_review":
|
||||
text = (
|
||||
"招标文件规定未列入偏离表的视为接受,投标文件里没有找到对这条要求的明确响应。"
|
||||
"这是实质性要求,请人工核对所投内容确实满足。"
|
||||
)
|
||||
return Spec("manual_review", "hint", f"请人工核对:{name}", text, {**base, "mode": "implicit"})
|
||||
if result.verdict == "not_found" and result.evidence_status == "unverified":
|
||||
claimed = result.detail.get("claimed_pages") or []
|
||||
where = f"{_pages(claimed)}有响应" if claimed else "有响应"
|
||||
|
||||
Reference in New Issue
Block a user