Plan-and-Solve提示词模板,中文常称为先计划再执行,核心思路是让模型在回答前先显式列出一份解决计划,再按步骤逐条执行,而不是像普通提示词那样直接生成最终答案。这个策略能把复杂任务拆成可控的小步骤,降低长链条推理中常见的遗漏和逻辑跳跃。对于多步计算、信息检索、代码修改等任务,先计划再执行通常能提供更稳定的输出结构。

从原理上看,Plan-and-Solve提示词把推理过程人为分成了计划阶段和执行阶段。计划阶段只负责拆解任务,执行阶段只关心当前步骤。这种关注点分离能让模型更容易保持全局视角,同时减少中间步骤错误向后传播的概率。实际使用时,模板不必固定不变,可以根据任务类型加入检查、验证、重试等环节,让智能体表现更可靠。
一、Plan-and-Solve提示词的核心结构
一个完整的Plan-and-Solve提示词模板通常包含几个关键部分:角色设定、任务输入、计划要求、执行要求以及输出格式。角色设定用来告诉模型它现在是一个擅长拆解复杂问题的智能体;计划要求明确让它先输出步骤列表;执行要求规定每一步都要说明中间结果;输出格式则保证最终答案清晰可读。这样做的好处是,模型知道在每个阶段应该输出什么内容,不会把计划和执行混在一起。
下面是一个基础模板,可以直接套用到大多数需要多步推理的任务中。该模板要求模型先列计划,再逐条执行,最后进行检查。检查环节虽然简单,但能显著减少因为跳步导致的错误。
你是一个善于拆解复杂问题的AI智能体。收到任务后,请先不要直接给答案,而是按以下格式处理:
1. 计划:先列出解决该任务需要执行的步骤,每步用一句话说明目标。
2. 执行:从第一步开始逐步执行,输出每一步的中间结果。
3. 检查:检查各步骤结果是否一致,是否遗漏关键信息。
4. 最终答案:给出完整答案。
任务:{task}
计划步骤的数量和粒度会直接影响效果。如果计划写得太粗,比如只写一句“解决该问题”,执行阶段仍然容易出错;如果计划写得太细,又会增加推理长度,消耗更多token。实践中可以要求模型把计划控制在3到7步之间,并让每一步都有一个可验证的目标。这样既不会过度拆分,也能保证执行过程足够清晰。
还有一点值得注意,计划不一定是纯文本列表。对于代码任务,可以让模型先列出需要修改的文件和函数;对于数学题,可以要求先列出公式;对于旅行规划,可以要求先列出天数、城市、交通方式等。计划的结构越贴近任务本身,执行阶段的准确性就越高。
二、与思维链提示词的对比
思维链提示词通常是在问题后面加一句类似“请一步步思考”的指令,让模型边推理边给出答案。思维链的优势是简单直接,不需要特别设计模板,但它也有明显缺点:模型可能在推理过程中自行跳步,或者把错误结论传递到后续步骤中。Plan-and-Solve则要求模型先停下来做整体规划,再开始逐步执行,相当于在推理路径上增加了一道结构约束。
下面这张表从几个维度对比了两种提示词策略。可以看到,Plan-and-Solve并不是在所有场景下都优于思维链,短链条任务用思维链反而更省token,但对复杂任务,先计划再执行的稳定性优势非常明显。
| 对比维度 | 思维链提示词 | Plan-and-Solve提示词 |
|---|---|---|
| 推理顺序 | 边思考边推理,逐步生成 | 先列计划,再按计划执行 |
| 错误传播 | 前一步错误容易影响后续步骤 | 步骤边界清晰,便于发现错误 |
| 输出可读性 | 推理链可能冗长或跳跃 | 计划与执行分离,结构更清楚 |
| 适用任务 | 短链路推理、简单问答 | 多步计算、代码调试、复杂流程 |
以一个多跳问答任务为例,问题可能同时涉及时间、地点和人物关系。直接用思维链,模型可能先给出一个看似合理但忽略中间条件的答案。而使用Plan-and-Solve模板后,模型会先列出“找出时间线索、确定地点、确认人物关系、综合回答”等步骤,然后逐条验证。这样即使某一步出错,也更容易被定位和修正。
当然,Plan-and-Solve提示词增加了输出长度,对于简单任务来说反而不划算。因此实际工程中常根据任务复杂度动态选择:如果已知任务通常需要多步推理,就使用先计划再执行模板;如果只是简单分类或摘要,则不需要强制计划。
三、代码实现示例
在代码中调用大模型时,Plan-and-Solve提示词可以通过消息模板直接构造。下面这段Python代码展示了如何使用OpenAI兼容接口发送一个包含计划、执行、检查三个环节的提示词。这里将temperature设置得较低,目的是让计划和执行步骤更稳定,减少随机性带来的结构偏差。
import openai
def plan_and_solve(task, model="gpt-4o-mini"):
prompt = f"""你是一个擅长先计划再执行的AI智能体。
针对下面的任务,请先输出计划步骤,再逐条执行,最后给出最终答案。
任务:{task}
"""
response = openai.ChatCompletion.create(
model=model,
messages=[
{"role": "system", "content": "你是一个能够先制定计划再逐步执行的智能体。"},
{"role": "user", "content": prompt}
],
temperature=0.2,
max_tokens=1500
)
return response["choices"][0]["message"]["content"]
if __name__ == "__main__":
result = plan_and_solve("从北京到上海出差3天,需要准备哪些物品?")
print(result)
如果希望程序能自动读取计划并分步执行,还可以要求模型返回JSON格式,将计划字段和执行字段拆开。程序解析JSON后,可以按计划逐条调用外部工具,再把工具结果喂回模型继续执行。这种结构在AI智能体开发中非常实用,因为它把模型的计划能力和工具调用能力结合了起来。
例如,可以修改提示词,让模型输出形如{"plan": [...], "final_answer": "..."}的结构。程序先读取plan列表,再根据每一步的内容决定调用搜索接口、代码执行器或数据库查询。每一步执行完后,把结果追加到上下文中,最后让模型汇总输出最终答案。这样整个流程就变成了一个可监控、可调试的智能体工作流。
四、调试与优化技巧
实际使用Plan-and-Solve提示词时,最常见的问题是计划列得过于笼统。比如模型可能只写“分析问题并给出答案”,这等于没有计划。解决办法是在提示词中明确要求每一步必须包含可验证的输入和输出,例如每步写清楚要用到什么信息、产出什么中间结果。如果模型还是写得太粗,可以给它一个示例计划,让它参照示例的结构来输出。
另一个常见问题是模型忽略检查环节。很多模型会把“检查”理解为重新读一遍答案,而不是真正核对步骤之间是否有矛盾。可以在执行结束后增加一条独立的检查要求,让模型逐项确认:每个步骤是否都已执行、中间结果是否一致、最终答案是否覆盖了任务要求。下面这段提示词片段可以作为检查步骤的补充。
在输出最终答案前,请重新阅读你的计划,逐项确认: - 每个步骤是否都已执行? - 中间结果是否存在矛盾? - 最终答案是否完整覆盖了任务要求? 如果发现问题,请先修正再输出最终答案。
对于需要调用外部工具的智能体,还可以把计划步骤与工具名称直接关联。例如要求模型在每步计划后标注需要调用的工具名和参数,程序根据标注执行工具调用。这样做的好处是,执行过程不再完全依赖模型自由生成文本,而是受控地调用确定功能。开发时可以先手动测试提示词,观察计划的合理性,再逐步接入真实工具。
最后,提示词中的语气和约束也会影响效果。避免使用“你可以考虑”这类模糊表达,直接说“必须先输出计划,再执行”。对于有确定答案的任务,可以将temperature设为0或接近0;对于开放型任务,可以适当提高,但不要高于0.7,否则计划和执行结构容易被随机性破坏。
AI智能体Plan-and-Solve提示词模板修改时间:2026-10-02 07:15:45