通过所有测试的代码仍可能让下一个AI代理出错

通过所有测试的代码仍可能让下一个AI代理出错

💡 原文英文,约900词,阅读约需4分钟。
📝

内容提要

谷歌将Go语言定位为适合AI编程代理的语言,因其语法简洁、静态类型和工具链有助于代理自动纠错。然而,研究显示代理生成的代码虽通过测试,但更易导致后续维护困难,人类审查需更多轮次。Go的编译器、格式化工具和漏洞扫描可减少错误,但无法替代人类监督,也无法消除供应链风险。

🔎

延伸解读

通过测试不等于可维护

文章引用的研究表明,代理生成的代码即使通过了原始测试,在后续任务中仍可能导致代理成功率下降(最高达13.1%),且人类审查需要多11.8%的轮次。这说明测试通过只是基本门槛,代码的可理解性、错误处理等隐性质量对后续维护至关重要。开发者不应仅依赖测试结果,还需关注代码的长期可维护性。

AI审查建议采纳率低

一项针对近28万条审查对话的研究显示,人类审查者采纳AI建议的比例仅为16.6%,远低于人类建议的56.5%。且被采纳的AI建议往往导致代码规模和复杂度增加。这表明当前AI审查工具在提供简洁、可维护的修改建议方面仍有局限,人类审查者的判断力依然不可替代。

Go的防护并非万能

Go的编译器、格式化工具和漏洞扫描能减少特定错误,但无法识别代理是否误解需求或应用错误业务规则。此外,漏洞扫描受已知漏洞数据库限制,且无法消除供应链风险。因此,即使使用Go,人类监督和供应链安全审查仍是必要环节。

Q&A

谷歌为什么认为Go语言适合AI编程代理?

谷歌认为Go语言适合AI编程代理,因为其语法简洁、静态类型系统和集成开发工具(如编译器、格式化工具gofmt、漏洞扫描govulncheck)能帮助代理自动发现和修复错误,减少生成代码的潜在问题。

Go语言的编译器能完全保证AI代理生成的代码正确吗?

不能。Go编译器只能检查结构错误(如不存在的函数、类型错误),但无法判断代理是否误解了任务、应用了错误的业务规则或向错误用户暴露了信息,因此仍需人类监督。

Go语言提供了哪些工具来帮助AI代理减少错误?

Go提供了gofmt(统一格式化)、原生模糊测试、govulncheck(漏洞扫描)、校验和数据库(检测模块篡改)以及gopls语言服务器(通过MCP向AI工具发送编译错误和分析),还有go fix(自动更新旧代码)。

根据研究,AI代理生成的代码在维护性上有什么问题?

研究表明,AI代理生成的代码虽然通过了原始测试,但在后续维护中更容易导致问题:代理在基于先前代理编写的代码上完成任务的成功率较低(差异最高达13.1%),且人类审查代理代码时需要多11.8%的审查轮次。

人类审查者如何对待AI代理生成的代码?

人类审查者更倾向于质疑AI代码的测试、理解和知识迁移,且对AI建议的采纳率较低(16.6%对比人类建议的56.5%),当采纳AI建议时,代码大小和复杂度增加更多。

Go语言能否完全消除软件供应链风险?

不能。虽然Go的校验和数据库和漏洞扫描可以降低风险,但漏洞扫描受限于已知漏洞数据库,且无法消除所有供应链风险,例如模型可能推荐过时或废弃的包。

🏷️

标签

➡️

继续阅读