Agentic Code Reasoning

本文提出了一种名为“半形式化推理”的结构化提示方法,使大语言模型代理能够在不执行代码的情况下,通过构建显式前提、追踪执行路径并推导形式化结论,显著提升在补丁等价性验证、故障定位及代码问答等任务中的语义推理准确性。

Shubham Ugare, Satish Chandra

发布于 2026-03-05
📖 1 分钟阅读☕ 轻松阅读

Each language version is independently generated for its own context, not a direct translation.

这篇论文讲述了一个关于**"AI 程序员如何像侦探一样思考,而不是靠猜”**的故事。

想象一下,你有一个超级聪明的 AI 助手(我们叫它"AI 侦探”),它的任务是检查两段代码(就像两份修改后的食谱)是否完全一样,或者找出代码里藏着的“坏蛋”(Bug)。

1. 核心问题:AI 以前是怎么“猜”的?

在以前,当 AI 被要求检查代码时,它通常采用一种**“直觉流”**(Standard Reasoning)的方式。

  • 比喻:这就像你让一个没做过饭的人看两份食谱,问他:“这两份食谱做出来的菜味道一样吗?”
  • AI 的做法:它扫一眼,说:“看起来差不多,都是炒鸡蛋,所以味道肯定一样。”
  • 问题:它没有真正去读每一步。如果其中一份食谱里把“盐”写成了“糖”(但在名字上很像),或者用了一个特殊的、只有在这个厨房才有的“魔法调料”(代码里的特殊函数),AI 就会因为没细看而猜错

在论文中,作者发现这种“直觉流”经常让 AI 犯错,因为它太自信了,却忽略了代码里隐藏的细微差别。

2. 解决方案:给 AI 戴上“侦探放大镜”(半形式化推理)

为了解决这个问题,作者发明了一种叫**“半形式化推理”**(Semi-formal Reasoning)的新方法。

  • 比喻:这不再是让 AI 凭感觉猜,而是给它发了一张**“侦探取证表”**(证书模板)。
  • AI 的新做法
    1. 必须列证据:在得出结论前,它必须像侦探写报告一样,把每一步都写下来:“我查了 A 文件,发现这里有个函数叫 format,但它不是系统自带的,而是这个厨房自己定义的……"
    2. 必须追踪路径:它不能只说“看起来一样”,必须画出“执行路径图”:“如果输入是 476,第一步会走到哪里?第二步会调用什么?会不会报错?”
    3. 不能跳过:如果它说“这两段代码一样”,它必须证明所有可能的情况(比如输入 0、输入负数、输入特殊字符)下,结果都一样。如果它漏掉了一个情况,这张“取证表”就不合格。

简单说:以前的 AI 是“凭感觉的预言家”,现在的 AI 是“严谨的审计员”。它不能跳过任何步骤,必须把证据摆出来才能下结论。

3. 这个新方法有多厉害?(实验结果)

作者用三个不同的“考场”测试了这种新方法:

  • 考场一:代码补丁等价性(Patch Equivalence)

    • 任务:两个程序员修同一个 Bug,他们提交的代码不一样,但结果一样吗?
    • 结果:以前 AI 猜对率只有 78%,用了“侦探取证表”后,猜对率飙升到 88%,甚至在真实世界的复杂任务中达到了 93%
    • 意义:这意味着我们可以不用运行代码(不用等电脑跑测试,省时间省电费),就能让 AI 非常准确地判断代码修得好不好。这对训练 AI 非常重要。
  • 考场二:代码问答(Code Question Answering)

    • 任务:问 AI 一些关于代码的刁钻问题,比如“这个函数在什么情况下会崩溃?”
    • 结果:准确率从 78% 提升到了 87%。AI 不再瞎编,而是能引用具体的代码行来回答。
  • 考场三:故障定位(Fault Localization)

    • 任务:代码报错了,让 AI 找出是哪一行写的有问题。
    • 结果:准确率提升了 5% 到 12%。AI 不再只盯着报错的地方看,而是能顺着线索找到真正的“罪魁祸首”。

4. 一个生动的例子(论文中的 Django 案例)

论文里举了一个特别精彩的例子:

  • 场景:有两段代码,一段用了 format() 函数,另一段用了 % 符号。
  • 普通 AI 的直觉:“哦,format 是 Python 自带的函数,这两段肯定都能把年份变成两位数,所以它们是一样的。” -> 结论:一样(错误!)
  • 侦探 AI 的推理
    1. 它去查 format 函数的定义。
    2. 发现这个文件里,format重新定义了(就像厨房里有人把“盐”的标签贴到了“糖”的罐子上)。
    3. 这个自定义的 format 函数只接受“日期对象”,不接受“数字”。
    4. 所以,第一段代码如果输入数字,就会报错崩溃;而第二段代码没问题。
    5. 结论:它们不一样! -> 正确!

5. 总结与未来

这篇论文告诉我们:让 AI 慢下来,强迫它把思考过程“写下来”并“结构化”,比让它快速给出一个答案要聪明得多。

  • 不需要把代码翻译成复杂的数学语言(那样太难了)。
  • 只需要给 AI 一个结构化的“填空模板”,强迫它像人类专家一样,一步步推导、验证证据。

未来的应用
这种方法可以让 AI 在不运行代码的情况下,就能像资深工程师一样审查代码、找 Bug、回答技术问题。这意味着未来的软件开发中,我们可以用 AI 来自动做大量的代码审查工作,既快又准,还能省下大量运行测试的时间。

一句话总结:这篇论文教给 AI 一个超能力——“不要猜,要举证”,让它在处理代码时变得像侦探一样严谨可靠。