PromptQuorumPromptQuorum
主页/提示词工程/面向AI的构建质量检查:检测幻觉与伪造依赖项
基础知识

面向AI的构建质量检查:检测幻觉与伪造依赖项

·阅读约10分钟·Hans Kuepper 作者 · PromptQuorum创始人,多模型AI调度工具 · PromptQuorum

AI生成代码在大规模应用中无法通过传统质量门控:研究和行业报告一致发现,AI编写的程序包含可利用漏洞的比例明显高于经过人工审查的代码,且AI建议的包或API中有一定比例根本不存在。 要将这些幻觉拒之于生产环境之外,构建质量检查必须从通用的"测试+覆盖率"门控演进为AI感知流水线,在合并前检测不存在的API、伪造依赖项以及看似正确实则有误的逻辑。

关键要点

  • AI生成代码引入了传统质量门控无法检测的新故障模式:幻觉API、伪造依赖项以及破坏需求的逻辑。
  • 将幻觉视为结构性风险:假设它们会在任何允许AI编写或重构代码的地方出现,并设计测试和策略来检测它们。
  • AI感知门控架构分层叠加:预提交检查、PR级策略、深度CI分析、安全和依赖项门控、运行时反馈。
  • 具体的AI专用检查包括:依赖项存在性检查、API实存验证、新代码更高覆盖率阈值,以及AI修改文件的更严格安全门控。
  • 对开发者友好的门控应清晰解释失败原因、区分警告与硬性阻止、支持有文档记录的覆盖,并调整以最小化嘈杂的误报。

AI编写代码会带来哪些变化?

当AI编写代码时,质量门控必须防御一类新问题:幻觉API、伪造依赖项,以及看起来正确但在运行时或攻击下失败的模式。 这与lint和单元测试设计检测的问题在结构上截然不同。

截至2026年第二季度,这些问题在不同语言和模型中被持续报告。AI生成代码中观察到的问题包括:

  • 安全漏洞: 研究和行业报告一致发现,AI生成的解决方案包含可利用漏洞的比例高于经审查代码,尤其在输入验证、认证和加密方面。
  • 伪造包: 当语言模型不知道正确名称时,有时会推荐生态系统中不存在的库或包名,为"投机注册"攻击创造机会。
  • 幻觉API和函数: 模型可能发明看似合理但在实际SDK或内部服务中不存在的方法、参数或配置标志。
  • 违反需求的逻辑: 能编译并通过表面测试,但与原始需求相比做了错误的事(例如混淆`amountDue`和`amountPaid`)。
  • 不安全的默认值: 使用宽松CORS规则、允许性JWT验证、弱密码策略或敏感数据调试日志等不安全模式。

🔍 快速事实

AI生成行推荐≥80%覆盖率阈值。5阶段门控架构:预提交 → PR审查 → CI → 安全 → 运行时监控。要求更改文件上零新增高危/严重问题。

⚠️ 投机注册风险

当AI模型发明了一个不存在的包名时,攻击者可以用恶意代码注册该名称。一旦团队运行npm install或pip install,该包就会在构建环境中执行任意代码。另请参阅:提示注入与安全

传统检查(lint、单元测试、覆盖率阈值)能捕获其中一些问题,但并非为自信的幻觉行为而设计。

门控必须捕获哪些幻觉类型?

📍 In One Sentence

代码幻觉是指AI生成的输出(包名、API方法、配置标志或算法)与您环境中实际存在或有效的任何内容不对应。

💬 In Plain Terms

就像AI自信地给出通往一条不存在的街道的路线一样。路线看起来合理,但按照它走只会走到没有路的地方——或者更危险的地方。

代码幻觉不仅仅是语法错误,还包括经常能通过表面检查的逻辑、结构和依赖项级别的伪造。 设计有效的门控需要理解每个类别。有关在提示层面减少幻觉的技术,请参阅AI幻觉:如何阻止它们

设计时需考虑的常见类别:

  • 逻辑幻觉: 错误的算法、缺少边界情况处理、在真实数据上崩溃的"仅处理正常路径"代码。
  • 映射/类型错误: 对域对象之间类型或映射的错误假设,导致微妙的数据损坏。
  • 命名混乱: 变量或函数名以仍能编译但违反域规则的方式被调换或误用。
  • 资源幻觉: 无限制的内存或CPU使用(例如将整个表加载到内存中),忽视性能约束。
  • API/库幻觉: 调用库或服务实际版本中不存在的方法、端点或配置选项。
  • 安全幻觉: 看起来结构化且"安全感"十足,但悄悄省略了授权、清理或限流等关键检查的代码。

🔍 结构性 vs 语法性

幻觉API调用能干净地编译并通过静态分析。只有运行时执行或SDK感知的linting才能捕获它。这就是为什么需要在lint和单元测试之外添加额外层次的原因。

一个健壮的构建系统应当假设这些问题会在任何允许AI编写或重构代码的地方出现。

AI感知CI/CD门控架构是什么样的?

AI感知构建质量检查应形成多阶段门控:预提交过滤器、PR级策略检查、CI中的深度分析以及部署后监控。 没有任何单一阶段能捕获所有故障模式。

实用架构:

  • 预提交/本地钩子 — 强制执行基准格式和linting。可选择禁止直接提交没有人工编写摘要的大型AI生成diff。
  • 拉取请求质量门控 — 在正常检查之上添加AI专用检查:单元测试、覆盖率阈值、风格、常规静态分析,加上AI感知检查(检测未知或不存在的包、验证引用的API存在、标记无测试的新端点)。
  • 深度CI分析 — 对AI修改的代码运行扩展测试套件和基于属性的测试。将安全扫描器(SAST/DAST)重点应用于新修改的代码路径。分析复杂度和潜在性能热点。
  • 模式和漂移检测 — 将新代码与已建立的项目模式(架构、错误处理、日志记录)进行比较。标记与通常惯用语大幅偏离的代码。
  • 安全和依赖项门控 — 要求安全工具对更改行报告"零新增高危或严重漏洞"。如果新依赖项未经批准、未固定版本或来自可疑来源,则阻止构建。
  • 运行时监控和反馈 — 跟踪最近由AI辅助变更修改的端点的错误率、延迟和资源使用情况。将事件反馈到提示和质量规则中以随时间强化门控。

🔍 从依赖项验证开始

首先实现依赖项存在性检查——ROI最高、最容易添加、零误报。在引入下一个门控之前,每个后续门控都应该是可测量和可调整的。

这种分层方法将AI生成代码视为一等风险类别,而不仅仅是"更多代码"。

应该为AI生成代码添加哪些具体检查?

要使质量门控具备AI感知能力,请在现有测试和覆盖率规则之上添加针对幻觉、依赖项伪造和不安全默认值的显式检查。 这些可以作为策略即代码集成到任何CI/CD系统中。

可执行策略示例:

  • 测试和覆盖率 — 新增或更改行的最低覆盖率(例如≥80%)。所有新公共端点、后台任务或导出函数的强制测试。
  • 安全门控 — 变更代码的SAST或依赖项扫描器零新增高危/严重问题。要求对涉及认证、支付、管理功能或个人数据的AI生成代码进行人工审查。工具指导:AI代码审查:工具与验证
  • 依赖项合理性检查 — 新包必须存在于目标注册表中,并满足最低成熟度信号(下载量、star数、最后发布日期),除非明确加入白名单。已知的投机注册包立即使构建失败。
  • API实存验证 — 静态分析以确保所有调用的方法和端点在代码库或已文档化的SDK中存在。可选:在敏感区域限制使用已批准API的白名单。
  • 模式和性能检查 — 强制执行标准错误处理和日志记录包装器。标记在大数据路径上具有明显O(n²)/O(n³)模式的异常高复杂度新增函数。

🔍 覆盖率阈值

对AI生成行应用比遗留代码更严格的覆盖率阈值。遗留代码60%覆盖率可能可以接受;新AI生成代码在合并前应达到≥80%。

其中许多可以作为CI系统中的策略即代码、自定义linter或专用插件来实现。

如何在流水线中显式处理幻觉?

幻觉是结构性缺陷类别,不是临时性错误;您的构建系统应假设它们会发生,并专注于检测和遏制。 这种心态决定了您优先考虑哪些工具和测试。

