分清Plan and Solve与Plan and Execute:AI Agent两大核心模式,别再混淆!
在AI Agent、LLM应用开发(尤其是RAG、智能助手类项目)中,经常会听到两个高频概念:Plan and Solve、Plan and Execute。很多人会误以为这两个模式是同一个东西,甚至在技术选型时混用。
实际上,二者是AI Agent领域完全不同的核心工作模式,核心目标、执行逻辑、适用场景有着本质区别。本文将从概念解析、核心逻辑、实战场景、代码实现、对比分析五个维度,结合通用AI开发场景,帮你彻底分清二者,避免开发踩坑,同时补充实操代码片段,帮助深入理解。
一、先抛核心结论:二者绝非同一概念
一句话讲清核心差异:
Plan and Solve = 规划(Plan) + 推理求解(Solve),核心是“纯动脑、解问题”,不依赖任何外部工具;
Plan and Execute = 规划(Plan) + 工具执行(Execute),核心是“先规划、再动手”,必须依赖外部工具/服务完成任务。
简单来说,前者是“纸上谈兵”(但能谈出正确答案),后者是“知行合一”(必须动手操作才能完成)。下面我们逐一拆解每个模式的细节,结合通用场景和代码片段,让大家一看就懂。
二、深度解析:Plan and Solve(规划+推理求解)
2.1 概念定义
Plan and Solve(规划-求解)是AI Agent的“推理型工作模式”,核心逻辑是:针对一个具体问题,先通过LLM的推理能力,规划出“分步解决问题的思考路径”,再沿着这个路径,通过纯逻辑推理、计算、分析,最终得出问题的答案。
核心特点:全程不依赖任何外部工具、数据库、API接口,所有操作都在LLM的“大脑”中完成,本质是“用推理替代执行”。
2.2 核心工作流程
Plan and Solve的工作流程可分为3步,逻辑闭环且全程无外部交互:
-
问题拆解(Plan):LLM接收用户问题后,先规划推理步骤——将复杂问题拆解为多个简单的子问题,明确“先思考什么、再思考什么”。比如“分析一份简历的核心竞争力”,会拆解为“提取候选人基本信息→梳理核心技能→总结项目经历→提炼优势亮点”。
-
推理求解(Solve):沿着规划的步骤,LLM通过自身的知识储备和逻辑能力,逐步推导每个子问题的答案,最终汇总成完整结果。这个过程中,不需要调用任何外部资源,纯靠“思考”完成。
-
结果校验(可选):部分场景下,LLM会对推导结果进行自我校验,修正推理过程中的偏差,确保答案的准确性(比如文本分析中,校验信息提取是否完整、逻辑是否通顺)。
2.3 实战场景案例
Plan and Solve是AI开发中“分析类、评估类、推理类”模块的核心模式,接下来以常见的面试和文本推理场景为例:
-
简历文本解析:接收一份非结构化的简历文本(纯文字),LLM先规划信息提取步骤,再通过纯文本推理,将其转化为结构化数据(姓名、年龄、技能、项目经历等),全程不调用任何外部工具。
-
招聘JD分析:解析招聘需求文本,规划“提取岗位名称→梳理经验要求→提炼核心技能→标注技能权重”的步骤,通过LLM文本分析能力,生成标准化的技能清单,无需依赖外部服务。
-
文本内容评估:比如评估一篇文章的逻辑完整性、一段回答的准确性,LLM先规划评估维度,再通过推理对比标准,给出打分和点评,全程无外部交互。
-
逻辑推理与问答:用户提问“TCP和UDP的核心区别”,LLM先规划“定义→核心差异→适用场景”的回答逻辑,再通过纯推理组织语言,生成完整答案,无需额外检索(纯靠LLM知识储备)。
2.4 代码片段实现
以下代码基于Python+LLM(以通义千问、GPT为例),实现“简历文本解析”的Plan and Solve逻辑,可直接参考:
import asyncio
from openai import AsyncOpenAI # 以OpenAI客户端为例,通义千问用法类似
# 初始化LLM客户端(实际开发中可替换为自己的客户端)
client = AsyncOpenAI(api_key="your_api_key")
async def plan_and_solve_resume_analysis(resume_text: str):
"""
Plan and Solve模式:纯推理解析简历文本,不依赖任何外部工具
:param resume_text: 非结构化简历文本
:return: 结构化简历信息(字典格式)
"""
# 1. Plan:规划推理步骤(让LLM明确要做什么、怎么做)
plan_prompt = """
请你作为专业的简历分析师,解析以下简历文本,按以下步骤执行:
1. 提取候选人基本信息(姓名、年龄、学历,无则填未知);
2. 提取核心技能(按熟练度排序,区分必备和可选);
3. 总结项目经历(名称、职责、核心成果,简洁明了);
4. 提炼候选人核心竞争力(1-2句话)。
要求:纯靠文本推理,不调用任何外部工具,输出结构化字典格式。
"""
# 2. Solve:调用LLM纯推理求解,输出结构化结果
response = await client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "你是专业简历分析师,擅长纯文本推理解析"},
{"role": "user", "content": f"{plan_prompt}\n\n简历文本:{resume_text}"}
],
temperature=0.2, # 低温调参,保证推理精准,避免幻觉
response_format={"type": "json_object"} # 强制输出结构化JSON
)
# 3. 结果返回(纯推理得出,无任何外部工具调用)
return eval(response.choices[0].message.content)
# 测试代码(模拟简历文本)
async def test():
resume_text = """
姓名:张三,年龄28岁,本科,计算机科学与技术专业。
技能:Python、Java、Redis、LLM应用开发(熟练),Vue(基础)。
项目经历:参与AI智能助手开发,负责LLM调用和Prompt优化,提升问答准确率30%。
求职意向:AI应用开发工程师。
"""
result = await plan_and_solve_resume_analysis(resume_text)
print("Plan and Solve 简历解析结果:", result)
if __name__ == "__main__":
asyncio.run(test())
代码说明:全程无任何外部工具调用(不查数据库、不调API),仅通过LLM的推理能力,完成“规划步骤→解析文本→输出结果”的全流程,完美贴合Plan and Solve的核心逻辑。
2.5 技术本质
Plan and Solve的核心是“LLM的推理能力”,依赖的是模型的上下文理解、逻辑推导、知识储备,适用于“无外部数据依赖、纯逻辑/文本分析”的场景。其性能好坏,主要取决于LLM的推理精度(可通过低温调参、Prompt优化提升,比如上述代码中temperature=0.2)。
三、深度解析:Plan and Execute(规划+工具执行)
3.1 概念定义
Plan and Execute(规划-执行)是AI Agent的“操作型工作模式”,核心逻辑是:针对一个需要落地的任务,先通过LLM规划出“分步执行的动作路径”,再沿着这个路径,调用外部工具(数据库、API、服务、硬件等)完成具体操作,最终达成任务目标。
核心特点:依赖外部工具/服务,LLM的核心作用是“规划动作”,而非“直接求解”,本质是“用工具执行替代纯推理”。
3.2 核心工作流程
Plan and Execute的工作流程比Plan and Solve多了“工具交互”环节,全程闭环且依赖外部资源:
-
任务拆解与动作规划(Plan):LLM接收用户任务后,先拆解任务,明确“需要做哪些操作、调用哪些工具、操作顺序是什么”。比如“检索知识库中关于TCP的核心知识点”,会拆解为“调用向量检索工具→调用关键词检索工具→融合检索结果→整理返回”。
-
工具执行(Execute):按照规划的动作,依次调用对应的外部工具,获取工具返回的结果。这个过程中,LLM不直接“思考答案”,而是“指挥工具干活”,比如调用ChromaDB向量库获取相关文档片段,调用天气API获取实时天气数据。
-
结果汇总与反馈:LLM接收工具返回的结果,进行整理、汇总,形成最终的任务结果;若工具执行失败(比如向量库超时),会重新规划动作(比如重试调用、切换工具),确保任务完成。
3.3 实战场景案例
Plan and Execute是RAG系统、智能助手、多工具Agent的核心模式,以下是常见的通用场景:
-
RAG混合检索:这是典型的Plan and Execute场景——LLM先规划“生成查询向量→调用向量检索→调用BM25关键词检索→融合结果”的动作路径,再依次调用embedding模型、向量库、关键词检索工具,最终返回精准检索结果。
-
实时数据查询:用户提问“今天北京的天气”,LLM先规划“调用天气API→获取天气数据→整理格式返回”的动作,再调用第三方天气API,获取实时数据后返回给用户,没有工具调用就无法完成任务。
-
高并发下的服务调度:当系统QPS激增时,LLM先规划“调用限流工具→调用负载均衡工具→调用缓存工具”的动作,再执行这些操作:通过限流工具拦截超限请求,通过负载均衡工具分发请求,通过Redis缓存复用高频结果,确保系统稳定。
-
多轮工具调用Agent:比如“生成一份行业报告”,LLM先规划“调用数据接口获取行业数据→调用Excel工具生成图表→调用文本生成工具撰写报告”的动作,再依次调用这些工具,最终完成报告生成,全程依赖工具执行。
3.4 代码片段实现
以下代码基于Python+LLM+ChromaDB(向量库),实现“RAG混合检索”的Plan and Execute逻辑,模拟真实开发场景,可直接参考:
import asyncio
from openai import AsyncOpenAI
from chromadb import PersistentClient # 向量库工具
from sentence_transformers import SentenceTransformer # embedding工具
# 初始化依赖工具
llm_client = AsyncOpenAI(api_key="your_api_key")
chroma_client = PersistentClient(path="./chroma_db") # 向量库
embedding_model = SentenceTransformer("all-MiniLM-L6-v2") # embedding模型
collection = chroma_client.get_or_create_collection(name="knowledge_base")
async def plan_and_execute_rag_retrieval(query: str, top_k: int = 5):
"""
Plan and Execute模式:规划动作路径,调用外部工具完成RAG混合检索
:param query: 用户查询词
:param top_k: 最终返回结果数量
:return: 融合后的检索结果
"""
# 1. Plan:规划动作路径(让LLM明确需要调用哪些工具、执行顺序)
plan_prompt = """
请你作为RAG检索工程师,针对用户查询,规划以下动作路径:
1. 调用embedding模型,将用户查询转换为向量;
2. 调用ChromaDB向量库,根据向量检索相关文档(取10条);
3. 调用BM25关键词检索工具,检索相关文档(取10条);
4. 融合两路检索结果,返回Top5最相关的文档片段。
要求:明确每一步的工具调用逻辑,不直接给出答案,只规划动作。
"""
# 调用LLM规划动作路径(仅规划,不执行)
plan_response = await llm_client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "你是RAG检索规划师,擅长规划工具调用路径"},
{"role": "user", "content": f"{plan_prompt}\n\n用户查询:{query}"}
],
temperature=0.3
)
print("Plan 动作路径:", plan_response.choices[0].message.content)
# 2. Execute:按照规划,调用外部工具执行动作
# 动作1:调用embedding模型,生成查询向量(外部工具调用)
query_embedding = embedding_model.encode(query).tolist()
# 动作2:调用ChromaDB向量库,执行向量检索(外部工具调用)
vector_results = collection.query(
query_embeddings=[query_embedding],
n_results=10
)
# 动作3:调用BM25工具(模拟,实际可使用whoosh等库)
def bm25_search(query: str, n_results: int):
"""模拟BM25关键词检索工具(实际开发中为外部工具/库)"""
# 此处简化模拟,实际会调用BM25库查询知识库
return [{"text": f"BM25检索结果-{i}:{query}相关内容", "score": 0.8 - i*0.05} for i in range(n_results)]
bm25_results = bm25_search(query, 10)
# 动作4:融合结果(LLM整理,无需额外工具)
fused_results = []
# 简单融合:取向量检索前5 + BM25检索前5,去重后排序
vector_texts = [item["text"] for item in vector_results["documents"][0]]
bm25_texts = [item["text"] for item in bm25_results]
all_texts = list(dict.fromkeys(vector_texts + bm25_texts))[:top_k]
for text in all_texts:
fused_results.append({"text": text, "score": 1.0}) # 简化分数,实际需加权
# 3. 结果返回(通过工具执行+LLM整理得出)
return fused_results
# 测试代码
async def test():
query = "TCP协议的三次握手和四次挥手原理"
result = await plan_and_execute_rag_retrieval(query)
print("\nPlan and Execute RAG检索结果:")
for idx, item in enumerate(result, 1):
print(f"{idx}. {item['text']}(分数:{item['score']})")
if __name__ == "__main__":
asyncio.run(test())
代码说明:核心是“规划动作→调用外部工具→汇总结果”,依次调用了embedding模型、ChromaDB向量库、BM25检索工具,LLM仅负责规划和结果整理,不直接生成答案,完美贴合Plan and Execute的核心逻辑。
3.5 技术本质
Plan and Execute的核心是“LLM的规划能力+工具调用能力”,依赖的是模型的动作规划、工具理解、错误处理能力,适用于“需要外部数据、需要落地操作”的场景。其性能好坏,不仅取决于LLM的规划精度,还取决于工具的稳定性、调用效率(比如代码中可通过asyncio优化工具调用并发)。
四、全方位对比:Plan and Solve vs Plan and Execute
为了让大家更清晰地分清二者,整理了以下对比表格,涵盖核心维度、技术特点、适用场景,可直接用于开发选型:
| 对比维度 | Plan and Solve(规划+求解) | Plan and Execute(规划+执行) |
| 核心动作 | 纯逻辑推理、分析、计算,无外部操作 | 规划动作路径,调用外部工具执行操作 |
| 外部工具依赖 | ❌ 不依赖外部工具/服务 | ✅ 依赖外部工具(数据库、API、服务等) |
| 核心目标 | 解决逻辑问题、分析问题,得出精准答案 | 完成落地任务、获取外部数据,达成任务目标 |
| LLM作用 | 推理、分析、求解,直接输出答案 | 规划动作、指挥工具,汇总工具结果 |
| 性能影响因素 | LLM的推理精度、Prompt设计、温度参数 | LLM的规划精度、工具稳定性、调用效率 |
| 典型场景 | 文本分析、答案评估、逻辑推理、纯知识问答 | RAG检索、工具调用、服务调度、实时数据查询、多轮任务执行 |
| 代码核心特点 | 仅调用LLM,无外部工具调用,纯推理输出 | 调用LLM规划,再调用外部工具,工具返回结果后汇总 |
| 开发注意点 | 优化Prompt、降低温度(保证推理精准)、增加自我校验 | 处理工具调用异常、优化并发、做好背压防护、保证工具稳定性 |
五、开发选型指南:什么时候用哪个?
在实际AI Agent开发中,二者并非对立关系,而是可以结合使用(比如AI面试系统、RAG问答系统,都是“Plan and Solve + Plan and Execute”的结合体)。核心选型原则如下:
5.1 优先选Plan and Solve的场景
-
任务无需外部数据/工具,纯靠逻辑推理、文本分析就能完成;
-
对响应速度要求高(无需调用外部工具,延迟更低);
-
任务核心是“得出答案”,而非“落地操作”(比如分析、评估、问答)。
5.2 优先选Plan and Execute的场景
-
任务需要外部数据(比如检索知识库、查询数据库、获取实时数据);
-
任务需要落地操作(比如调用API、调度服务、控制硬件、生成文件);
-
任务复杂,需要多步工具交互才能完成(比如多轮检索、多服务调度、复杂报告生成)。
5.3 结合使用场景
AI问答系统(RAG+LLM)是典型的“二者结合”场景,通用流程如下:
-
先通过Plan and Solve:解析用户提问的意图(纯推理),明确用户需要什么类型的答案;
-
再通过Plan and Execute:调用RAG检索工具,获取相关知识库内容(工具执行);
-
最后再通过Plan and Solve:结合检索到的内容,推理生成完整、精准的回答(纯推理)。
这种结合方式,既保证了分析的精准度,又实现了任务的落地执行,是AI Agent开发的最佳实践。
六、常见踩坑点(避坑指南)
很多开发者在使用这两个模式时,容易踩以下3个坑,结合通用开发场景,给出避坑建议:
-
坑1:混淆“推理”和“执行”,用Plan and Solve处理需要工具的任务:比如试图用纯LLM推理获取实时天气、实时股票数据,结果无法获取最新数据,导致结果失效。避坑:需要外部数据/操作,直接用Plan and Execute,调用对应工具。
-
坑2:用Plan and Execute处理纯推理任务:比如解析简历、分析文本时,非要调用外部文本分析工具,导致延迟升高、资源浪费。避坑:纯文本分析、推理,用Plan and Solve,无需多此一举调用工具。
-
坑3:Plan and Execute中忽略工具异常处理:比如调用向量库超时、API调用失败,没有重试机制,导致任务失败。避坑:在Plan and Execute中,增加工具调用异常捕获、重试、降级逻辑(比如超时重试、失败时切换备用工具)。
七、总结
Plan and Solve与Plan and Execute,是AI Agent开发中两大核心模式,二者的核心区别在于“是否依赖外部工具”:
-
Plan and Solve:“动脑不动手”,专注于推理求解,适用于分析、评估、问答等无外部依赖的场景,代码实现简单,仅需调用LLM;
-
Plan and Execute:“动手又动脑”,专注于动作规划和工具执行,适用于检索、服务调度、多任务落地等有外部依赖的场景,需结合外部工具开发。
在实际开发中,无需刻意二选一,而是根据任务需求,将二者结合使用,才能开发出高效、稳定、精准的AI Agent应用。
如果觉得有帮助,欢迎点赞、收藏、评论,关注我,后续分享更多AI Agent、RAG、LLM开发实战干货~
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)