最近,开源中国 OSCHINA、Gitee 与 Gitee AI 联合发布了《2024 中国开源开发者报告》。报告聚焦 AI 大模型领域,对过去一年的技术演进动态、技术趋势、以及开源开发者生态数据进行多方位的总结和梳理。查看完整报告:2024 中国开源开发者报告.pdf
在第二章《TOP 101-2024 大模型观点》中,蚂蚁集团程序分析团队技术专家,香港科技大学博士谢筱恒探讨了大模型生成代码的安全性与质量问题,并分析相关技术手段与未来发展方向。全文如下。
大模型生成代码的安全与质量
文/谢筱恒
随着人工智能技术的快速发展,基于大型预训练模型的代码生成工具,如OpenAI的Codex和GitHub的Copilot,已成为开发者的重要助手,能显著地提升开发者的开发效率。
然而,这些工具在带来便利的同时,也带来了代码安全性和质量的新挑战。根据IDC数据,82%的开发者已使用带有智能代码生成功能的工具,而这些开发者中的71%表示其超过40%的代码由这些工具生成。
GitClear研究检查了2020年1月至2023年12月间最初编写的1.53亿行代码,在AI辅助编程用户激增期间,代码翻转(即需在两周内修复或恢复的代码)情况明显增加,这也表明代码稳定性在下降。
同时,Snyk的调查显示,超半数组织“偶尔”或“频繁”地遭遇了因低质量AI生成代码引发的安全问题。
本文将探讨大模型生成代码的安全性与质量问题,并分析相关技术手段与未来发展方向。
大模型生成代码的常见安全和质量问题
大模型基于Transformer架构,经过大规模代码数据集的预训练,能够理解并生成符合上下文逻辑的代码。然而,这些模型并不具备真正的编程理解能力,而是通过学习大量代码样本中的模式进行生成。因此,生成的代码可能存在如下的安全和质量问题。
代码质量不稳定。大模型生成的代码有时存在语法错误、逻辑问题或无法通过测试的情况。例如,生成的代码可能缺少必要的语法元素(如括号、分号)而无法编译,或在运行时因逻辑错误导致意外行为。此外,许多生成的代码在功能测试中无法通过,增加开发者的修复工作量,降低了效率。
缺乏上下文理解。大模型通常基于输入的表面模式生成代码,缺乏对业务逻辑和系统架构的深度理解。这导致生成的代码可能不符合项目的整体编码规范,无法正确调用已有模块或接口,甚至与现有功能重复。在复杂项目中,这种缺乏上下文的生成方式使代码的直接可用性较低,开发者需要投入额外精力进行适配和修改。
安全隐患。生成代码在处理用户输入、文件操作和网络请求等敏感操作时,容易忽略安全性,导致潜在漏洞。例如,未对用户输入进行验证可能引发SQL注入或XSS攻击,文件路径处理不当可能导致目录遍历或未授权的文件读写,网络请求中未正确加密数据可能导致信息泄露。这些问题增加了代码在生产环境中的风险,可能被恶意利用。
法律和版权问题。大模型生成的代码可能基于公开代码库或开源项目,而这些代码可能受到版权保护,存在侵权风险。例如,生成的代码可能直接复制开源代码片段,未遵守相关开源协议,或与受版权保护的代码高度相似,从而引发法律争议。这可能导致开发者或组织面临知识产权诉讼及相关损失。
影响大模型生成代码质量的因素
模型训练数据的质量。大模型的代码生成能力极大程度依赖于训练数据的质量。如果模型训练时使用的数据集包含不良的代码模式、不规范的编码风格或者过时的技术,生成的代码往往会继承这些问题,导致质量较差。例如,模型可能生成带有潜在安全漏洞的代码(如未验证用户输入的SQL查询),或使用已经被淘汰的技术框架和方法(如不安全的加密算法)。此外,训练数据中若缺少高质量的代码示例,生成结果可能在可维护性、性能和测试性方面表现不佳。
上下文理解的局限性。大模型的代码生成通常基于短期上下文(如用户输入的一段描述或代码片段),缺乏对整体系统架构和长期上下文的理解。这种局限性使得其在复杂项目中难以生成高质量的代码。例如,在大型软件项目中,模型可能忽略全局变量的依赖关系、模块间的交互逻辑或编码规范,导致生成的代码无法融入现有的系统环境。此外,模型难以理解业务需求背后的深层逻辑,可能生成表面上正确但实际不可用的代码,从而给开发者带来额外的修改和调试工作。
缺乏调试能力。与人类开发者不同,大模型无法主动调试或验证自己生成的代码,因而可能生成带有隐藏逻辑错误的代码,而这些错误往往难以快速定位和修复。例如,生成的代码可能在边界条件下表现异常,或者因函数调用错误导致运行时崩溃。这种缺乏调试能力的特性,使得开发者需要手动排查生成代码的潜在问题,增加了工作负担。此外,生成代码可能未遵循最佳实践(如缺乏注释或测试用例),进一步加大了调试难度。
如何保障大模型生成代码的安全与质量
为提升大模型生成代码的安全性与质量,业界与学术界提出了多种解决方案,涵盖工具研发、模型改进和技术研究等多个方面。
生成代码的安全性验证与质量评估。工业界已开发了多种代码分析工具,如Black Duck和AWS提供的服务,能够帮助开发者检测并修复AI生成代码中的安全漏洞。工具如CodeQL和CodeFuse-Query支持通过自定义查询快速定位安全隐患,并以高性能的语法和语义分析能力提供实时反馈。这些工具不仅速度快,还支持定制化查询,并能无缝集成到开发环境和持续集成工具链中,自动化地检查和优化生成代码的安全性与质量。此外,研究者也在探索通过形式化验证、符号执行等技术对生成代码进行安全审查,并利用AI自动评估代码质量,特别是关注可维护性和性能等指标。
结合安全编码实践的生成模型。将常见的安全编码准则融入大模型的训练中,是提升生成代码安全性和可靠性的关键。例如,通过在模型训练数据中引入安全编码示例,增强模型在处理用户输入、文件操作、网络请求等场景下的安全性。同时,近年来的研究还表明,结合大模型的程序语义理解能力,通过提示工程技术,可以引导模型输出更高质量的代码分析结果,如检测源代码中的潜在漏洞。这类研究不仅提升了大模型的代码分析能力,也为开发者提供了新的技术手段。
自动调试与修复功能的集成。开发集成自动调试与修复功能的代码生成工具,是保障代码质量的重要方向。这些工具可以在代码生成后,自动检测并修复潜在错误,减少开发者手动修复的负担。例如,CodeFuse的编译诊断修复Agent可以基于代码分析发现质量和安全问题,然后基于预设规则或模型预测直接修复漏洞,从而提高代码的稳定性和可用性。
多模态模型的应用与上下文理解。未来的代码生成模型可能结合代码、自然语言和图像等多模态信息,进一步提高生成代码的准确性和上下文理解能力。例如,通过结合项目文档、架构设计图和代码片段,模型可以更全面地理解开发环境,从而生成更符合业务逻辑或系统架构的代码。
可解释性与审计功能的增强。提升代码生成模型的可解释性与透明性是增强信任度的核心方向。例如,通过提供审计机制,开发者可以追溯生成代码的来源并了解模型的决策过程。这不仅有助于发现潜在问题,还能帮助开发者更高效地验证代码的安全性和质量。
结语
大模型生成代码在提高开发效率、降低编程门槛等方面展现出了巨大的潜力。然而,代码的安全性与质量问题仍然是亟待解决的挑战。通过结合静态分析、强化学习、模型优化等技术手段,可以在一定程度上提升生成代码的安全性和质量。
未来的研究应聚焦于模型的可解释性、安全性优化、多模态融合等方向,以充分发挥大模型在代码生成领域的优势。同时,开发者在使用大模型生成代码时,应保持审慎态度,结合自身专业知识,对生成的代码进行仔细的审查和测试,确保代码的可靠性和安全性。
作者简介:
谢筱恒
蚂蚁集团程序分析团队技术专家,香港科技大学博士。蚂蚁程序分析团队致力于打造蚂蚁的先进、专业、普惠的程序分析系统,过去四年团队发表30+篇国际顶会论文,技术能力广泛应用于变更影响评估、安全风险检测、代码自动修复、构建程序知识图谱以及智能问答系统等多个方面。在智能研发时代,我们正在全力推进软件工程和AI智能结合的技术演进,努力帮蚂蚁打造软件工程3.0时代的研发新范式。
《2024 中国开源开发者报告》由开源中国 OSCHINA、Gitee 与 Gitee AI 联合出品,聚焦 AI 大模型领域,对过去一年的技术演进动态、技术趋势、以及开源开发者生态数据进行多方位的总结和梳理。
报告整体分为三章:
- 中国开源开发者生态数据
- TOP 101-2024 大模型观点
- 国产 GenAI 生态高亮瞬间
查看完整报告,请点击 :2024 中国开源开发者报告.pd