在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步,逻辑闭环且全程无外部交互:

  1. 问题拆解(Plan):LLM接收用户问题后,先规划推理步骤——将复杂问题拆解为多个简单的子问题,明确“先思考什么、再思考什么”。比如“分析一份简历的核心竞争力”,会拆解为“提取候选人基本信息→梳理核心技能→总结项目经历→提炼优势亮点”。

  2. 推理求解(Solve):沿着规划的步骤,LLM通过自身的知识储备和逻辑能力,逐步推导每个子问题的答案,最终汇总成完整结果。这个过程中,不需要调用任何外部资源,纯靠“思考”完成。

  3. 结果校验(可选):部分场景下,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多了“工具交互”环节,全程闭环且依赖外部资源:

  1. 任务拆解与动作规划(Plan):LLM接收用户任务后,先拆解任务,明确“需要做哪些操作、调用哪些工具、操作顺序是什么”。比如“检索知识库中关于TCP的核心知识点”,会拆解为“调用向量检索工具→调用关键词检索工具→融合检索结果→整理返回”。

  2. 工具执行(Execute):按照规划的动作,依次调用对应的外部工具,获取工具返回的结果。这个过程中,LLM不直接“思考答案”,而是“指挥工具干活”,比如调用ChromaDB向量库获取相关文档片段,调用天气API获取实时天气数据。

  3. 结果汇总与反馈: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)是典型的“二者结合”场景,通用流程如下:

  1. 先通过Plan and Solve:解析用户提问的意图(纯推理),明确用户需要什么类型的答案;

  2. 再通过Plan and Execute:调用RAG检索工具,获取相关知识库内容(工具执行);

  3. 最后再通过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开发实战干货~

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