近期经典 coding-for-reasoning 工作

近年来,大语言模型在NLP领域取得了突破性进展,但在需要精确数学计算或复杂符号推理的任务中,

它们依然会暴露致命弱点:擅长分解问题,却屡屡在计算和逻辑推导上“翻车”

为此,研究者们开始探索一种全新的范式——代码辅助推理,让大模型负责生成可执行程序,

而把精确计算交给外部解释器。从最早提出“程序即推理”的PAL,到通过程序蒸馏提升小模型泛化能力的PaD

再到引入自验证机制实现逻辑闭环的CSV,这一技术路径不仅显著提升模型的推理准确率,更重新定义了“神经-符号”协同的未来可能性。

目录

1. PAL: Program-aided Language Models 代码辅助解数学题

2. PaD: Program-aided Distillation 程序辅助蒸馏

3. Code-based Self-Verification (CSV) 基于代码的显式自验证方法

3.1 代码使用频率 Code Usage Frequency:模型在解题过程中执行代码的次数。

3.2.CSV 的工作流程(零样本提示,无需微调)

3.3 加权多数投票(LLM的一致性)


1. PAL: Program-aided Language Models 代码辅助解数学题

将大语言模型(LLM)的 “推理分解能力” 与 “程序解释器的精确计算能力” 结合,解决了传统 LLM 在复杂数学、符号推理中易出错的问题。

大语言模型 在少样本提示(few-shot prompting)下,通过 “思维链(Chain-of-Thought, CoT)” 等方法已能完成常识推理、简单数学计算,但在复杂推理任务中存在致命缺陷

  1. 分解能力强,但计算 / 逻辑易出错:LLM 擅长将自然语言问题拆解为中间步骤(如 “先算总销量,再算剩余量”),但在执行具体计算(尤其是大数、复杂运算)或逻辑推导时,容易出现低级错误(如加减乘除算错、符号逻辑混淆)。
  2. 错误不可控:即使思维链的分解逻辑正确,最终结果仍可能因计算失误失效(如图 1 中 CoT 将 “200-93-39+6” 误算为 62,正确结果应为 74)。
  3. 泛化性差:对包含大数、复杂算法(如排序、递归)的问题,LLM 性能急剧下降,且模型规模扩大(如 PaLM-540B)也难以根治。

“神经 - 符号混合推理框架”,核心思路是分工协作

1. Interpret the math problems as Python codes.

2. Execute the codes with an external Python interpreter to obtain the answer.

  • LLM 的角色:读取自然语言问题,将其分解为可执行的程序步骤(如 Python 代码),无需直接输出答案。
  • 程序解释器的角色执行 LLM 生成的代码,输出精确结果(如 Python 解释器计算数值、执行算法)。

提示词构建(Crafting prompts for PAL)

  • 复用现有工作的提示词:若已有基准任务(如 GSM8K)的 CoT 提示词,直接将其改造为 PAL 风格(即给自然语言步骤添加对应代码)。
  • 代码设计原则:
    • 按需使用编程结构:复杂任务(如排序、多变量计算)可使用 for 循环、字典等 Python 特性。
    • 变量名语义化:如 “篮子里的苹果数” 命名为 num_apples_in_basket,确保代码与问题中的实体强关联

