代码审查模型通常只看到一个函数、一个补丁或被截断的上下文。它声称“这里存在漏洞”时,结论往往依赖没有展示的调用方、类型约束或初始化逻辑。新论文提出完成语义,用更精确的方式描述这种相对于缺失上下文的正确性。

不完整程序对应一组可能世界

方法把代码片段解释为一组可能的完整程序,并用“完成模型”限定哪些补全是合理的。对存在性结论而言,如果能在允许的补全中构造一个触发问题的完整程序,就有了见证;若只有极不现实的补全才能触发,报告的工程价值就很有限。

研究据此实现见证生成流程:把模型推理中隐含的缺失部分具体化,构造可执行的程序补全。这样,开发者看到的不只是“可能空指针”,还包括使该判断成立所需的参数、调用路径和环境假设。论文在真实 LLM 漏洞报告与程序分析任务上验证了这种区分能力。

对代码审查的影响

这套思路可以改造审查接口:要求模型为存在性缺陷提供最小可执行见证,并把无法确定的上下文列为假设。团队随后可以判断这些假设在仓库中是否可达,而不是在“真阳性或幻觉”之间做过早二分。

完成模型本身仍是关键设计选择。范围过宽会允许荒谬补全,范围过窄又会漏掉真实调用方式。因此它更像验证协议,而不是自动消除误报的万能算法。

我的判断

这项工作为代码模型输出增加了很实用的证据层。未来高质量 AI 审查不应只给置信度,而应交付可复现见证、依赖假设和可达性判断,让人能快速验证模型究竟看到了问题,还是自行补写了问题。

一手来源:When is LLM-Based Program Reasoning Correct? A Completion Semantics for LLM-Based Code Inference