From 5d170c5a37e4a67d2c2806b6606e5bbee43ef442 Mon Sep 17 00:00:00 2001 From: Val-sss <154882199@qq.com> Date: Thu, 7 May 2026 10:37:35 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=B5=8B=E8=AF=95=E5=85=A8=E9=80=9A?= =?UTF-8?q?=E8=BF=87=E6=97=B6=E8=B7=B3=E8=BF=87Reviewer=E5=AE=A1=E6=9F=A5?= =?UTF-8?q?=EF=BC=88=E9=98=B2=E6=AD=A2LLM=E5=B9=BB=E8=A7=89reject=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 根因:Reviewer对已通过测试的代码产生幻觉(编造不存在的函数), 导致正确结果被reject+回滚,bench全军覆没。 修复:tests_passed == tests_total时直接确认成功,不走Reviewer。 Co-Authored-By: Claude Opus 4.6 (1M context) --- kaiwu/core/orchestrator.py | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/kaiwu/core/orchestrator.py b/kaiwu/core/orchestrator.py index 93db488..e6fc923 100644 --- a/kaiwu/core/orchestrator.py +++ b/kaiwu/core/orchestrator.py @@ -674,14 +674,21 @@ class PipelineOrchestrator: ab_candidate_name, ab_used_new: bool, elapsed: float, checkpoint, on_status) -> dict: """Record success: memory, registry, trajectory, AB, value, milestone, reflection.""" - # Reviewer: 需求对齐审查 — 不对齐返回None让调用方重试 - review_result = self._do_review(ctx, on_status) - if review_result and not review_result.get("aligned") and review_result.get("confidence", 0) >= 0.7: - gap = review_result.get("gap", "") - self._emit(on_status, "review_reject", f"审查不通过:{gap}") - ctx.retry_hint = f"改错了:{gap}" - ctx.locator_output = None # 强制重新定位修复 - return None # 返回None信号给retry loop + # Reviewer: 需求对齐审查 — 测试全部通过时跳过(测试是最终裁判,Reviewer会幻觉) + v = ctx.verifier_output or {} + tests_passed = v.get("tests_passed", 0) + tests_total = v.get("tests_total", 0) + all_tests_pass = tests_total > 0 and tests_passed == tests_total + + if not all_tests_pass: + # 测试没全通过才需要Reviewer审查 + review_result = self._do_review(ctx, on_status) + if review_result and not review_result.get("aligned") and review_result.get("confidence", 0) >= 0.7: + gap = review_result.get("gap", "") + self._emit(on_status, "review_reject", f"审查不通过:{gap}") + ctx.retry_hint = f"改错了:{gap}" + ctx.locator_output = None # 强制重新定位修复 + return None # 返回None信号给retry loop checkpoint.discard() # 审查通过才清理快照