fix: start_qc同任务重复开轮守卫——已落分且产出未更新复用该轮不烧轮(doc_requirements同任务连开4/5轮实测)

This commit is contained in:
yumoqing 2026-09-03 18:37:32 +08:00
parent 3b718a0869
commit 6c87cd12b6

View File

@ -133,6 +133,32 @@ async def start_qc(qc_type, project_id="", who=None, agent_id=None, task_id=""):
"round": _lr.get("round"), "fit_score": _lr.get("fit_score"),
"message": "该类型第 %s 轮已通过契合度审核(%.2f 分 > 通过分),无需重审。"
"直接完成任务即可。" % (_lr.get("round"), to_float(_lr.get("fit_score")))}
# 同任务重复开轮守卫2026-09-03本任务已有落分记录且产出未在其后更新 →
# 复用该轮不开新轮。根治QC agent 对同一产出自我重试连烧轮次
# doc_requirements 实测:同一任务 18:08 开第4轮 5.5 分后 18:32 又开第5轮
if task_id and not open_r:
my_r = await sor.sqlExe(
"SELECT id, round, fit_score, passed, updated_at FROM bid_qc_reviews "
"WHERE project_id=${p}$ AND qc_type=${t}$ AND task_id=${tid}$ "
"AND fit_score IS NOT NULL ORDER BY round DESC LIMIT 1",
{"p": project_id, "t": qc_type, "tid": task_id})
await sor.sqlExe("COMMIT", {})
if my_r:
_mr = rec_to_dict(my_r[0])
rev_t = str(_mr.get("updated_at") or "")
out_rec = await sor.sqlExe(
"SELECT MAX(GREATEST(created_at, IFNULL(updated_at, created_at))) AS mt "
"FROM " + QC_OUTPUT_TABLE[qc_type] + " WHERE project_id=${p}$",
{"p": project_id})
await sor.sqlExe("COMMIT", {})
out_t = str(getattr(out_rec[0], 'mt', '') or '') if out_rec else ""
if not (out_t and rev_t and out_t > rev_t):
return True, {"status": "same_task_reviewed", "qc_type": qc_type,
"review_id": _mr.get("id"), "round": _mr.get("round"),
"fit_score": _mr.get("fit_score"),
"message": "本任务第 %s 轮已审核(%.2f 分)且产出未更新,"
"不重复开轮。请完成本任务。"
% (_mr.get("round"), to_float(_mr.get("fit_score")))}
# 空产出守卫2026-09-02产出被 QC 清空、重做未完成 → 不开新轮。
# 根治QC 审核任务比分析重做任务先跑时对着空表开轮打 0 分,白白烧一轮
# cost_benefit 实测第2轮对着零记录表打 0.00)。