fix(parse-book): check终检接敏感降级链+断点续跑+单窗拦截跳窗——批9实测超神窗20敏感崩全程

This commit is contained in:
zizi 2026-07-16 09:22:05 +08:00
parent 1c65466729
commit 74989afb97

View File

@ -183,15 +183,28 @@ def check(work_id, model):
with psycopg.connect(DSN) as conn: with psycopg.connect(DSN) as conn:
title = conn.execute("SELECT title FROM muse_content_work WHERE id=%s", (work_id,)).fetchone()[0] title = conn.execute("SELECT title FROM muse_content_work WHERE id=%s", (work_id,)).fetchone()[0]
wins = conn.execute( wins = conn.execute(
"""SELECT id, window_no, from_order, to_order, outline_text FROM example_parse_outline """SELECT id, window_no, from_order, to_order, outline_text, check_status
FROM example_parse_outline
WHERE tenant_id=%s AND work_id=%s AND deleted=FALSE ORDER BY window_no""", WHERE tenant_id=%s AND work_id=%s AND deleted=FALSE ORDER BY window_no""",
(TENANT, work_id)).fetchall() (TENANT, work_id)).fetchall()
chs = load_chapters(conn, work_id) chs = load_chapters(conn, work_id)
n_issue = 0 n_issue = 0
for oid, wno, a, b, ol in wins: for oid, wno, a, b, ol, st in wins:
# 断点续跑已检窗checked/revised不重刷敏感崩溃后重启只补 pending
if st and st != "pending":
continue
outlines = "\n".join(f"{no}章《{ct}》:{o}" for no, ct, _, o in chs if a <= no <= b and o) outlines = "\n".join(f"{no}章《{ct}》:{o}" for no, ct, _, o in chs if a <= no <= b and o)
content, _ = chat(CHECK_PROMPT.format(title=title, a=a, b=b, outline=ol, outlines=outlines), try:
model=model) content, _ = chat_degrade(CHECK_PROMPT.format(
title=title, a=a, b=b, outline=ol, outlines=outlines), model)
except SensitiveError as e:
# 全降级链被拦标记跳窗继续不让单窗炸掉整书终检批9实测超神窗20崩全程
conn.execute(
"UPDATE example_parse_outline SET check_status='blocked', check_note=%s, updater=%s WHERE id=%s",
(f"敏感拦截: {str(e)[:180]}", ACTOR, oid))
conn.commit()
click.echo(f"win-{wno:02d} 对账✗ 全链敏感拦截,跳过")
continue
data = extract_json(content) data = extract_json(content)
issues = data.get("issues") or [] issues = data.get("issues") or []
n_issue += len(issues) n_issue += len(issues)
@ -205,10 +218,13 @@ def check(work_id, model):
# 全书连贯性纵览(一次调用,只给大纲串) # 全书连贯性纵览(一次调用,只给大纲串)
if len(wins) > 1: if len(wins) > 1:
allo = "\n\n".join(f"【阶段{w[1]}(第{w[2]}{w[3]}章)】\n{w[4]}" for w in wins) allo = "\n\n".join(f"【阶段{w[1]}(第{w[2]}{w[3]}章)】\n{w[4]}" for w in wins)
content, _ = chat(COHERENCE_PROMPT.format(title=title, n=len(wins), outlines=allo), model=model) try:
data = extract_json(content) content, _ = chat_degrade(COHERENCE_PROMPT.format(title=title, n=len(wins), outlines=allo), model)
for i in (data.get("issues") or []): data = extract_json(content)
click.echo(f" [跨段] {i}") for i in (data.get("issues") or []):
click.echo(f" [跨段] {i}")
except SensitiveError:
click.echo(" [跨段] 全链敏感拦截,纵览跳过")
click.echo(f"终检完成:{len(wins)} 窗,细纲对账发现 {n_issue}") click.echo(f"终检完成:{len(wins)} 窗,细纲对账发现 {n_issue}")