代码审查是高质量软件工程的支柱。在这个过程中,开发人员相互检查工作,以发现错误、确保风格一致性,并验证代码是否真正实现了提交信息中所描述的功能。
然而,如果你曾在软件团队工作过,就会知道现实情况: 代码审查是一项劳动密集型、耗时且容易出现人为错误的工作。
自然地,研究人员转向大型语言模型 (LLM) 来实现自动化。但这里有个问题。大多数现有的 AI 工具将代码审查视为简单的“输入-输出”任务——输入代码,AI 吐出评论。这忽略了一个基本事实: 代码审查是一个交互式的协作过程。 它涉及理解上下文、根据旧文件检查格式以及确保安全性——这些任务通常需要不同的“思维模式”。
在本文中,我们将深入探讨 CodeAgent , 这是由卢森堡大学和其他机构的研究人员提出的新框架。CodeAgent 不仅仅是要求 LLM “审查这个”。相反,它生成了一个由自主智能体组成的数字团队——从 CEO 到专业的审查员——他们相互交谈以产生全面的审查结果。
我们将分解这个多智能体系统是如何工作的,使其保持正轨的数学“QA-Checker” (问答检查器) ,以及表明这可能是自动化软件维护未来的结果。
问题所在: 为什么单智能体举步维艰
在查看解决方案之前,我们需要了解为什么标准的 ChatGPT 或 CodeBERT 提示 (prompt) 在复杂的代码审查中经常失败。
- 角色专业化缺失: 单一模型试图一次完成所有工作——检查语法、逻辑、安全性和格式。
- 提示漂移 (Prompt Drifting) : 在多步推理 (思维链) 中,LLM 经常“偏离”原始问题。它们可能会开始讨论安全漏洞,结果却虚构了一个破坏代码风格的修复方案,忘记了最初的约束条件。
- 上下文隔离: 自动化工具通常孤立地看待代码更改,忽略了新代码是否与原始文件的风格匹配,或者提交信息是否准确反映了更改。
CodeAgent 登场: 一个多智能体框架
CodeAgent 模仿了现实世界的软件公司。框架不是让一个 AI 完成所有工作,而是将特定的“角色”分配给不同的智能体。这些智能体相互沟通,共享信息,并审查彼此的输出。
公司结构
如下图所示,该系统模拟了一个包含六个不同角色的层级结构。

角色定义如下:
- User (用户) : 提交拉取请求 (PR) 的人类。
- CEO (首席执行官) : 处理高层决策和信息同步。
- CTO (首席技术官) : 提供高层技术见解和模态分析 (例如,识别编程语言) 。
- CPO (首席产品官) : 帮助将发现总结为最终报告。
- Reviewer (审查员) : 主力军。该智能体寻找特定问题,如漏洞或格式错误。
- Coder (程序员) : 负责实施建议的修订并协助审查员的技术专家。
流程管道
这些智能体如何协同工作?研究人员设计了一个四阶段的“瀑布 (Waterfall) ”管道。它确保在分析开始前收集信息,并在撰写文档前完成分析。

- 基本信息同步 (Basic Info Sync) : CEO、CTO 和程序员分析输入文件以确定语言 (例如 Python、Java) 和请求的性质。
- 代码审查 (Code Review) : 审查员和程序员进行反复对话以识别问题。这包括:
- 一致性分析 (CA): 代码是否实现了提交信息所述的功能?
- 漏洞分析 (VA): 是否存在安全风险?
- 格式分析 (FA): 风格是否与原始文件一致?
- 代码对齐 (Code Alignment) : 根据审查结果,程序员建议修改以修复错误或对齐格式。
- 文档 (Document) : 最后,CPO 和 CEO 帮助将对话综合成一份人类用户可读的报告。
秘诀: QA-Checker (问答检查器)
CodeAgent 最具创新性的部分不仅仅是使用了多个智能体——而是它如何防止智能体胡言乱语。
在多智能体对话中,“提示漂移”是一个主要问题。智能体 A 问一个问题,智能体 B 的回答稍微偏离主题,智能体 A 回应这个偏离的部分,很快审查就变得毫无用处了。
为了解决这个问题,研究人员引入了 QA-Checker (问答检查器) 。 这是一个监控对话流的监督模块。

QA-Checker 如何工作
QA-Checker 就像一个严格的版主。当智能体生成针对问题 (\(Q_0\)) 的回答 (\(A_0\)) 时,QA-Checker 会评估其质量。如果回答不相关或偏离了意图,QA-Checker 就会介入。
它生成一个附加指令 (\(aai\)) 并强制智能体重试。新问题变成了原始问题加上修正指令的组合。
数学基础
研究人员将这一机制建立在优化理论之上。他们将对话质量视为一个需要最大化的函数 \(\mathcal{Q}(Q, A)\)。
对话的更新规则模仿了 牛顿-拉夫森方法 (Newton-Raphson method) , 这是一种用于寻找函数根 (或在优化中寻找局部最大值/最小值) 的数学技术。
更新规则如下所示:

这里,\(\alpha\) 是学习率 (修正的幅度) 。涉及 \(H\) (海森矩阵) 和 \(\nabla\) (梯度) 的项表示将回答引导回相关性所需的“修正”的方向和幅度。
QA-Checker 基于三个指标评估回答的质量,这些指标合并为一个分数:

