[Paper] 理解代码生成中 Chain-of-Thought 的有效性:经验性与信息论分析

发布: (2025年12月10日 GMT+8 22:25)
7 min read
原文: arXiv

Source: arXiv - 2512.09679v1

概览

本文研究了为何 “Chain‑of‑Thought”(CoT)提示——即在生成代码前让模型逐步推理——能够提升大型语言模型(LLM)在代码生成任务上的表现。通过大规模实验结合信息论视角,作者 pinpoint 了不同 CoT 策略在何时、如何帮助开发者从 LLM 获得正确、可运行的代码。

关键贡献

  • 系统性比较五种 CoT 范式(Zero‑Shot、Zero‑Shot CoT、Self‑Planning、Structured CoT、Reasoning‑CoT),覆盖多个基准和编程语言。
  • 引入条件互信息 (I(Y;C|X)),作为量化中间“思考” (C) 对最终代码 (Y)(在给定问题描述 (X) 的情况下)贡献程度的方式。
  • 实证表明外部引导的 CoT(如 Structured CoT)始终优于直接生成,在使用的 token 远少于反射式(自生成)推理的情况下,将 Pass@1 提升 5–12 %。
  • 分析模型规模、语言类型系统与 CoT 效果的交互,显示更大的模型和静态类型语言更能从高质量 CoT 中获益。
  • 提供基于模型容量、目标语言和任务复杂度的实用 CoT 选择指南

方法论

  1. 基准 – 六个 Python 编码套件(如 HumanEval、MBPP)、一个覆盖 12 种语言的多语言套件(Java、JavaScript、Rust 等),以及一组合成推理任务。
  2. 模型 – 六个开源 LLM,参数规模从 7 B 到 480 B 不等,确保研究覆盖“小模型”和“大模型”。
  3. 提示范式
    • Zero‑Shot:直接请求代码。
    • Zero‑Shot CoT:添加通用的 “逐步思考” 提示。
    • Self‑Planning:让模型先生成计划,再写代码。
    • Structured CoT:提供固定模板(例如 “1️⃣ 定义输入 → 2️⃣ 概述算法 → 3️⃣ 编写代码”)。
    • Reasoning‑CoT:允许模型自由推理后再编码。
  4. 指标 – Pass@k(主要关注 Pass@1)用于功能正确性,token 数用于效率,条件互信息 (I(Y;C|X)) 用于量化中间推理 (C) 对最终代码 (Y) 不确定性的降低程度。
  5. 分析 – 将 (I(Y;C|X)) 与实际性能提升相关联,并按模型规模、语言类型(静态 vs 动态)以及任务难度进行结果拆解。

结果与发现

范式相较 Zero‑Shot 的 Avg. Pass@1 ↑Token 开销关键洞察
Zero‑Shot CoT–1 % 到 –3 %(有时会下降)+15 %朴素的 “逐步思考” 可能引入噪声。
Self‑Planning+3 % 到 +6 %+30 %规划有帮助,但代价更高。
Structured CoT+5 % 到 +12 %+10 %固定模板在保持适度 token 开销的同时产生高质量推理。
Reasoning‑CoT+4 % 到 +8 %+45 %自由推理提升准确率,但效率低下。
  • 条件互信息:更高的 (I(Y;C|X)) 与 Pass@1 增益呈强相关 (r ≈ 0.78),验证了有用的中间思考能够降低对最终代码的不确定性。
  • 模型容量:参数 ≥ 70 B 的模型在 Structured CoT 下获得最大提升;较小模型 (< 13 B) 收效甚微,甚至出现回退。
  • 语言类型系统:静态类型语言(Java、Rust)受益更大(约 10 % 提升),相较动态类型语言(Python、JavaScript),因为显式推理有助于澄清类型约束。
  • 质量 vs 数量:由强大 “推理器”(如 480 B 模型)生成的高质量 CoT,胜过弱模型产生的大量低质量 CoT 步骤,凸显推理质量高于 token 数量的关键性。

实际意义

  1. 提示工程师 – 在使用 ≥ 70 B 的 LLM 进行代码生成时,采用 Structured CoT 模板(如 “输入 → 算法 → 代码”)取代通用的 “逐步思考” 提示。
  2. 工具供应商 – 将 CoT 模板嵌入 IDE 助手(如 GitHub Copilot、Tabnine),自动在生成代码片段前展示简短推理块,可提升正确性且几乎不增加延迟。
  3. 多语言代码库 – 对混合静态与动态语言的项目,在类型密集的模块(静态语言)优先使用 Structured CoT,对快速脚本则回退至直接生成。
  4. 资源受限环境 – 小模型 (< 13 B) 可完全跳过 CoT,或仅使用极轻量的计划(单行注释),以免性能下降。
  5. 评估流水线 – 将条件互信息估计作为诊断指标,检测模型的推理是否真正提供信息,而非仅是填充。

局限性与未来工作

  • 语言范围 – 虽然测试了 12 种语言,但仍偏向主流高级语言;低层或领域专用语言(如 SQL、Verilog)尚未涉及。
  • 提示模板 – Structured CoT 模板为手工构造;自动发现最优模板可能带来进一步提升。
  • 模型多样性 – 仅评估了开源 LLM,专有模型(如 GPT‑4)可能呈现不同的 CoT 动态。
  • 推理质量度量 – 本研究以功能正确性作为代理指标;可读性、安全性等更丰富的度量留待后续研究。

核心结论:对于利用大型 LLM 编写代码的开发者而言,适度且结构化的 chain‑of‑thought 提示能够在不显著增加 token 开销的前提下,显著提升代码的可靠性——前提是模型足够大且所用语言能够从显式推理中受益。

作者

  • Naizhu Jin
  • Zhong Li
  • Guang Yang
  • Tian Zhang
  • Qingkai Zeng

论文信息

  • arXiv ID: 2512.09679v1
  • 分类: cs.SE
  • 发布日期: 2025 年 12 月 10 日
  • PDF: Download PDF
Back to Blog

相关文章

阅读更多 »