feat(evals): 留出集生成——风格 C、留出集改写导出;评测可模拟人工确认响应方式

- build.py / mutate.py:补风格 C(叙述型),由封存一侧的会话按封存说明实现;开发集风格 A / B 输出逐字节不变
- build.py:复述要求时去行首编号不再吃掉「2路服务器」这类内容数字
- export_rewrite.py:没有风格 A 稿时从未改写的风格 B 稿导出
- run_check.py:--modes 模拟清单页上人工确认的响应方式(C12 的人工确认点)
- check-eval.md:第 3 步冻结点(a60d16e)

查标代码(server/src、prompts)自冻结后未改。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
YANG JIANKUAN
2026-11-04 18:58:52 +08:00
parent a60d16e169
commit b2b8584321
5 changed files with 416 additions and 15 deletions

View File

@@ -2,6 +2,7 @@
cd server && ../.venv/bin/python ../evals/check/export_rewrite.py <招标文件> [...]
输出:evals/out/check/<招标文件>-B/rewrite-input.json(数组,字段 key、requirement、answer)。
没有风格 A 稿时(留出集)从还没改写的风格 B 稿取。
"""
from __future__ import annotations
@@ -13,7 +14,13 @@ import sys
OUT = pathlib.Path(__file__).resolve().parents[1] / "out" / "check"
for tender in sys.argv[1:]:
spec = json.loads((OUT / f"{tender}-A" / "spec.json").read_text())
# 留出集没有风格 A:从还没改写的风格 B 稿取(表格行的要求 / 响应两栏和 A 一样);B 已经改写过就不能再取
src = OUT / f"{tender}-A"
if not (src / "spec.json").exists():
src = OUT / f"{tender}-B"
if (src / "rewrite.json").exists():
sys.exit(f"{tender}:没有风格 A 稿,风格 B 稿已经按 rewrite.json 改写过,不能再导出改写输入")
spec = json.loads((src / "spec.json").read_text())
rows: dict[str, dict[str, str]] = {}
for v in spec["volumes"]:
for b in v["blocks"]: