新功能介绍:Jules 最敏锐的批评者和最有价值的伙伴

2025年8月12日
Kathy Korevec Director of Product Google Labs
Mehadi Hassen Research Engineer
Yiguang (Amanda) Zhang Research Engineer

Jules 这样的 AI 编码代理可以在您专注于其他事情的同时构建、重构和临时搭建代码。虽然其便利性和易用性令人爱不释手,但有时也会导致细微的错误、边缘案例缺失和未经测试的假设。为此,我们在 Jules 中引入了一项新功能,即在输出代码之前对其进行审查和批评。


批评增强生成

批评者角色虽然简单却功能强大:当 Jules 构建代码时,批评者功能会提出质疑。提出的每项更改在应用前都要经过抗辩式审核。批评者就像 Jules 的同行评审员,该角色非常熟悉代码质量原则,并且当您重蹈前人覆辙时,会大胆指出。

批评者直接集成到代码生成过程中,这称为批评增强生成。这次的首发版本会在单次生成中一次性评估最终输出。未来我们计划使其成为真正的多步骤代理,让它能够使用工具调用或在子任务之后或计划之前开始工作,但目前该功能仅能一次性审查整个生成过程。多步骤审核将利用多步骤研究,其中批评者使用外部工具(如代码解释器或搜索引擎)验证输出,并从这些结果中学习。


批评者的工作

批评者不会修复代码,而是标记代码,然后将其交还给 Jules 进行改进。例如:

  • 一个补丁通过了所有测试,但引入了一个微小的逻辑错误:“输出与预期情况匹配,但若输入不可见,则会失败。”

  • 一项编译某个必填字段但会将其静默删除的更改:“函数签名已更新,但仍有参数未处理完毕。”

  • 有效用但效率低下的代码:“算法产生正确的结果,但具有不必要的 O(n²) 复杂性。”

因为这发生在生成补丁之后和提交之前(如果仍然被标记,可能是发生多次),所以 Jules 可以实时重新规划。我们的目标是减少低质量 PR,扩大测试覆盖范围,并提高安全性。


并非新 Linter 或测试

Linter 代码分析工具遵循简单、固定的规则,而测试是验证特定的断言。批评者功能可以理解代码背后的意图和上下文,更接近于无参考的评估方法,可以判断正确性和稳健性,而不需要您拥有完美的实现。

批评者还从 LLM-as-a-judge 的研究中汲取线索,在该研究中,一个模型评估另一个模型的质量和正确性。当与生成紧密集成时,这种自动判断特别有用,可以将审核转化为实时反馈循环。


其工作原理如下:

1 :您提示 Jules 开始一项任务。

2 :批评者功能一次性审核候选补丁及其描述,做出整体判断。

3 :Jules 在完成前回复反馈,之后批评者可以再次查看更新后的补丁,并继续标记其认为必要的任何内容,直到没有其他问题。

4 :您收到已经过内部审核的代码。

该功能受执行者-批评者强化学习 (RL) 的启发,其中“执行者”生成内容,“批评者”评估内容。在 RL 中,此循环根据学习信号更新执行者和批评者。我们的 LLM-as-critic 设置也具有相似模式:提出,然后评估。但是,反馈不会更新学习参数,而是会影响当前状态和后续步骤。这一原则也是 LLM-as-a-judge 研究的基础,其中批评者的评估在不进行再训练的情况下指导质量。


意义

在快速变化的世界中,批评者将审核提前到流程的早期阶段,并将其转化为生成行为本身。这意味着您审核的代码已经过质询、完善和压力测试。当然,在正式使用之前,您应始终仔细检查生成的代码。

优秀的开发者不仅编写代码,还质疑代码。现在,Jules 也是如此。