- 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>
41 lines
1.8 KiB
Python
41 lines
1.8 KiB
Python
"""导出风格 B 改写的输入:从风格 A 的投标文件稿里取出要改写的表格行(evals/check/prompts/style-B.md)。
|
||
|
||
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
|
||
|
||
import json
|
||
import pathlib
|
||
import sys
|
||
|
||
OUT = pathlib.Path(__file__).resolve().parents[1] / "out" / "check"
|
||
|
||
for tender in sys.argv[1:]:
|
||
# 留出集没有风格 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"]:
|
||
cols = b.get("columns") or []
|
||
if b.get("type") != "table" or "requirement" not in cols or "answer" not in cols:
|
||
continue
|
||
for r in [*b["rows"], *(b.get("pool") or [])]:
|
||
if r.get("key") and r["key"] not in rows:
|
||
rows[r["key"]] = {
|
||
"key": r["key"],
|
||
"requirement": r["cells"][cols.index("requirement")],
|
||
"answer": r["cells"][cols.index("answer")],
|
||
}
|
||
d = OUT / f"{tender}-B"
|
||
d.mkdir(exist_ok=True)
|
||
(d / "rewrite-input.json").write_text(json.dumps(list(rows.values()), ensure_ascii=False, indent=1))
|
||
print(tender, len(rows))
|