【每日一题】AI 生成的代码怎么测质量(附答题要点)

题目(面试官口述):团队接入了代码大模型(IDE 补全 + 单测生成 + bug 修复三个场景),老板让你「评估一下生成质量能不能上生产」。你会怎么设计这套质量评测?指标从哪来?哪些坑必须提前说清?

难度:高级
题型:面试口述题

:point_right:参考答案/答题要点:

  1. 开口先分清范围:是「测生成出来的代码」还是「测提供这个能力的产品」。前者看代码质量,后者还要看延迟、采纳率、成本。先反问一句,答混了会被追打。
  2. 质量分三层,别一上来就说通过率:
    • 能不能跑:可编译、可运行、依赖能装上;
    • 跑得对不对:单测通过率、pass@1 / pass@k(同一题采样 k 次至少一次通过);
    • 跑得稳不稳:静态扫描问题数、漏洞命中、规范与可维护性、是否有多余改动。
  3. 评测集是命门。优先从自家仓库挖真实素材:bugfix commit 的「改前 / 改后」是天然配对样本,历史缺陷单能定难度权重。只用 LeetCode 类题目只能证明基础能力,业务场景一句话不说,面试直接掉档。样本按语言 × 任务类型(补全/整函数/跨文件/修 bug/生成单测)× 难度分桶,每桶单独出指标。
  4. 数据泄露要单独查:公开题库(HumanEval/MBPP 之类)很可能在训练语料里,通过率虚高。做法是自造内部题、或把与公开题重合的样本单独标注分档报数。
  5. 判分脚本不可信的时候,别信模型自己:自动生成的单测本身可能是错的,要么用人工审过的 golden test 作基线,要么「执行结果 + 静态规则」双判,再抽样人工复核,统计与人评审结论的一致率(Kappa)。
  6. 执行环境必须沙箱:隔离容器、断网、限 CPU/内存/墙钟时间、只读挂载,防止生成代码 rm -rf、连外网、读密钥。跑失败要分成两类分别统计:模型写错 vs 环境缺依赖/私有包没装上,混在一起数据没法看。
  7. 幻觉专项(可自动化):引用不存在的 API、不存在的包版本、项目里没有的私有方法。用符号表 + 依赖清单 + import 可达性做静态校验,能批量出结果。
  8. 稳定性与可复现:同一 prompt 采样 5 次看结果方差;回归基线固定 temperature=0,同时保留一份默认温度样本看真实体验。temperature、top_p、模型版本、Prompt 版本全部写进用例元数据,不然失败无法归因。
  9. 项目级生成比函数级更难:跨文件引用、上下文窗口截断后能不能拿到关键依赖文件、改了公共方法有没有连带破坏调用方——这块要专门造多文件样本。
  10. 安全与合规单列一类:硬编码密钥、SQL 拼接、反序列化、路径穿越、许可证污染(生成片段与开源仓库高相似)、生成内容里带出的敏感信息。
  11. 上线之后还要测:采纳率/接受率、接受后修改率、补全延迟分位数,最硬的一条是「接受后 N 天内该文件出现缺陷或回滚的比例」,这是唯一能拿去跟业务方对话的线上证据。
  12. 发布口径:模型或 Prompt 换版本必须全量重跑基线,禁止只挑几道代表题看;灰度期新旧双跑对比 pass 率与采纳率,指标按分位数报,报告字段固化。
  13. 收尾点出最常见的坑:通过率虚高。断言只写「不为空 / HTTP 200」、happy path 占九成,绿灯一片但什么都测不出来——用断言密度检查或变异测试(改坏代码看用例还过不过)来兜底。