上下文代码审查

发布: (2025年12月24日 GMT+8 22:00)
7 min read
原文: Dev.to

抱歉,我只看到了来源链接,缺少需要翻译的正文内容。请提供要翻译的完整文本,我会按照要求将其翻译成简体中文并保留原有的格式。

Source:

Contextual AI Code Reviews

AI 代码审查之所以失败,并不是因为 AI 本身弱,而是因为我们在没有上下文的情况下提出了错误的问题。
如果让 AI 在没有上下文的情况下审查你的代码,你会得到一份理想化的检查清单:

  • “考虑在这里添加空值检查”
  • “这个方法名可以更具描述性”
  • “安全性:验证用户输入”
  • “考虑使用依赖注入”

其中有些可能是合理的,但大多数都是噪音。AI 并不知道该服务运行在受保护的内部环境中,性能比可读性更重要,或者“命名不一致”是团队有意保留的旧有约定。

没有上下文,AI 只能依据抽象的理想进行审查。有了上下文,AI 才能依据你的实际需求进行审查。这一问题在审查人为编写的遗留代码时尤为突出——即在引入 AI 辅助之前编写的代码。

遗留代码库通常存在:

  • 不一致的命名空间约定
  • 随机演化的类名
  • 团队从未文档化的隐式约定
  • 团队有意识接受的技术债务

AI 会把这些全部视为“需要修复的问题”,但其中许多其实是已被认可的权衡,而非疏忽。如果编译器能够捕获某个问题,就把它排除在 AI 审查之外。每一个用于“缺少分号”或“未使用变量”的 token,都是没有用于有意义分析的 token——你的 linter 和 IDE 已经处理了这些问题。

审查视角

指定您希望 AI 使用的视角;否则它会标记在您上下文中并非问题的事项。

视角常见问题
逻辑检查代码是否按预期工作?
安全检查是否存在漏洞?输入验证是否充分?
性能检查资源使用是否最佳?算法复杂度是多少?
线程安全是否可能出现竞争条件、死锁或共享状态问题?
框架符合性是否遵循框架的模式?
架构适配是否适配现有结构?

在三层认证之后运行的服务不需要输入消毒警告。每天运行一次的批处理作业不需要微秒级的优化建议。

为 AI 提供上下文

在 AI 能够有效审查之前,它需要了解:

  • 该服务在架构中的位置在哪里?
  • 哪些安全边界对其进行保护?
  • 性能要求是什么?
  • 它连接了哪些外部接口?

示例上下文

This service runs in an internal VPC with no external exposure.
It processes batch data nightly; latency is not critical.
Input comes from a validated upstream service.

对于已知框架(ASP.NET、Spring、Rails),AI 拥有丰富的训练数据。对于自定义架构,AI 无法一次性完整把握其结构。在这种情况下:

  1. 人工管理范围——审查按层逐步进行。
  2. 检查新增/更改是否符合既定结构。
  3. 不要指望 AI 能从单个文件中理解你的整个自定义框架;需要逐步构建理解。

系统审查流程

  1. 加载系统上下文 – 位置、约束、接口。
  2. 加载结构上下文 – 架构、约定。
  3. 基线 – 确认现有问题并标记为已知。
  4. 定义审查视角 – 逻辑、安全、性能等。
  5. 根据定义的标准审查新更改

这不是提示;它是提示之前的准备阶段。

与质量模型对齐(ISO 25010)

选择与您审查相关的特性;不要每次都检查所有项目。

特性检查重点
功能正确性是否满足需求?
性能效率资源使用,响应时间
兼容性共存性,互操作性
可用性API 清晰度,错误信息
可靠性容错性,可恢复性
安全性机密性,完整性
可维护性模块化,可测试性
可移植性适应性,可安装性

基线分析后的决策制定

  • 如果周围的代码高度不一致,对新添加的代码要求严格一致性可能会产生摩擦且没有价值。
  • 如果一致性很重要,接受基线债务,但确保新代码不会使情况恶化。

此判断属于人为决策,不能完全交由 AI 处理。

方法 vs. 结果

方法结果
“审查此代码”(无上下文)理想化的噪声
有上下文的审查(带定义视角)相关发现

关键要点

  • 排除编译器可检查的问题;让 linter 处理它们。
  • 明确界定审查视角。
  • 在提示前加载系统和结构上下文。
  • 建立已知技术债务的基线。
  • 使用质量特性(例如 ISO 25010)作为聚焦检查清单。

通过提供上下文,AI 从一个吹毛求疵的批评者转变为有用的审阅者。此洞见是 Beyond Prompt Engineering 系列的一部分,探讨结构性和文化性方法如何在 AI 辅助开发中超越纯粹的提示优化。

Back to Blog

相关文章

阅读更多 »