← 最新论文
💻 computer science

Reducing Hallucinations in LLM-Generated Code via Semantic Triangulation

本文提出了一种名为“语义三角测量”的理论框架,通过将原问题转化为需要不同算法的解耦变体并交叉验证独立生成的解决方案,有效降低了大语言模型生成代码中的幻觉错误,在多个基准测试和模型上显著提升了正确代码的筛选概率与 F1 分数。

原作者: Yihan Dai, Sijie Liang, Haotian Xu, Peichu Xie, Sergey Mechtaev

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

原作者: Yihan Dai, Sijie Liang, Haotian Xu, Peichu Xie, Sergey Mechtaev

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

这篇论文提出了一种名为**“语义三角测量”(Semantic Triangulation)**的新方法,旨在解决大语言模型(LLM)写代码时经常“胡编乱造”(即幻觉)的问题。

为了让你轻松理解,我们可以把大模型写代码的过程想象成**“侦探破案”,而这篇论文就是给侦探提供的一套“防骗新招数”**。

1. 核心问题:为什么现在的“侦探”会抓错人?

想象一下,你让大模型(我们叫它“AI 侦探”)写一个程序来解决数学题。

  • 现状:AI 侦探经常犯错,而且它犯的错误很有规律。比如,它可能总是用同一种错误逻辑去解题。
  • 旧方法(多数投票):以前的做法是,让 AI 侦探写 10 个答案,然后看哪个答案出现次数最多,就选哪个。
    • 比喻:这就像警察抓嫌疑人,问了 10 个嫌疑人,结果 10 个人都编了一模一样的假口供。这时候,警察以为“大家都这么说,那肯定是真的”,结果反而被集体骗了。因为 AI 的“假口供”往往是** correlated(相互关联)**的,它们会互相“串供”。
  • 旧方法(自动测试/规范):以前的另一种做法是让 AI 自己写测试代码,或者自己写“任务说明书”来验证答案。
    • 比喻:这就像让那个正在撒谎的嫌疑人自己当法官,去审判自己。既然法官和嫌疑人用的是同一种错误的逻辑,法官当然会判嫌疑人“无罪”。

2. 新招数:什么是“语义三角测量”?

这篇论文提出的核心思想是:不要问同一个问题,要换个完全不同的角度去问,看看能不能对得上号。

这就好比侦探在审讯嫌疑人时,不再问“你昨晚在哪?”,而是突然问:“如果你昨晚在 A 地,那你现在鞋底的泥土应该来自哪里?如果你昨晚在 B 地,你的手表时间应该显示几点?”

  • 核心策略:解离(Dissociation)
    作者把原来的编程题目(比如“把字符串里的问号变成字母”),通过一种魔法,彻底变形成另一个看起来完全不一样的题目(比如“给定结果,反推原来的字符串”)。

    • 比喻:原来的题目是让你**“写诗”,变形后的题目是让你“根据诗猜作者”**。
    • 关键点:写诗和猜作者,需要的大脑回路和算法完全不同。如果 AI 在“写诗”时是瞎编的,它大概率在“猜作者”时也会瞎编,而且瞎编的内容很难刚好对上
  • 三角验证(Triangulation)

    1. 让 AI 解原题(得到答案 A)。
    2. 让 AI 解变形题(得到答案 B)。
    3. 用一套严格的数学规则(称为“超属性”)检查:答案 A 和答案 B 能不能完美互锁
      • 如果 A 是真话,B 也是真话,它们一定能严丝合缝地对上(就像拼图的两块)。
      • 如果 A 是假话(幻觉),B 也是假话,它们就像两块乱拼的拼图,根本拼不到一起。

3. 为什么这招这么管用?

论文里用了几个很形象的比喻和理论:

  • 打破“串供”:因为变形后的题目需要完全不同的算法(比如一个是“打印机”,一个是“解析器”),AI 很难在两个完全不同的任务上,恰好编出一模一样的错误。一旦它们对不上,我们就知道有诈。
  • 处理“多解”难题:有些题目本身就没有唯一答案(比如“写个脚本处理数据”,只要结果对,格式可以不同)。旧方法在这种题目上很容易失效,因为 AI 可能选了个“虽然对但不是主流”的答案。但“三角测量”通过枚举所有可能,能精准地找到那个“虽然冷门但正确”的答案。
  • 数学证明:作者不仅靠直觉,还用了数学公式证明:只要变形得足够“离谱”(解离),且能建立一一对应的关系,这种方法找到正确答案的概率,绝对比“少数服从多数”要高。

4. 实际效果如何?

作者开发了一个叫 just-tri-it 的工具,在最新的代码测试集(LiveCodeBench 和 CodeElo)上进行了测试:

  • 准确率提升:相比以前的方法,它选对代码的概率提高了 24%
  • 敢于说“不知道”:当题目太难,AI 确实不会做时,旧方法可能会硬选一个错的,而新方法会主动放弃(Abstain),说“我选不出来”,从而避免了错误。在“选对”和“不乱选”的平衡上,它的表现提升了 26%
  • 攻克难题:即使 AI 只有 7% 的概率能写出正确答案(也就是 100 次里只有 7 次对),这个方法也能把这 7 次挑出来,而旧方法通常会忽略。

5. 总结

简单来说,这篇论文告诉我们要**“换个脑子想问题”**。

当 AI 写代码时,不要只盯着它给出的答案,也不要让它自己给自己找补。而是把问题倒过来、拆开来、或者换个问法,让 AI 在两个完全不同的维度上“自证清白”。如果它在两个维度上都能逻辑自洽、严丝合缝,那它大概率就是真的懂;如果它顾此失彼、前后矛盾,那它就是在“胡编乱造”。

这是一种让 AI 从“盲目自信”变得“谨慎可靠”的聪明办法。

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

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

试用 Digest →