实用策略:

  • 基于执行的验证 — 不要仅依赖编译。运行针对AI生成代码的有针对性测试,使用边界情况、无效输入和随机化数据进行压力测试。基于属性的测试对于暴露逻辑和映射错误特别有效。
  • 用真实上下文进行接地 — 使用AI提议变更时,提供真实的模式、API规范和配置文件作为上下文。这减少了发明函数和参数的可能性,并使检测生成代码何时偏离现实变得更容易。
  • 混合静态 + AI分析 — 将传统静态分析与AI审查相结合。静态工具擅长数据流和污点分析;AI审查者擅长读取意图并发现更高层次的需求不匹配。
  • 多模型交叉检查 — 对于重要变更,让一个模型生成代码,另一个模型审查它。审查者不同意或表示低置信度的地方可以标记供人工关注。
  • 幻觉黑名单和规则 — 当您发现反复出现的幻觉模式(假包名、编造的标志、发明的端点)时,将它们编码为显式规则。未来出现则触发自动构建失败或强烈警告。

⚠️ 编译 ≠ 正确性

AI生成函数可以干净地编译、通过所有现有测试,却仍然悄悄误实现需求。始终用至少一个在逻辑被反转或微妙错误时会失败的测试来测试新代码路径。

通过将幻觉视为预期的缺陷类别,您可以设计能可靠捕获它们的测试和门控。

如何让AI质量检查对开发者友好?

质量门控只有在开发者信任它们时才有效;AI感知检查应该透明、清晰解释失败,并避免嘈杂的误报。 高误报率会导致团队完全禁用或绕过门控。

指导原则:

  • 解释每次失败的"原因" — 错误消息应准确显示哪行或哪个包违反了哪个规则,并最好链接到如何修复或覆盖的文档。
  • 区分硬阻止和警告 — 对于新规则,以"警告"模式开始以收集数据并减少挫败感;只有在信噪比可接受后才升级为"阻止"。
  • 允许有文档记录的覆盖 — 一些AI生成的变更会是有意为之的风险或异常情况。提供有文档记录的覆盖机制(例如带标签的注释加上工单链接),让团队在适当时可以继续推进,同时留下审计记录。
  • 衡量误报并迭代 — 跟踪门控阻止有效变更或强制不必要工作的频率。在需要时调整阈值、精化规则或缩小范围。
  • 公开AI专用仪表板 — 显示捕获了多少与AI生成代码相关的问题、避免了多少漏洞,以及有多少次幻觉依赖项被阻止。这建立了额外门控值得付出摩擦的信心。

🔍 警告优先推出

始终在使新门控变为阻止之前,以警告模式运行至少一个迭代周期。这让您能够衡量信噪比并在开始阻止构建之前建立开发者信任。

一个好的AI感知流水线应该感觉像一张安全网,而不是一个任意的障碍赛道。

示例:将传统门控扩展到AI生成代码

您可以通过在现有"测试+覆盖率+lint"门控之上叠加针对性检查,将其演进为AI感知门控。 无需完全重建流水线。

基准门控:

  • 运行单元测试。
  • 强制执行最低总体覆盖率。
  • 运行linter和格式化工具。

AI感知扩展:

  • 新增/更改代码覆盖率: 对新行要求比遗留代码更高的覆盖率阈值。
  • 依赖项检查: 如果新包未知、未经批准或明显可疑则失败。
  • API实存验证: 扫描代码库或官方SDK版本中不存在的函数或端点调用。
  • 安全扫描: 要求更改文件上零高危/严重问题。
  • 人工审查标签: 如果AI在文件中贡献了超过N行,在合并前要求高级开发者的明确人工批准。

这种方法避免了完全重建流程,同时直接针对AI特有的风险。