- 相关性 (Relevance) : 问题向量和回答向量之间的余弦相似度。
- 特异性 (Specificity) : 衡量回答的技术性和详细程度 (惩罚模糊的回答) 。
- 连贯性 (Coherence) : 回答在逻辑和语法上的流畅程度。
通过在对话的每一轮应用这种严格的检查,CodeAgent 确保“审查员”和“程序员”智能体不会分心,从而显著提高准确性。
实验结果
研究人员将 CodeAgent 与最先进的模型 (如 CodeBERT、GPT-3.5 和 GPT-4) 以及框架 (ReAct 和标准思维链) 进行了比较。他们在包括 Python、Java、Go 和 C++ 在内的九种编程语言上进行了测试。
1. 漏洞分析 (VA)
检测安全漏洞可能是最关键的任务。团队在超过 3,500 个真实世界的代码更改上运行了 CodeAgent。

结果令人震惊。
- 精度 (命中率) : 查看
Rate_cr(确认率) 这一行。CodeAgent 达到了 92.96% 的确认率。这意味着当 CodeAgent 说“这是一个漏洞”时,它几乎总是对的。 - 对比: GPT-4 的确认率仅为 51.42%。CodeBERT 更低,约为 20%。
- 不带 QA-Checker 的 CodeAgent: 最后一列显示了没有 QA-Checker 的系统。性能显著下降 (从 ~93% 降至 ~73%) ,证明监督智能体至关重要。
下面的维恩图显示了检测的重叠情况。CodeAgent 发现了 449 个已确认的漏洞,涵盖了其他模型发现的几乎所有问题,以及许多独特的问题。

2. 一致性分析 (CA)
一致性分析检查提交信息 (例如,“修复了登录中的错误”) 是否与代码更改实际匹配。如果信息说的是一回事,但代码做的是另一回事,那就是一个“负面”样本。

CodeAgent 的平均 召回率为 88.63% , F1 分数为 93.16% , 持续击败 GPT-4 和 ReAct 方法。这表明 CodeAgent 在“理解”自然语言描述与代码逻辑之间的语义联系方面要好得多。
3. 格式分析 (FA)
此任务检查新代码是否遵循现有文件的缩进和命名约定。

在这里,差距是巨大的。CodeAgent 将召回率比 GPT-4 提高了近 16 个百分点 。 标准的 LLM 经常忽略细微的格式差异,但在 QA-Checker 约束下的 CodeAgent 专用“审查员”角色会关注这些细节。
4. 代码修订 (CR)
最后,CodeAgent 真的能修复代码吗?研究人员测量了“编辑进度” (EP) ,该指标计算 AI 建议的修复方案与错误代码相比,在多大程度上接近正确解决方案。

CodeAgent 在各种数据集上实现了最高的编辑进度 (31.6%)。值得注意的是,像 Trans-Review 这样的其他工具工具有时会导致负进度 (使代码变得更糟) ,而 CodeAgent 保持了稳健性。
案例研究: 实战中的 CodeAgent
为了直观地了解其工作原理,让我们看看 CodeAgent 在一个 Python 项目上的实际输出。

在这个例子中:
- 变更: 开发人员将字典键从
user_id更改为user,将client_id更改为client。但是,他们也删除了一行检查auth.user_id的代码。 - 语义一致性: CodeAgent 正确地标记了身份验证检查已被删除,这在提交信息 (“重命名 client_id…”) 中未提及。
- 安全分析: 它标记了关于输入验证的潜在风险。
- 格式分析: 它注意到了缩进问题。
- 建议: 它提供了可操作的建议来修复这些不一致之处。
这种分析深度——将代码中缺失的逻辑与提交信息联系起来——是单智能体系统难以可靠实现的。
成本与性能
多智能体系统的一个权衡是成本和时间。由于多个智能体在相互“交谈”,因此与单个 API 调用相比,它使用的 token 更多,耗时更长。

如上所示,每次审查的执行时间在 250 到 450 秒 (4 到 7 分钟) 之间。虽然比 10 秒的 GPT 响应要慢,但对于 CI/CD 管道来说,考虑到审查的深度,这个时间框架是可以接受的。
研究人员还指出,运行 CodeAgent-4 (基于 GPT-4) 的成本 (每次审查 0.122 美元) 明显高于 CodeAgent-3.5 (0.017 美元) ,尽管性能优势是巨大的。
结论
CodeAgent 代表了我们在软件工程中思考 AI 方式的转变。我们正在从“智能自动补全”工具转向自主数字员工 。
通过定义特定角色 (审查员、程序员、QA) 并通过数学化的 QA-Checker 强制执行严格的对话质量,CodeAgent 解决了困扰许多 LLM 应用的“漂移”问题。它证明了一个被正确监督的智能体团队,其作用大于各部分之和。
对于进入该领域的学生和研究人员来说,CodeAgent 强调了一个至关重要的教训: 架构与底层模型同样重要。 你并不总是需要更聪明的 LLM;有时,你只需要一种让你的智能体相互交流的更好方式。
参考文献
- Tang, X., et al. “CodeAgent: Autonomous Communicative Agents for Code Review.”
- 数据和代码均可获取: https://github.com/Code4Agent/codeagent
](https://deep-paper.org/en/paper/2402.02172/images/cover.png)