在微软,我们一直在寻找提高开发人员生产力和代码质量的方法。在这一领域,我们最具影响力的创新之一是 AI 驱动的代码审查助手 ------ 一款增强拉取请求(PR,pull request)审查的 AI 工具。这款 AI 助手最初只是一项内部实验,如今已扩展到支持公司内超过 90% 的 PR,每月影响超过 60 万个拉取请求。它帮助我们的工程师更快地发现问题、更早地完成 PR,并执行一致的最佳实践 ------ 所有这些都在我们标准的开发工作流程中进行。我们是与开发部门的数据和 AI 团队密切合作开发出这一功能的。内部积累的经验和知识被融入到 GitHub 的 AI 驱动代码审查服务中,现在让外部客户也从中受益。这是一个很好的例子,说明第一方(1P)创新如何塑造了第三方(3P)产品,以及外部使用如何持续为内部改进提供信息。
用 AI 解决 PR 审查中的实际问题
拉取请求(PR)是开发工作流程中的关键部分,但也存在一些问题。审查人员常常把时间花在低价值的反馈上,比如语法问题或命名不一致,而更有意义的问题 ------ 如架构决策或安全影响 ------ 可能被忽视或延迟处理。另一方面,作者可能难以提供足够的背景信息,特别是当 PR 规模较大或涉及多个文件时。还有规模方面的挑战:面对成千上万的开发人员和代码库,确保每个 PR 都能得到及时、彻底的审查并非易事。我们曾见过 PR 等待数天甚至数周才被合并,或者重要反馈被遗漏的情况。这些痛点促使我们尝试在审查过程中引入 AI 辅助。目标是让 AI 处理审查中重复性的或容易被忽视的方面,让人类审查人员能够专注于更高层次的问题。
我们的解决方案是将 AI 代码审查器集成到现有的 PR 工作流程中。每当创建一个拉取请求时,AI 助手会自动作为审查人员之一参与进来。它的功能如下:
- 自动检查和评论:AI 审查代码变更,并像人类审查人员一样留下评论。它会标记一系列问题 ------ 从简单的风格不一致和小错误,到更微妙的问题,如潜在的空引用或低效算法。例如,如果开发人员引入的一个方法没有妥善处理错误情况,AI 可能会在特定的差异行上给出警告并附上解释。这些评论会出现在 PR 讨论线程中,因此作者和其他审查人员都能看到并采取行动(就像同事发表的意见一样)。每个建议都有一个相关类别,例如异常处理、空检查、敏感数据等,这有助于理解相关影响。通过及早发现这些问题,AI 减少了人类同行的审查负担,并确保明显的问题不会被遗漏。
- 建议改进:除了审查之外,助手甚至会提出具体的代码改进建议。如果它识别出一个 bug 或不理想的代码模式,会提出更正后的代码片段或替代实现方案供作者采用。虽然它功能强大,但也设计了安全保障措施。当 AI 建议代码更改时,不会直接提交。作者仍拥有控制权 ------ 可以审查、编辑建议,并通过明确点击 "apply change" 选项来决定是否接受建议。所有更改都会记录在提交历史中,以保持问责制和透明度。
- PR 摘要生成:AI 还会生成 PR 摘要 ------ 本质上是 AI 撰写的对代码变更内容的描述。这解决了一个常见问题,即许多 PR 没有完善的描述。AI 会查看差异,并尝试解释变更的意图,突出关键变更。审查人员发现这非常有用:它帮助我们了解整体情况,而无需手动解读每个文件。
- 交互式问答("询问 AI"):审查人员还可以在 PR 讨论中与助手进行对话。如果代码中的某些内容不清楚,审查人员可以向 AI 询问有关代码的问题或请求阐明。例如,"为什么这里需要这个参数?" 或者 "这个变更对模块 X 有什么影响?"AI 可以分析代码并提供答案,就像一个随叫随到的知识渊博的共同审查员。
AI 审查器之所以有效,关键在于它能自然地融入现有的工作流程。它就像其他任何审查人员一样 ------ 无需学习新的用户界面,无需安装额外的工具。开发人员可以在 PR 线程中与它进行对话式交流,感觉就像团队中一个无缝的延伸部分。它甚至可以配置为在 PR 一创建就自动参与,作为第一个审查人员 ------ 随时待命,随时准备就绪。这种无摩擦的集成是其获得高采用率和产生巨大影响的关键。
对质量和速度的影响
AI 审查器的采用和影响是显著的。其带来的一些好处如下:
- 更快的审查周期:由于 AI 对每个 PR 进行初步审查,团队发现完成拉取请求的总体时间有所减少。根据早期实验和数据科学研究,5000 个采用 AI 代码审查器的代码库,其 PR 完成时间中位数提高了 10 - 20%。AI 通常在 PR 创建后的几分钟内就能发现问题并提出改进建议,这意味着作者可以及早解决这些问题,而无需等待人类审查人员的时间安排。这也意味着对于小的修复,来回沟通的次数减少,因此 PR 可以更快地获得批准和合并。
- 更高的代码质量:它通过在各个方面提供有关编码标准和最佳实践的指导,帮助提高代码审查的基准质量。在很多情况下,AI 标记出了可能被忽视的错误 ------ 例如,发现缺失的空检查或顺序错误的 API 调用,这些都可能导致运行时错误。通过在代码合并前发现这些问题,我们防止了下游可能发生的潜在事故。
- 开发人员学习:它可以像一位导师一样,审查每一行代码并解释可能的改进。特别是对于新员工,它可以作为有用的指南,加速他们的入职过程和对最佳实践的学习。
定制化:为团队量身定制审查
其提供的一个强大功能是可配置性和可扩展性。团队可以自定义体验,以提供特定于代码库的指导原则。此外,团队还可以定义特定于其场景的自定义审查提示。公司各团队正在利用这些定制功能进行专门的审查,例如根据历史崩溃模式识别回归问题,或确保具备发布和变更管控。
第一方和第三方解决方案的协同进化
一个很自然的问题是:微软内部的 AI 审查如何惠及更广泛的开发社区?作为 AI 驱动代码审查的首批采用者和内部测试者,我们很早就有了相关经验,能够根据工程团队的直接反馈,快速迭代改进审查质量、可用性和开发人员信任度。内部获得的见解、模式和成功案例不仅验证了 AI 辅助审查的价值,还有助于定义诸如内联建议和人机协作审查流程等体验。这个反馈循环对 GitHub 推出 Copilot 拉取请求审查功能起到了重要作用,该功能于 2025 年 4 月全面上市,为全球数百万开发人员带来了这些创新。
同时,使用 GitHub Copilot 进行拉取请求审查所收集到的经验教训正被整合到微软的内部开发流程中。这种协同演进确保微软的开发人员和更广泛的开发社区都能从代码审查领域的 AI 进步中受益。
最终思考
AI 驱动的代码审查是推动我们大规模改变代码审查方式的催化剂。通过将大型语言模型的力量与人类工作流程的严谨性相结合,它使开发人员能够更快地编写更好的代码。审查人员获得更深刻的见解,作者得到可操作的反馈,团队能够更有信心地前进。
而这仅仅是开始。随着在定制化和质量方面的持续投入,AI 有望重新定义微软的开发人员体验。展望未来,我们专注于加深其上下文感知能力 ------ 引入特定于代码库的指导、参考过去的 PR,并从人类审查模式中学习,以提供更符合团队规范和期望的见解。这将使审查人员能够完全专注于高价值的反馈,而 AI 处理主要的常规检查,从而简化审查流程,提高速度和一致性。这是一个我们所期待的未来 ------ 在 AI 的全程支持下,发布高质量代码变得更容易、更快速。
无论您是在微软,还是在更广泛的开发社区中贡献力量,AI 都能帮助您更智能地编写代码。尝试 GitHub Copilot 的代码审查功能,将 AI 融入您的工作流程吧。