← 最新论文
🤖 machine learning

The Path Not Taken: Duality in Reasoning about Program Execution

该论文指出大语言模型在代码推理中存在局限性,提出了通过“预测程序行为”与“推断输入修改”这一双重推理范式来评估模型对程序执行因果理解的必要性,并构建了包含 445 对实例的 DexBench 基准以验证该方法的有效性。

原作者: Eshgin Hasanov, Md Mahadi Hassan Sibat, Santu Karmaker, Aashish Yadavally

发布于 2026-04-24
📖 1 分钟阅读☕ 轻松阅读

原作者: Eshgin Hasanov, Md Mahadi Hassan Sibat, Santu Karmaker, Aashish Yadavally

原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明

这篇论文提出了一种全新的方法来测试大型语言模型(LLM,比如现在的各种 AI 编程助手)是否真的“懂”代码,而不仅仅是“背”代码。

为了让你更容易理解,我们可以把写代码和运行程序想象成开车,把 AI 想象成一位新来的导航员

1. 以前的测试:只看“单行道”

以前的测试方法(就像现在的很多基准测试)是这样的:

测试员:“请开这辆车,输入‘去公园’,告诉我最后车停在哪里,以及经过了哪些路。”
AI:“好的,车停在了公园门口,经过了 A 路、B 路。”

问题在于:AI 可能只是背下了“去公园=走 A 路+B 路”这个答案。如果它没真正理解交通规则(代码逻辑),一旦路稍微变一下,或者问它“如果我想去超市该怎么走”,它可能就懵了。它只是在做“填空题”,而不是在“开车”。

2. 这篇论文的新想法:双向推理(Duality)

作者认为,要真正测试一个导航员(AI)懂不懂开车,不能只问它“怎么走”,还得问它“怎么改路线”。他们提出了**“双路径推理”的概念,就像考驾照时的“正向驾驶”“反向改道”**。

任务一:正向推理(Forward Reasoning)—— “预测路况”

测试员:“现在输入是‘去公园’,请告诉我车会经过哪些路,最后停在哪?”
AI:需要像老司机一样,一步步模拟开车过程,预测结果。

任务二:反向推理(Counterfactual Reasoning)—— “如果我想去超市呢?”

测试员:“刚才我们去了公园。现在如果我想去超市(这是新的目标),你需要把输入改成什么,才能让车走另一条路到达超市?”
AI:这需要它理解:“哦,原来是因为输入是‘公园’,所以车在路口左转了。如果我想让它右转去超市,我必须把输入改成‘超市’,这样它才会在那个路口做出不同的选择。”

核心比喻

  • 正向是看它能不能看懂地图。
  • 反向是看它能不能修改指令来改变结果。
  • 真正的理解:只有当 AI 既能准确预测结果,又能精准地通过修改输入来“操控”结果时,我们才相信它真的懂了代码的因果关系,而不是在瞎猜。

3. 他们做了什么?(DEXBENCH 基准测试)

作者建立了一个叫 DEXBENCH 的测试场,里面有 445 个这样的“双任务”题目。

  • 他们选了 13 种不同的 AI 模型(从小的到大的,从开源的到闭源的)来考试。
  • 题目包括:预测代码运行时会覆盖哪些行(正向),以及修改输入让代码去覆盖原本没覆盖到的那一行(反向)。

4. 发现了什么有趣的现象?

测试结果让人大跌眼镜,就像发现了一些“偏科”的学霸:

  1. 单项冠军 \neq 全能冠军
    有些 AI 在“预测结果”上得分很高,但在“修改输入去改变结果”上却一塌糊涂。就像有的司机很会看导航,但让他自己改路线时却完全迷路了。这说明单独考一项是不够的

  2. 模型越大不一定越强
    有些中等大小的模型(比如 32B 参数的),在“双向推理”上反而比那些巨大的模型(70B+)表现更好。这说明光堆参数(把模型做大)并不能保证它真的学会了逻辑推理

  3. “会思考”的模型不一定行
    有些专门经过“强化推理训练”的模型,在理解代码执行流程上,反而不如那些普通的模型。这暗示了目前的“推理训练”可能并没有真正教会它们理解代码的底层逻辑。

  4. 闭源模型依然很强
    像 Claude Sonnet 4、Grok-4 这些闭源的大模型,在双向测试中表现最好,但即使是它们,在面对复杂的代码逻辑时,也会犯错(比如搞错 API 的用法)。

5. 总结:这对我们意味着什么?

这篇论文告诉我们:

  • 不要只看 AI 能不能写出代码,要看它是否真的理解代码运行时的“因果关系”。
  • 未来的 AI 评估不能只问“结果是什么”,还要问“怎么改才能变结果”。
  • 目前的 AI 虽然很强,但在动态理解程序执行(就像在复杂的交通网中实时决策)方面,还有很大的提升空间。

一句话总结
以前的测试是问 AI“这道题答案是多少”,现在的测试是问 AI“如果你想要这个答案,你应该怎么出题?”只有能同时回答这两个问题的 AI,才是真正懂代码的“老司机”。

您所在领域的论文太多了?

获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。

试用 Digest →