一、面试题目
请你分别说明 CoT、ToT、Plan-and-Solve、Plan-and-Execute 四种大模型推理范式的核心定义,并对比各自的适用业务场景。
二、知识储备
1. CoT(Chain-of-Thought 思维链)
核心定义 最简单的线性推理范式,引导模型不直接给出答案,而是拆分问题、分步写出中间推理过程,单路径串行思考,无分支、无回溯、无自我评估。核心特点 轻量化、低耗时、单次线性推导、Prompt 简单、资源消耗低。适用场景 通用简答、基础逻辑推理、简单数学运算、常识问答、文本摘要、日常对话;适合短步骤、低难度、对延迟敏感的轻量化任务。
2. ToT(Tree-of-Thought 思维树)
核心定义 在 CoT 基础上升级为树状多分支推理 ,模型同步生成多条思考路径,自主评估每条分支的合理性,择优推进、支持错误分支剪枝与回溯试错。核心特点 多路径探索、可回溯、自我校验、多轮择优、推理精度高、开销更高。适用场景 复杂奥数推理、逻辑谜题、策略博弈、创意设计、多方案决策、复杂难题求解;适合高难度、需要试错择优、允许较高推理耗时的高阶任务。
3. Plan-and-Solve(规划求解)
核心定义 强结构化双阶段范式:先一次性输出完整固定步骤规划,再严格依照规划逐条执行推理计算 ,规划全程不修改、不动态调整。核心特点 先规划、后执行、计划固化、逻辑强约束、防止模型跳步与幻觉。适用场景 多步数学应用题、公式推导、结构化统计计算、固定流程分析、理科计算题;适合步骤固定、逻辑闭环、不需要中途变更方案的标准化任务。
4. Plan-and-Execute(规划与执行分离)
核心定义 Agent 级长流程范式,将规划器 与执行器 完全解耦:顶层生成宏观任务计划,子任务逐个落地执行,根据执行反馈动态修正、迭代更新计划 。核心特点 规划 / 执行解耦、闭环反馈、动态调优、支持工具调用、超长链路任务。适用场景 AI Agent 复杂任务拆解、多工具串联调用、长文本创作、数据分析、自动化办公、复杂业务流程编排;适合长时序、多阶段、环境多变、需要实时反馈调整的落地级复杂任务。
三、破局之道
在面试中,用这段话展现你对大模型推理范式的深层掌控力:回答这四种推理范式的区别,本质上是展示你对LLM 思考模式与任务复杂度匹配关系的掌控程度。
你可以告诉面试官:CoT 是大模型基础推理的底座,解决简单线性问题;ToT 打开了模型深度思考的上限,通过多路径试错突破复杂逻辑瓶颈;Plan-and-Solve 用前置固化规划约束模型行为,杜绝跳步与逻辑混乱;Plan-and-Execute 则是 AI Agent 落地的核心骨架,依靠规划执行解耦与动态反馈,支撑超长、多工具、强交互的复杂业务闭环。工程落地中,简单业务轻量化选用 CoT,高难度决策使用 ToT,标准化计算场景采用 Plan-and-Solve,而所有长流程、自动化、多步骤的 Agent 场景,都必须依赖 Plan-and-Execute 做全局调度。单纯依靠原生生成只能做简单对话,分层选用推理范式,才能让大模型从 "随口回答" 升级为 "可控、可靠、可落地" 的生产力工具。
四、代码实现
1. Python 版本
python
# 1. CoT 线性思维链
def cot_inference(question: str):
prompt = f"""
请一步步逐步推理,再给出答案:
问题:{question}
推理过程:
"""
return llm(prompt)
# 2. ToT 思维树 多路径择优
def tot_inference(question: str):
path1 = llm(f"思考路径1:{question}")
path2 = llm(f"思考路径2:{question}")
score1 = llm(f"评估该推理合理性:{path1}")
score2 = llm(f"评估该推理合理性:{path2}")
return path1 if score1 > score2 else path2
# 3. Plan-and-Solve 先定计划再执行
def plan_and_solve(question: str):
plan = llm(f"列出完整固定解题步骤:{question}")
result = llm(f"严格按照以下步骤解答:\n{plan}\n问题:{question}")
return result
# 4. Plan-and-Execute 规划执行、动态调整
def plan_and_execute(goal: str):
# 第一步:生成整体规划
plan = llm(f"拆解复杂任务,生成阶段化执行计划:{goal}")
steps = plan.split("\n")
current_context = ""
# 分步执行 + 动态修正计划
for step in steps:
exec_res = llm(f"执行当前任务:{step}\n上下文:{current_context}")
current_context += exec_res
# 根据结果更新后续计划
plan = llm(f"基于当前执行结果,更新后续计划:{current_context}")
return current_context
2. JavaScript 版本
javascript
// 1. CoT
async function cotInference(question) {
const prompt = `请一步步逐步推理,再给出答案:问题:${question}`;
return await llm(prompt);
}
// 2. ToT
async function totInference(question) {
const path1 = await llm(`思考路径1:${question}`);
const path2 = await llm(`思考路径2:${question}`);
const s1 = await llm(`评估合理性:${path1}`);
const s2 = await llm(`评估合理性:${path2}`);
return s1 > s2 ? path1 : path2;
}
// 3. Plan-and-Solve
async function planAndSolve(question) {
const plan = await llm(`列出完整固定解题步骤:${question}`);
const res = await llm(`严格按步骤解答:${plan} 问题:${question}`);
return res;
}
// 4. Plan-and-Execute
async function planAndExecute(goal) {
let plan = await llm(`拆解任务并生成执行计划:${goal}`);
let context = "";
const steps = plan.split("\n");
for (const step of steps) {
const res = await llm(`执行:${step} 上下文:${context}`);
context += res;
plan = await llm(`基于结果更新后续计划:${context}`);
}
return context;
}