分步指南:如何设置AI感知质量检查?

  1. 1
    添加依赖项验证步骤:检查所有导入的包在包管理器中是否真实存在。 在运行测试之前,验证import或require语句中提到的每个包是否存在于npm、pip、PyPI或内部注册表中。AI幻觉经常发明听起来合理的包名。
  2. 2
    扫描常见幻觉模式:不存在的API、签名错误的函数和虚构的配置标志。 运行检查每个API调用是否与实际SDK或服务文档匹配的linter或自定义脚本。标记对不存在方法的调用。
  3. 3
    添加安全重点门控:SAST加上对常见AI生成漏洞的显式检查。 使用Bandit(Python)、ESLint-Security(JavaScript)或Snyk等工具。同时扫描SQL注入模式、过于宽松的CORS规则、硬编码凭据和不安全的反序列化。
  4. 4
    对关键路径(认证、支付、基础设施)使用多模型代码验证。 在合并之前,通过多个AI模型询问"这段代码是否符合预期逻辑?是否存在安全风险?"标记分歧。
  5. 5
    要求以逻辑对比语法为重点的人工代码审查。 自动门控捕获明显的幻觉。代码审查者应验证:这做了预期的事吗?边界情况处理了吗?方法适合该用例吗?

应避免的常见错误

在质量风险上将AI生成代码等同于人工编写代码

Why it hurts: 标准lint和单元测试阈值是针对人工编写和审查的代码校准的。AI生成代码可以通过所有传统门控,同时包含幻觉API、伪造包和悄悄错误的逻辑。

Fix: 对AI生成或AI修改的代码应用单独的风险等级。使用更严格的覆盖率阈值(新行≥80%)、对所有AI修改文件进行安全扫描,并添加依赖项存在性检查。

将编译作为正确性的证明

Why it hurts: AI生成代码即使调用不存在的方法、导入未注册的包或实现违反需求的逻辑,也能干净地编译。编译是必要条件但不是充分条件。

Fix: 添加运行时验证:基于属性的测试、边界情况测试,以及在逻辑微妙错误时会失败的集成测试。能验证方法签名的SDK感知linting比单独的类型检查更有效。

不检查建议的包是否真实存在于注册表中

Why it hurts: 语言模型在不知道正确名称时会频繁发明听起来合理的包名。在幻觉包名上运行npm install或pip install的开发者可能会安装攻击者后来注册的恶意包(投机注册)。

Fix: 运行依赖项验证步骤,为每个新包导入调用npm/PyPI/Maven注册表API。如果包无法解析或没有发布历史,则使构建失败。

在没有数据的情况下以阻止模式启动新门控

Why it hurts: 作为硬阻止引入的新门控会遇到误报,造成摩擦并侵蚀开发者信任。团队会寻找变通方法或要求删除门控。

Fix: 以警告模式运行每个新门控至少一个迭代周期。衡量信噪比,修复误报,只有在门控被证明可靠时才升级为阻止。

省略AI专用仪表板和指标

Why it hurts: 如果不了解捕获了多少幻觉相关问题,团队就无法证明AI感知门控的开销是合理的,也无法有效调整它们。

Fix: 对CI进行检测,按类别(依赖项幻觉、API幻觉、安全发现、逻辑标志)标记问题。公开每个类别每周捕获问题的摘要。

地区注意事项

AI代码质量检查的监管要求因部署地区而异。 以下三个维度对使用AI辅助开发的团队最为相关。

  • 中国(数据安全法2021年 / 个人信息保护法): 《数据安全法》和《个人信息保护法》(PIPL)要求处理个人信息的代码在部署前经过审查和验证。AI生成代码涉及个人数据处理的模块需强制人工安全审查;依赖项需全量可追溯;SAST扫描结果建议存档备查。在金融、医疗和政务系统中,将AI代码质量门控的检测记录纳入数据安全合规文档尤为重要。
  • 亚太地区(数据跨境规则): 亚太各司法管辖区的数据跨境规制(日本个人信息保护法、新加坡PDPA、韩国PIPA等)对处理个人数据的系统代码质量标准有影响。对处理敏感数据的代码路径建议采用本地化审查流程,并对所有第三方依赖项进行全量验证,以满足数据驻留要求。
  • 企业部署(金融/医疗/法律): 受严格监管的行业对AI生成代码有更高要求。金融机构需要完整的审计记录以满足内部控制要求。医疗机构需针对认证和患者数据代码路径设置强制人工审查门控。法律服务需要对客户数据相关依赖项进行全量验证。所有行业建议将"变更文件上零新增高危/严重漏洞"设为SAST门控标准。

