Plan-and-Solve 论文的方法论详解
1.研究背景与理论基础
1.1 大型语言模型的范式转移
过去几年,NLP 领域经历一场从“预训练-微调”(Pre-training + Fine-tuning)到“预训练-提示”( Pre-training + Prompting)的范式转移 。
微调时代:在 BERT 等模型主导的时期,适应新任务(如情感分析、逻辑推理)通常需要调整模 型参数。这不仅计算成本高昂,而且随着模型参数量激增至千亿级别(如 GPT-3 的 175B 参 数),对普通用户而言几乎变得不可行。
提示工程时代:GPT-3 的出现证明了 LLM 具备“上下文学习”(In-Context Learning)的能力。 用户无需修改参数,只需通过自然语言指令(Prompt)即可激发模型蕴含的知识。这种“黑盒”调用方式使得提示工程成为了挖掘模型潜力的关键手段。
1.2 思维链(Chain-of-Thought)的革命
LLM 虽然在语言理解上表现出色,但在处理需要多步骤逻辑的复杂问题(如数学应用题)时,往 往表现不佳。这是因为标准提示通常直接要求答案,模型倾向于直接预测最终结果,从而跳过了 中间的推导过程。Google Research 的 Wei 等人于 2022 年提出的Chain-of-Thought (CoT)技术改变了这一局面。CoT 的核心思想是引导模型生成一系列中间推理步骤 。
这里提出Few-shot CoT:通过在提示中提供几个包含完整推理步骤的问答示例,让模型模仿这种推理模式。这种方法效果显著,但有一个致命缺点——人工成本高昂。针对不同类型的任务,必须由专家手动编写高质量的推理示例。
1.3 零样本思维链(Zero-shot-CoT)的发现与缺陷
为了消除 Few-shot CoT 对人工示例的依赖,Kojima 等人(2022)提出了 Zero-shot-CoT。他们 发现,仅仅在问题后追加一句简单的咒语——"Let's think step by step"(让我们一步步思考) ——就能奇迹般地激活模型的推理能力,使其性能大幅超越直接回答 。
然而,本论文正是建立在对 Zero-shot-CoT 的批判性分析之上 的。作者认为,虽然“让我们一步步思考”是一个伟大的启发式指令,但它过于笼统、缺乏约束。它虽然告诉了模型“要思考”,但没有告诉模型“如何规划思考的路径”。这种非结构化的思维过程导 致了模型在面对复杂问题时容易迷失方向,产生计算错误或逻辑断层。
2. Plan-and-Solve 的认知
作者不仅仅是说 Zero-shot-CoT “效果不好”,而是精准地将错误归类。这一分类基于对 GSM8K 数据集的错误分析 :
1. 计算错误 (Calculation Errors, ~7%):模型推理逻辑正确,但在执行加减乘除时出错。这在纯文本模型中很常见,因为它们通过概率预测下一个 token,而非调用计算器。
2. 步骤缺失错误 (Missing-step Errors, ~12%):这是 Zero-shot-CoT 的致命缺陷。当问题变得复杂(例如需要三步转折)时,模型往往会“跳步”,直接从条件 A 跳到结论 C,忽略了中间的 B。这种跳跃往往导致错误的结论。
3. 语义误解错误 (Semantic Misunderstanding Errors, ~27%):模型未能正确理解题目中的实体关系或约束条件。例如,题目说“A 比 B 多 3 倍”,模型理解为“A 是 B 的 3 倍”。
基于Few-shot CoT 和 Zero-shot-CoT 的局限性,作者引入了认知科学中的元认知概念。
传统的 Zero-shot-CoT 是线性思维:
读题 -> 开始做 -> 做一步看一步 -> 答案。
这类似于人类的直觉反应,容易在复杂逻辑中迷失。
作者提出的PS Prompting 引入了结构化思维:
读题 -> 停下来规划 -> 列出步骤 1, 2, 3 -> 按步骤执行 -> 答案。
这种将“规划(Planning)”与“执行(Execution)”解耦的策略,强制模型在进入具体的数字计算之前,先在宏观层面上理清逻辑链路。这直接对症下药,解决了“步骤缺失”的问题。
作者又进一步提出PS+ ,是对 PS 的进一步工程化优化。如果说 PS 解决了“逻辑结构”问题,PS+ 则试图解决“执行精度”问题。通过增加指令,它迫使模型在上下文中显式地列出关键数据。在 Transformer 架构中,这相当于扩充了“工作记忆”(Working Memory),让模型在后续计算时能更容易地通过注意力机制(Attention Mechanism)关注到正确的数值,从而减少计算和语义错误。
本文主要分析该论文的方法论,能够快速明白Plan-and_Solve的思想,想要复现demo和论文的可以参考:
2.github:https://github.com/AGI-Edgerunners/Plan-and-Solve-Prompting
3. 核心方法论详解
3.1 总体架构:两阶段提示
与 Zero-shot-CoT 类似,PS Prompting 也包含两个阶段:
1. 第一阶段(推理生成):通过特定的触发语句(Trigger Sentence),诱导 LLM 生成包含推理过程的文本。
2. 第二阶段(答案提取):在生成的文本后追加提取指令(如 "Therefore, the answer is..."),让模型输出最终的数值答案以便测评。
3.2 PS Prompting:从“思考”到“规划”
PS Prompting 的触发语:
"Let's first understand the problem and devise a plan to solve the problem. Then, let's carry out the plan and solve the problem step by step."
让我们先理解问题并制定一个计划来解决这个问题。然后,让我们执行这个计划并 一步步解决问题。
设计剖析:
1. "Understand the problem"(理解问题):这不仅仅是一句客套话。在 LLM 中,这可以激活模型对问题文本的注意力权重,使其先进行一轮内部的语义编码。
2. "Devise a plan"(制定计划):这是核心。作者发现,如果强制 LLM 输出 "Plan: Step 1... Step 2...",模型会进入一种类似于“伪代码生成”的模式。这种高层级的抽象思维能过滤掉具体的 数字干扰,专注于逻辑流。例如,在处理多步数学题时,模型会先写出“第一步:算出总数;第 二步:算出剩余数量”,这为后续的计算搭建了骨架。
3. "Carry out the plan"(执行计划):有了骨架,现在的任务就是填肉。模型只需按照自己刚刚 生成的计划,依次填入数字进行计算。这降低了推理的认知负荷(Cognitive Load)。
3.3 PS+ Prompting:从“规划”到“精准执行”
针对依然存在的计算错误和变量看错的问题,作者提出了 PS+。
PS+ Prompting 的触发语: "Let's first understand the problem, extract relevant variables and their corresponding numerals, and devise a plan. Then, let's carry out the plan, calculate intermediate variables (pay attention to calculation and commonsense), solve the problem step by step, and show the answer."
让我们先理解问题,提取相关变量及其对应的数值,并制定计划。然后,让我们执行 计划,计算中间变量(注意计算和常识),一步步解决问题,并展示答案。
设计剖析:
1. 变量提取(Variable Extraction):
○ 指令: "extract relevant variables and their corresponding numerals"
作用: 这是一个“锚定”策略。数学应用题中往往包含很多干扰信息。强制模型先列出 Grace: 125, Alex: x,相当于在生成的文本中建立了一个清晰的“查找表”( Lookup Table)。后续进行计算时,注意力机制可以更精准地聚焦于这个表格 ,而不是要在长文本中去搜寻数字,从而大幅减少了“张冠李戴”的错误(语义误解)。
2. 中间变量计算(Intermediate Results):
○ 指令: "calculate intermediate variables"
作用: 直接针对“跳步”错误。许多错误是因为模型试图一步到位(如直接算 (125*4)-2 + 125)。强制计算中间结果(先算 Alex = 500-2 = 498),将复杂的复合运算拆解为简单的单步运算,极大地提高了 LLM 的计算准确率。
3. 常识检查(Commonsense Check):
○ 指令: "pay attention to calculation and commonsense"
作用: 这是一种软约束。虽然 LLM 没有真实的常识,但 "commonsense" 这个词在训练语料中通常与“合理的数值范围”相关联。这能抑制模型生成荒谬的答案(如算出人的体重是 10000 磅)。
4. Plan-and-Solve 与 ReAct、ToT 的关系
ReAct (Reasoning + Acting):PS 的“计划”与 ReAct 中的 "Thought" 类似,但 ReAct 通常涉及外部工具调用。PS+ 证明了即使不调用工具,仅在内部进行规划也能大幅提升性能。
论文地址:REACT
Tree of Thoughts (ToT):ToT 会生成多个思维分支并进行搜索。PS 是线性的(一条路走到黑)。相比之下,PS 更节省 Token,推理速度更快,适合作为通用的增强手段;而 ToT 更适合解决极其困难的探索性问题。
论文地址:Tree of Thoughts
5. 局限性
1. 幻觉计划(Hallucinated Plans):如果模型在第一步制定的计划就是错的(例如逻辑颠倒), 那么后续执行得再完美,结果也是错的。PS+ 缺乏一种“回溯修正”的机制,很依赖模型内化参数的质量。
2. 僵化(Rigidity):对于“1+1等于几”这种简单问题,PS+ 依然会一本正经地制定计划,这增加 了不必要的延迟和 Token 消耗。
3. 提示敏感性(Prompt Sensitivity):虽然 PS+ 效果好,但稍微改动几个词(如把 devise 换成 make),效果可能会波动。这是提示工程的通病。
更多推荐



所有评论(0)