LLM生成的代码通常可以编译、通过测试,并且看似正确,但在部署后却会出现问题。根本原因往往是结构性而非逻辑性。生成的端点可能引用了项目中未声明的配置键,导入了在任何注册表中都不存在的包,或者新的路由遗漏了应用于每个兄弟端点的身份验证保护。每个补丁在局部上是有效的,但在全局上却不一致,标准的CI工具链很少能发现这些失败。随着LLM驱动的编码工具得到广泛采用,这一盲点对软件质量构成了日益增长的风险。我们称之为拼接问题。
本文将结构一致性形式化为关于仓库工件的图表示的相容性不变式,包括导入、调用、依赖、配置、模式、资源、控制流和路由图,并引入了一个八类失败分类法,将特定于LLM生成的缺陷与仅被其放大缺陷区分开来。我们提出了一种混合验证框架,该框架在成熟的静态分析工具表现良好的领域委托其工作,并部署专门构建的检测器以处理现有工具链未能覆盖的交叉不变式,目标是可证明的约束违反,而不是启发式模式匹配。
在四种提示策略下对两个前沿模型的实证评估表明,绝大多数结构性失败完全逃避了类型检查、测试和静态应用安全测试(SAST),且失败模式在模型之间的定性差异挑战了模型无关的缓解策略。对真实世界AI生成仓库的外部验证确认,这些失败并不是控制实验的伪影,而是在LLM以最小人类监督编写代码的地方普遍存在。
博主点评: 这一研究揭示了LLM生成代码中潜在的结构性缺陷问题,尤其是随着这种技术的普及,如何确保代码的整体一致性成为了一个亟待解决的挑战。通过引入图表示和混合验证框架,提供了一种可能的解决方案,值得开发者和研究人员关注。