常见问题

AI感知构建质量检查是什么?

AI感知构建质量检查是专门用于捕获AI生成代码特有故障模式的CI/CD门控:幻觉API、伪造包名,以及能编译但违反需求的逻辑错误。与传统lint和覆盖率门控不同,这些检查会验证引用的包是否真实存在,以及调用的API是否与实际SDK或服务定义匹配。

AI生成代码与人工编写代码在质量风险上有何不同?

AI生成代码引入了人工编写代码中极少出现的结构性故障模式:在任何注册表中都不存在的包名、SDK版本中不存在的方法调用,以及通过表面测试但悄悄误实现需求的代码。传统门控能检测语法错误和覆盖率缺口,但并非为自信的幻觉而设计。

如何在CI/CD流水线中检测幻觉包名?

在运行测试前,添加一个依赖项验证步骤,检查每个导入的包是否在目标注册表(npm、PyPI、Maven等)中实际存在。将其实现为调用注册表API的预提交钩子或CI任务。无法解析或没有发布历史的包应立即使构建失败。

应该为AI生成代码添加哪些安全检查?

对每个更改的文件运行Bandit(Python)、ESLint-Security(JavaScript)或Snyk等SAST工具。要求AI修改的代码路径上零新增高危/严重问题。对涉及认证、支付、管理功能或个人数据的AI生成代码强制要求人工安全审查。

幻觉API与运行时错误相同吗?

幻觉API比简单的运行时错误更隐蔽。它指模型发明了实际SDK或服务中不存在的方法、参数或配置选项——代码看起来正确并通过编译,但在运行时抛出异常或悄悄降级行为。运行时错误是症状,幻觉检测则在流水线更早阶段捕获根本原因。

能用AI工具来审查AI生成的代码吗?

可以。多模型交叉检查是一种有效模式:一个模型生成代码,另一个模型审查它。审查模型表示不确定或与生成者意见不同的地方可以标记供人工关注。这种方法在认证、支付处理或基础设施配置等高风险路径上效果最佳。

如何在不拖慢团队的情况下引入AI感知质量检查?

在阻止合并之前先以警告模式启动所有新规则以收集数据。在错误消息中清晰解释失败原因并附上文档链接。允许有文档记录的覆盖机制,以便团队在不寻常但合理的情况下继续推进同时留下审计记录。跟踪每个门控的误报率,在摩擦超过价值时调整阈值。

什么是slopsquatting,它为什么对AI辅助开发有危险?

Slopsquatting(投机注册)是指AI模型发明了一个听起来合理但实际上不存在于任何注册表中的包名。如果攻击者随后以该名称注册恶意代码,任何运行npm install或pip install的开发者都会执行攻击者的payload。这种风险在AI辅助开发中尤为突出,因为开发者在安装之前通常不会逐一核实建议的包。

中国《数据安全法》(2021年)如何影响AI生成代码的质量检查要求?

中国2021年《数据安全法》和《个人信息保护法》(PIPL)要求处理个人信息的代码在部署前经过审查和验证。对于AI生成的代码,这意味着:涉及个人数据处理的模块需要强制人工安全审查;依赖项必须全量可追溯;SAST扫描结果需存档备查。建议将AI代码质量门控的检测结果纳入数据安全合规记录,特别是在金融、医疗和政务系统中。

金融、医疗和法律行业如何通过AI代码质量检查满足合规要求?

受严格监管的行业对AI生成代码有更高要求。金融机构需要AI代码审查的完整审计记录,以满足内部控制要求。医疗行业需要针对认证和个人数据处理代码的强制人工审查门控,以保障患者安全。法律服务需要对客户数据相关代码路径进行依赖项全量验证。所有行业建议将"变更文件上零新增高危/严重漏洞"设为SAST门控标准,并覆盖所有AI修改的文件。

相关阅读

参考来源

使用PromptQuorum将这些技术同时应用于25+个AI模型。

免费试用PromptQuorum →

← 返回提示词工程

AI代码质量检查:在CI/CD中检测幻觉与虚假依赖 | PromptQuorum