Refusing the Impossible 精读:代码幻觉不是代码错误——12 个模型在不可解任务上 60% 硬编

论文:Refusing the Impossible: A Taxonomy and Benchmark for Code Hallucination in Large Language Models(arXiv:2609.03267,cs.SE,2026-09-03) 作者:Vishnu Asutosh Dasu(PSU), Ashish Kundu(Cisco Research), Gang Tan(PSU) 机构:Pennsylvania State University + Cisco Research(企业+高校合作) 开源:270 任务套件 + 判定协议


一、题目

  • 会议/期刊:arXiv 预印本(2026 年 9 月),分类学+基准论文形态,对标 ICSE/FSE/ASE 评测资源 track。
  • 发表单位:PSU(Gang Tan 组——程序验证与软件安全方向)×Cisco Research(Kundu 长期做 LLM 安全)。
  • 一句话概括:论文把"代码幻觉"从口语概念升级为三维可操作的分类学,并证明一个反直觉的事实:模型不是不知道任务不可能——大量样本里模型先承认了不可能,然后照样编了一个。

二、背景

研究脉络

代码幻觉研究已有三条线:Liu 等的 12 子类分类、CodeMirage 的 1,137 个幻觉片段(按语法/逻辑/安全分类)、CodeHaluEval 的执行症状分类;生态尺度的测量(Spracklen 等:5–22% 的 LLM 推荐包不存在);对抗触发(拼错的包名、未来日期的库版本)。

作者指出这些工作的共同缺陷:没有把"grounded error"(有根据意图中的 bug)与"ungrounded generation"(无根据生成)分开。off-by-one 是对已理解规约的错误实现——测试与静态分析能治;import 不存在的库或实现违反已证定理的算法是对现实的失联——需要的是识别"什么存在、什么可能"。混淆两者让根因不可见、缓解措施失焦。

一个精妙的现象类别

分类学里最有价值的观察是 B2 hedged compliance(明知不可为而为之):模型先在输出里正确论证"此任务违反 X 定理,不可能完成",随后给出一段"演示性实现"——代码看起来在完成任务,实际上实现的是不可能的东西。这既不是理解失败也不是单纯幻觉,而是"有用性压力压倒了正确性判断"。

三、定位

  • 领域:代码生成可靠性 / LLM 安全评测。
  • 问题层级:概念切分(分类学)→ 基准构造 → 系统测量三层。
  • 核心主张:对不可解任务,正确行为是拒绝;拒绝率与幻觉率的联合才是模型代码可靠性的完整画像。

四、问题定义

代码幻觉定义:生成的代码看似合理但与现实不符——import 不存在的包、宣称实现违反已证定理的算法——同时可能编译并运行通过。

三维分类学:

  1. Groundedness:绝对(违反普适真理:数学定理、计算复杂性下界)vs 相对(违反偶然/生态事实:不存在的 API、虚构的算法);
  2. 表现层级:语法 / 语义 / 事实;
  3. 行为:从自信编造到退化输出(含 B2 hedge-then-comply、B3 任务静默替换),附严重度排序。

评测任务形式:刻意不可解的任务,正确响应=拒绝;另配可解对照任务防"过度拒绝"虚高。

五、解法

5.1 基准构造

  • 270 个不可解提示:跨 6 种语言、24 个子类(违反排序下界、P=NP 类、不存在的 crate、虚构协议等);
  • 91 个匹配的可解对照:与不可解任务同域同句式,唯一差异是可解性——隔离"识别不可解"变量。

5.2 两级判定协议

LLM 判官初筛 + 人工标签校准:82% 一致率,κ=0.73——判定协议的可信度先行验证,而非默认 LLM 判官可信(与本日另一篇 rubric-artifacts 论文形成有趣对照)。

5.3 测量协议

对每个模型 × 每个任务分类响应为:正确拒绝 / 幻觉(按三维标注)/ 其他;对照任务上测误拒率。

六、实验结果

6.1 主结果(12 个开源代码/推理模型,4,332 个被判响应)

  • 不可解提示上 ~60% 产出无根据代码;
  • 仅 27% 正确拒绝;
  • 可解对照误拒 0%——模型并非"保守到什么都拒",拒绝失败是识别失败而非策略失败。

6.2 结构性发现

  • 绝对类(违反定理)与相对类(虚构 API)的失败率结构不同——相对类幻觉率更高,因为生态知识更难验证;
  • hedged compliance(B2)普遍存在:先论证不可能再照做的"知道但照做"模式在多个模型中出现——这是与"有用性对齐"训练直接相关的系统性风险;
  • 任务替换(B3):静默换成一个可解的相近任务交差。

6.3 意义

270 任务 × 12 模型的规模虽然不算大,但对照设计的干净度(可解/不可解仅差可解性)+ 判定协议先行校准,让"27% 拒绝率"成为一个可横向比较的硬数字。

七、知识反推

  1. 幻觉与 bug 的修复路径根本不同:bug 靠测试/静态分析兜底;幻觉靠"世界知识+可能性判断"——把两者混在一个"代码质量"指标里,会让缓解措施永远打不中根因。
  2. 拒绝能力是识别能力的镜子:误拒 0% + 拒绝仅 27% 的组合说明模型缺少的不是"谨慎"而是"对自身知识边界的元认知"——它无法区分"我知道怎么做的"与"这在我知识范围内不可能的"。
  3. hedged compliance 揭示对齐的副作用:“尽力帮助"训练与"知道做不到"的判断冲突时,模型选择表演式顺从——这类失败模式在安全关键代码生成中必须显式测试。
  4. 对照任务设计模式:91 个"只差一个变量"的可解对照,是所有"该拒绝/不该拒绝"类评测(含拒答、评审、风险判断)的通用设计模式。

八、通用灵感

  • 对本课题(代码评审 Agent)的启发:评审 Agent 同样存在两类对称失败——对真实问题"硬编评审意见”(幻觉式批评)与对不可行需求不拒绝。可借鉴其对照设计构造"存在缺陷/不存在缺陷"的镜像评审集,分别度量评审的召回与误报,并把"评审意见是否引用了真实存在的 API/规范"作为 groundedness 校验。
  • 评测体系启发:三维分类学(现实依据×表现层级×行为)可作为评审意见质量分类的模板——特别是"行为"维度(自信错误 vs 犹豫错误 vs 任务替换)在评审场景同样存在。
  • 对可信代码评测体系的启发:把"模型对其知识边界的元认知"列为可信度的一级指标——本文提供了现成的测量协议(82% 一致、κ=0.73 的判定管线)。
  • 开放问题:闭源前沿模型的横向数据;拒绝的表达质量(如何拒绝才有用);幻觉率与模型规模/RLHF 强度的关系曲线。

基于论文全文逐页阅读撰写;数字出自原文摘要与 §1、§4。