批判循环 本节摘要:第一次返「看着不错」的批判是坏的;总返「要改」的批判也是坏的。有趣的批判是会收敛的,而你得工程化收敛。本节跨五个固定维度(清晰度、新颖度、证据、方法、相关工作)给论文草稿打分,把每轮的批判作结构化修订 diff 施加(非自由重写),通过跨轮比分检测收敛(在 plateau/target/budget 停),用 max-iteration 上限封轮数使不收敛的批判不永远跑,发每轮 trace 使仪表盘或下一阶段能绘分轨迹。自由形式批判是返建议段的模型,下一轮修订把段当环境上下文,改写是否触及批评不可验,因批评从无结构。五维给框架契约:分是向量,框架跨轮盯每维;升清晰度但垮证据是证据上的回归,收敛检查看见。
本节摘要:第一次返「看着不错」的批判是坏的;总返「要改」的批判也是坏的。有趣的批判是会收敛的,而你得工程化收敛。本节跨五个固定维度(清晰度、新颖度、证据、方法、相关工作)给论文草稿打分,把每轮的批判作结构化修订 diff 施加(非自由重写),通过跨轮比分检测收敛(在 plateau/target/budget 停),用 max-iteration 上限封轮数使不收敛的批判不永远跑,发每轮 trace 使仪表盘或下一阶段能绘分轨迹。自由形式批判是返建议段的模型,下一轮修订把段当环境上下文,改写是否触及批评不可验,因批评从无结构。五维给框架契约:分是向量,框架跨轮盯每维;升清晰度但垮证据是证据上的回归,收敛检查看见。
对应原课程:Phase 19 · Lesson 55 ·
critic-loop(原英文phases/19-capstone-projects/55-critic-loop/docs/en.md)。本节属「AI Scientist」赛道第六节。
阅读完本节,你应当能够:
自由形式批判是返建议段的模型。下一轮修订把段当环境上下文,改写是否触及批评不可验,因批评从无结构。五维给框架契约:
分是向量。框架跨轮盯每维。升清晰度但垮证据的修订是证据上的回归,收敛检查看见。只有模型的批判给不了这保证。
每建议带它改进的维度、目标的节、与修订器可施加的 edit 指令。修订器也是可调用对象。本节发确定性修订器,把 edit 指令解为追加到节。模型驱动的修订器会把同字段解为提示。契约不变。
批判循环在三条件任一触发时终止:
target 最严:五维(清晰度/新颖度/证据/方法/相关工作)都须 >= target_score(默认 8.0)才返成功。高均值但一维弱不够。plateau 检测比当前轮均值与上轮均值,改进低于 plateau_epsilon(默认 0.1)连续两轮则 plateau 退出。budget 是轮数硬上限(默认 5)退出。序要紧:target 胜 plateau 胜 budget——若第三轮同迭代既达 target 又会触发 plateau,结果是 target 非 plateau。
一轮 plateau 是噪声。真批判即便对固定草稿每迭代返略不同的分,因确定性打分仍依赖哪些建议被施加及顺序。要求连续两轮 plateau 滤掉噪声。框架报 plateau 则草稿真停改进了。
本节不调模型。发的批判器是可调用对象,基于三信号打分:平均节正文长(清晰度)、图数与引用数(证据)、论文元数据的 originality_tag 字段(新颖度)。修订器知如何推每分上:
clarity 随平均节正文长增而长 novelty 随 originality_tag 设为 "high" 而长 evidence 随某节 figure_refs 非空而长 methodology 随存在带正文的 "Method" 节而长 related-work 随存在带正文的 "Related Work" 节而长
修订器把每建议解为目标追加。第一轮后框架可观察分上升。测试用此性质断言循环缩差距。
框架拥有轮计数器、trace、收敛检查。批判器拥有分。修订器拥有 diff。三者不触他者状态。
code/main.py 定义 Critique、Suggestion、Critic 协议、Reviser 协议、CriticLoop、make_deterministic_critic_pair 工厂(返确定性批判器与匹配修订器),含最小 Paper 形状使本节独立。
class CriticLoop: def run(self, draft, max_rounds=5, target=8.0, plateau_eps=0.1): trace = [] for r in range(1, max_rounds + 1): crit = self.critic(draft, round=r) # 分向量 + 建议 draft = self.reviser(draft, crit.suggestions) # 结构化 diff trace.append(TraceEvent(r, crit.scores, len(crit.suggestions))) reason = self._converged(crit.scores, trace, target, plateau_eps) if reason: return CriticResult(draft, trace, reason) return CriticResult(draft, trace, "budget")
设计要点:trace 优先设计防坏批判——产永不改进分的建议的批判器会把循环锁进 max-iteration 上限,trace 使这可见(五轮分平、verdict budget),用户读作批判 bug 非草稿 bug;只露终稿的替代隐藏诊断。五维分向量使收敛可验:升一维垮另一维是回归,框架看见。target/plateau/budget 序要紧,边界冲突时 target 胜。
真实学术批判工具(OpenReview 自动审稿、ReviewerGPT、Elicit)用 LLM 打分,但结构化分向量是共同抽象。多智能体辩论(多批判器互审)是单批判器的扩展,需仲裁。本节的 Critic/Reviser 协议使批判器与修订器可换——mock 替真 LLM,契约不变。自我修正(self-refine)文献的核心发现:结构化反馈比自由文本反馈收敛快、可测。本节确定性批判器的价值是断言单调改进——真 LLM 随机,先在 mock 上把循环契约跑通再换真模型。维度权重是扩展(研讨会论文权重新颖度高于方法,期刊反之),加权均值替简单均值,契约不变。
code/main.py + code/tests/test_critic_loop.py(覆盖第一轮后单调改进、调好草稿的 target 收敛、两轮平后的 plateau 检测、无建议改进时的 budget 耗尽、修订器施加建议、trace 形状)。CriticLoop.run(draft) 是编排器入口,返 CriticResult(终稿、trace、收敛理由)。trace 供第 54 节迭代调度器读,决定分支是否值得留。换真批判器(真 LLM 打分),循环与收敛逻辑不动。
plateau_eps 从 0.05 到 0.3,观察退出轮数与最终分。下一节,我们做「迭代调度器」——假设队列喂并行实验槽,UCB 评分剪低产分支,结果扇回重排队列。