如何评估AI代码质量:工程师实用指南

如何评估AI代码质量:工程师实用指南

💡 原文英文,约1600词,阅读约需6分钟。
📝

内容提要

本文介绍如何评估AI生成的代码,强调不能仅因代码运行就信任。核心方法包括:先写测试定义正确性、构建黄金数据集作为回归测试、多次运行测量可靠性、人工审查安全性和边界情况、将提示词变更视为代码变更并版本控制。最终建议将AI输出视为外部输入,通过快速验证而非盲目信任来确保代码质量。

🔎

延伸解读

为什么AI代码需要独立评估

AI模型基于大量公开代码训练,其中包含不良实践,因此可能生成看似合理但存在隐患的代码。与人类同事不同,AI无法提供上下文或解释,且输出具有非确定性,同一提示可能产生不同结果。因此,评估AI代码并非不信任AI,而是对进入代码库的任何代码应用相同的工程纪律。

测试先行:定义正确性

在让AI生成代码之前,先编写测试来定义正确性,这是测试驱动开发(TDD)在AI辅助工作流中的有效应用。通过预先定义预期行为,可以在代码生成后立即客观验证,而不是依赖肉眼检查。例如,为价格解析函数编写测试用例,可以快速发现AI实现中的缺陷,无需阅读实现细节。

黄金数据集:持续回归测试

黄金数据集是一组输入与已知正确输出的集合,作为AI功能的永久测试套件。它应包含代表性案例、边界案例和真实故障案例,尤其是生产环境中的bug。每次修改提示词或升级模型时,运行黄金数据集可防止回归。添加新故障案例到数据集,确保修复一个问题的同时不破坏其他功能。

可靠性测量与人工审查

AI输出非确定性,正确一次不代表总是正确。通过多次运行同一提示并统计通过率,可以评估可靠性,工具如promptfoo可自动化此过程。自动化测试无法覆盖安全性、可维护性和边界情况,因此需要人工审查,包括检查安全漏洞、未考虑的边界情况和过度工程化。

Q&A

为什么不能仅因为AI生成的代码能运行就信任它?

因为AI代码生成工具是非确定性的,同一提示可能产生不同输出,且可能生成看似合理但存在微妙错误或边界情况处理不当的代码。仅凭运行通过就信任,相当于未经测试就部署第三方代码,可能带来隐患。

在让AI写代码之前,应该先做什么来定义正确性?

应该先编写测试用例,定义正确的行为。例如,在让AI实现解析价格字符串的函数前,先写出针对各种输入(如'$12.99'、'$1,299.99'、空字符串等)的断言测试,这样AI生成代码后可以立即运行测试来验证正确性。

什么是黄金数据集?如何构建和使用它?

黄金数据集是一组已知输入和正确输出的集合,作为回归测试集。构建时从5-10个例子开始,包括代表性案例、边界案例和真实失败案例(如生产环境中的bug)。使用方法是每次修改提示词、升级模型或重构时,先运行黄金数据集,确保没有破坏已有功能。

如何测量AI代码的可靠性,而不仅仅是正确性?

由于AI输出非确定性,需要多次运行同一提示并统计通过率。可以使用工具如promptfoo,配置测试用例,运行多次(如10次),计算通过率。100%通过率表示可靠,低通过率则提示需要调整提示词。

AI代码通过测试后,人工审查应重点关注哪些方面?

人工审查应关注三个方面:安全性(如SQL注入、缺少输入清理、硬编码凭据)、边界情况(如空列表、null值、大输入、并发调用)、以及过度工程(如简单问题被复杂化)。可使用静态分析工具辅助检查。

为什么提示词变更应该像代码变更一样管理?

因为提示词是AI系统的组成部分,变更可能影响输出质量。应像管理代码一样,将提示词存储在文件中,纳入版本控制,并在变更后重新运行黄金数据集,以确保没有引入回归。

评估AI代码的核心心态是什么?

核心心态是将AI输出视为外部输入,而非可信代码。就像验证API响应或文件上传一样,对AI生成的代码保持怀疑,通过快速验证(写测试、建数据集、测可靠性、审查、版本控制)来确保质量,而不是盲目信任。

🏷️

标签

➡️

继续阅读