PAL(Program - Aided Language Models)可执行代码为核心,自然语言通过注释嵌入代码中。(重计算

PoT(Program of Thoughts) 自然语言推理语句 + 编程语句的混合形式(重推理

2. PaD: Program-aided Distillation 程序辅助蒸馏

LLMs 的推理能力蒸馏到小模型中。

CoT 提示能引导 LLMs 生成中间推理步骤,显著提升推理性能。

随后,数据合成通过 LLMs 生成 CoT 并整理为下游微调数据集,用于训练小模型以迁移推理能力。

传统 CoT 微调的核心问题是合成数据存在「伪正确推理

(答案对但步骤错),小模型学习后无法真正掌握推理逻辑。

PaD 的解决思路

  • 用「代码程序」替代自然语言推理步骤:代码的语法和逻辑可通过 Python 解释器自动校验,直接过滤错误样本
  • 迭代优化:通过错误注入让小模型学习修正推理程序,提升鲁棒性;
  • 缩小输出空间:自然语言的推理步骤具有模糊性(如「先乘后加」的表述差异),而代码语法固定(如 a*b + c),降低小模型学习难度

数据集准备:上下文 C 为 (输入x,代码r,结果y)

将上下文 C 作为前缀添加到输入问题 x_i 前生成 r_i;得到初步的微调数据集 S。

数据过滤:S 中生成的代码 r;放到 Python 解释器,只留下跑通且答案正确的。

数据增强:由于一个问题可能对应多种解决方案,多样化的推理数据可提升模型性能。

小模型微调 两大任务:

  • 推理任务:输入问题 (x) → 推理程序 (r)
  • 自我优化(错题改正)任务:输入问题 (x) + 错误代码 (r') → 推理程序 (r) 改正错误,提升推理性能。
  • (错误数据集的构建流程:抽象语法树 AST 的节点注入错误)

应用推理时:

分步验证:中间步骤对推理任务至关重要 —— 错误的推理步骤会快速累积导致最终答案错误。

生成多个候选步骤,用推理评分器计算每个步骤与问题的语义一致性,选择评分最高的步骤继续生成,避免错误步骤累积。

3. Code-based Self-Verification (CSV) 基于代码的显式自验证方法

GPT4-Code优势:

  • 基于代码执行反馈调整解题策略的 自调试(self-debugging) 能力;
  • 步骤化代码生成与自然语言推理的结合(而非孤立的 “计算 + 推理”)。

1. 设计动机

PAL:代码只是用于精确计算;

GPT4-Code 的默认自调试仅验证 “单步代码执行是否正确”,但未验证:

  • 整体推理逻辑是否连贯(如 “步骤 A→步骤 B” 的因果关系);
  • 最终答案是否与问题要求一致(如单位、取值范围)。

CSV 的核心目标:让模型用代码 验证整个解题过程的逻辑闭环,而非仅验证单步计算。

    3.1 代码使用频率 Code Usage Frequency:模型在解题过程中执行代码的次数

    提示词类型 核心约束 推理模式(输出格式) 本质类比
    Prompt 1(无代码) 禁止使用任何代码 纯自然语言推理链(中间步骤 + 最终答案) 传统 CoT
    Prompt 2(单代码块)

    仅允许在推理结束后用 1 个代码块

    验证计算结果

    自然语言推理 + 单段 Python 代码(Post-hoc 验证) PAL
    Basic Prompt(自由代码)

    无任何代码使用约束,模型可

    自主决定何时用代码、用多少次

    自然语言推理与代码执行并行

    (增量式:每步推理可配代码,执行后根据结果调整下一步)

    GPT4-Code 默认模式

    数学题难度越高(Level 4-5),代码使用频率的影响越显著。

    关键原因拆解

    • Prompt 1 vs Prompt 2:代码能解决自然语言的 “计算误差”(如大数运算、根号计算)
    • 但 Prompt 2 的 “单代码块” 无法自调试(代码出错则无法修正);

    Basic Prompt 的优势来自两点:

    • 分步代码(短而频繁)比单段长代码更易准确生成
    • ② 自调试机制(代码执行出错 / 结果不合理时,模型自动修正推理步骤)。

    3.2.CSV 的工作流程(零样本提示,无需微调)

    论文设计的提示引导模型完成以下四步,类比人类 “解题→检查→纠错” 的思维:

    1. 初始求解用自然语言 + 代码并行推理(延续 Basic Prompt 的优势),得到初步答案;
    2. 代码自验证:生成专门的 “验证代码”,从两个维度检查:
      • 计算验证:重新计算关键步骤(如方程求解、积分结果);
      • 逻辑验证:验证答案是否满足题目所有约束条件(如 “正整数解”“概率在 0-1 之间”);
    3. 迭代纠错:执行验证代码,输出验证状态(True/Uncertain/False):
      • True:验证通过(逻辑 + 计算均无问题)Uncertain:问题无法验证;直接输出答案
      • False:验证失败(计算错误 / 逻辑漏洞);根据反馈重新迭代调整答案

    3.3 加权多数投票(LLM的一致性)

    同一个问题,由于一些随机性,LLM输出的答案可能是不一样的,让 LLM 完整推理多次,加权结果。

    (传统多数投票仅看答案出现次数)我们对模型多轮生成的答案,按 “验证状态” 分配权重:

    • 验证为 True 的答案:权重更高(更可靠);
    • 验证为 False 的答案:权重较低(但不直接丢弃,避免误判);
    • 最终选择 “加权得分最高” 的候选答案,而非 “出现次数最多” 的答案。

    四大数据集:

    数据集 核心定位 领域内角色
    GSM8K 基础计算与简单逻辑推理的 “入门基准 评估 LLM “准确完成基础算术运算” 的能力(排除计算错误对推理的干扰)
    MMLU-Math 数学常识与基础概念的 “知识基准 评估 LLM 对数学概念的理解能力(而非纯计算或复杂推理)
    MMLU-STEM 跨学科数学应用的 “泛化基准” 评估 LLM 在 STEM 领域(科学、技术、工程、数学)中运用数学知识解决实际问题的能力
    MATH 高阶数学推理的 “黄金基准”(难度天花板 评估 LLM 解决复杂数学问题的能力上限,是领域内 “顶级模型竞争” 的核心战场
    Logo

    有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

    更多推荐