面试被问Agent范式只会背概念?项目里不知道选ReAct还是Plan-and-Execute?这篇一次性讲透三大范式核心逻辑+落地代码+场景选型,从原理到实战一步到位,看完直接用在面试和开发里!


目录

  1. 先理清2个核心概念(看懂再写代码不迷路)

  2. 基础范式:ReAct 边想边干·单步迭代

  3. 进阶范式:Plan-and-Execute 先规划后执行

  4. 增强范式:Reflection 反思迭代·质量Buff

  5. 三大范式核心对比(一张表看懂)

  6. 实战选型指南(面试/开发直接背)

  7. 总结


先理清2个核心概念

在开始三大范式之前,先搞懂两个贯穿始终的关键词:

  • 设计范式:Agent的顶层执行流程,相当于「做事的总框架」,决定整体怎么跑。

  • 推理模式:Agent每一步的思考决策逻辑,相当于「单步怎么干活」。

三大范式,就是三种不同的框架+决策组合,也是Agent开发最核心的三种架构。


一、基础范式:ReAct 边想边干(单步迭代)

核心原理

ReAct是所有Agent的基础原型,逻辑闭环:

思考(Reason) → 行动(Action) → 观察(Observe) → 再思考

没有提前规划,边规划边执行,完全根据上一步结果实时调整,灵活度拉满。

核心特点

  • ✅ 优点:实现简单、灵活应变、调试方便、新手零门槛

  • ❌ 缺点:长流程易跑偏、容易忘记初始目标、复杂任务效率低

适用场景

简单/中等任务、实时决策场景、单轮工具调用、入门级Agent

(如:信息查询、简易问答、单次工具执行)

💡 生活化例子:新手煮番茄鸡蛋面:

  • 思考:想吃番茄鸡蛋面,需先确认家里食材是否可用。

  • 行动:打开冰箱查看番茄、鸡蛋、面条状态。

  • 观察:番茄新鲜、鸡蛋未过期,面条够吃,无葱花(可省略)。

  • 再思考:无需采购,下一步洗番茄、打鸡蛋、烧水下面。

  • 再行动:洗切番茄、打鸡蛋,烧水煮面。

  • 再观察:面条粘连、番茄块偏大。

  • 再思考:搅拌面条、切小番茄,面条半熟时加番茄鸡蛋调味。

  • 再行动:调整操作并调味,观察到食材熟透、味道适中后关火盛出。

整个过程无提前计划,完全边想边干,根据上一步观察结果(如面条粘连)实时调整行动,完美契合ReAct「思考→行动→观察→再思考」的闭环,凸显其灵活应变的核心特点。

🔧 实战代码示例(LangChain实现)

基于Python+LangChain,实现最经典的ReAct Agent,支持工具调用(可直接复制运行):

# 安装依赖:pip install langchain openai python-dotenv
from langchain.agents import create_react_agent, AgentExecutor
from langchain_openai import ChatOpenAI
from langchain.tools import DuckDuckGoSearchRun
from langchain.prompts import PromptTemplate
import os
from dotenv import load_dotenv

# 加载环境变量(需在.env文件中配置OPENAI_API_KEY)
load_dotenv()
api_key = os.getenv("OPENAI_API_KEY")

# 1. 初始化大模型(指定API_KEY,避免报错)
llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0, api_key=api_key)

# 2. 定义工具(以 DuckDuckGo 搜索为例,可替换为自己的工具)
search_tool = DuckDuckGoSearchRun()
tools = [search_tool]  # 可添加多个工具,如文件读取、代码执行等

# 3. ReAct标准提示词模板(明确流程,引导Agent按思考→行动→观察执行)
react_prompt = PromptTemplate.from_template("""
你是一个智能助手,严格按照 思考→行动→观察 的流程执行用户任务,不要跳过任何步骤。
可用工具:{tools}
工具名称及使用说明:{tool_names}
用户问题:{input}
思考:你需要先分析问题,判断是否需要使用工具,以及使用哪个工具,{agent_scratchpad}
行动:如果需要使用工具,格式为 `工具名称(参数)`;如果不需要工具,直接输出最终答案。
观察:执行工具后,根据返回结果,再次思考是否需要继续执行或直接输出答案。
""")

# 4. 创建ReAct Agent,配置执行器(verbose=True,可查看完整执行流程,方便调试)
react_agent = create_react_agent(llm, tools, react_prompt)
agent_executor = AgentExecutor(agent=react_agent, tools=tools, verbose=True, handle_parsing_errors=True)

# 5. 执行任务(可替换为自己的需求)
if __name__ == "__main__":
    try:
        response = agent_executor.invoke({"input": "2026年人工智能Agent技术的最新发展方向,重点说明工业领域的应用"})
        print("\n🏁 最终结果:", response["output"])
    except Exception as e:
        print(f"执行报错:{e}")

💡 代码说明:配置.env文件(写入OPENAI_API_KEY=你的密钥),运行后可看到Agent「思考→搜索→观察→总结」的完整流程,新手可直接复用,替换工具和任务即可。


二、进阶范式:Plan-and-Execute 先规划后执行

核心原理

为解决ReAct长任务跑偏的痛点设计,核心是规划与执行解耦,分为两个独立模块:

  1. 规划器(Planner):先把大目标拆成完整、可执行的步骤清单,明确每一步要做什么。

  2. 执行器(Executor):严格按步骤逐一执行,执行完成后汇总所有结果,生成最终答案。

全程不随意改计划,复杂任务稳定性拉满,适合需要严格控方向的场景。

核心特点

  • ✅ 优点:长流程不跑偏、目标明确、可控性强、支持并行执行

  • ❌ 缺点:灵活度低、突发场景易卡壳、实现复杂度比ReAct高

适用场景

长流程复杂任务、流程固定场景、多步骤数据分析、报告生成、项目式任务

(如:行业分析报告、多步骤数据处理、完整项目开发规划)

💡 生活化例子:周末家庭大扫除:

  • 规划(规划器):目标是彻底打扫客厅,提前拆分3步:擦桌面、拖地板、整理杂物。

  • 执行(执行器):严格按规划执行,先擦桌面,再拖地板,最后整理杂物,不随意调整步骤。

全程先定好完整计划,再分步执行,规划与执行完全分离,不临时打乱节奏,完美契合其核心特点。

🔧 实战代码示例(规划+执行分离)

基于LangChain实现规划与执行分离,可直接复用,支持自定义目标和步骤:

from langchain.chains import LLMChain
from langchain.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
import os
from dotenv import load_dotenv

# 加载环境变量
load_dotenv()
api_key = os.getenv("OPENAI_API_KEY")

# 初始化大模型
llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0, api_key=api_key)

# ---------------------- 1. 规划器模块:生成可执行步骤 ----------------------
# 提示词优化:让步骤更具体,可直接执行,避免模糊表述
plan_prompt = ChatPromptTemplate.from_messages([
    ("system", "你是专业的任务规划师,擅长将复杂目标拆分成3-5个具体、可执行的步骤,步骤需明确「做什么」「怎么做」,不冗余、不模糊,只输出步骤,不执行任何步骤。"),
    ("user", "目标:{goal},请拆分成3-5个可执行步骤,每个步骤不超过20字,清晰易懂。")
])
plan_chain = LLMChain(llm=llm, prompt=plan_prompt)

# ---------------------- 2. 执行器模块:按步骤执行 ----------------------
execute_prompt = ChatPromptTemplate.from_messages([
    ("system", "你是高效执行者,严格按照给定步骤执行任务,执行过程简洁明了,返回该步骤的具体执行结果,不添加额外说明。"),
    ("user", "步骤:{step},请严格执行该步骤,返回执行结果。")
])
execute_chain = LLMChain(llm=llm, prompt=execute_prompt)

# ---------------------- 3. 总执行逻辑(规划→执行→汇总) ----------------------
def plan_and_execute(goal):
    # 第一步:生成规划
    plan = plan_chain.invoke({"goal": goal})
    print("📝 生成任务规划:\n", plan["text"])
    print("-"*50)
    
    # 第二步:分步执行(过滤空步骤,避免报错)
    steps = [step.strip() for step in plan["text"].split("\n") if step.strip()]
    result = []
    for idx, step in enumerate(steps, 1):
        print(f"✅ 执行步骤{idx}:{step}")
        step_res = execute_chain.invoke({"step": step})
        result.append(f"步骤{idx}:{step}\n执行结果:{step_res['text']}")
        print(f"步骤{idx}结果:{step_res['text']}\n")
    
    # 第三步:汇总所有步骤结果,生成最终答案
    final_prompt = f"请汇总以下步骤的执行结果,输出完整、连贯的最终答案,不要遗漏关键信息:\n{chr(10).join(result)}"
    final_res = llm.invoke(final_prompt)
    return final_res.content

# 执行复杂任务(可替换为自己的目标)
if __name__ == "__main__":
    try:
        goal = "写一篇2026年Agent技术的行业分析报告,重点包含核心应用场景和发展趋势"
        final_output = plan_and_execute(goal)
        print("🏁 最终汇总结果:\n", final_output)
    except Exception as e:
        print(f"执行报错:{e}")

💡 代码说明:规划器生成清晰步骤,执行器逐一落地,最后自动汇总,适合复杂任务;可修改提示词,调整步骤数量和执行细节,适配自己的项目需求。


三、增强范式:Reflection (反思迭代)

核心原理

Reflection不是独立范式! 它是叠加在ReAct/Plan-and-Execute上的质量增强模块,核心逻辑闭环:

生成结果 → 评估检查 → 修正优化 → 输出最终结果

专门解决Agent输出的「幻觉、事实错误、逻辑漏洞」,把「做完任务」升级成「做好任务」,相当于给Agent加了一个「自我检查」的功能。

核心特点

  • ✅ 优点:大幅提升输出质量、减少错误、严谨性拉满,适配高要求场景

  • ❌ 缺点:增加LLM调用次数、token消耗更高、需限制最大迭代次数,避免死循环

适用场景

高严谨性场景:生产代码、商业报告、法律文书、精准数据分析、面试答题等

💡 搭配方式:ReAct+Reflection(步骤级检查)、Plan-and-Execute+Reflection(任务级检查)

💡 生活化例子(ReAct+Reflection全过程):学生写一篇短文

  • ReAct环节(边想边干):思考要写短文,先写开头→行动写开头→观察开头偏生硬、无重点→再思考调整开头,补充核心观点→行动修改开头、写正文。

  • Reflection环节(反思纠错):写完后反思→检查出正文有语病、逻辑不连贯→行动修正语病、梳理逻辑→再次检查无问题,完成短文。

全程先按ReAct边想边干完成初稿,再用Reflection反思纠错,完美体现两者叠加的核心逻辑。

🔧 实战代码示例(ReAct+Reflection叠加)

在ReAct基础上叠加反思模块,实现「生成→检查→优化」的闭环,提升输出准确性:

from langchain_openai import ChatOpenAI
from langchain.prompts import ChatPromptTemplate
import os
from dotenv import load_dotenv

# 加载环境变量
load_dotenv()
api_key = os.getenv("OPENAI_API_KEY")

# 初始化大模型
llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0, api_key=api_key)

# ---------------------- 1. 基础生成(ReAct核心逻辑,简化版) ----------------------
def generate_answer(query):
    """基于ReAct逻辑,生成初始回答"""
    prompt = ChatPromptTemplate.from_messages([
        ("system", "你是智能助手,按照ReAct逻辑回答问题:先思考问题,再给出详细、准确的答案,不遗漏关键信息。"),
        ("user", "回答问题:{query}")
    ])
    chain = prompt | llm
    return chain.invoke({"query": query}).content

# ---------------------- 2. 反思检查模块(核心:找出错误,给出修改意见) ----------------------
def reflection_check(answer, query):
    """检查初始回答的错误、幻觉、逻辑漏洞,给出具体修改意见"""
    check_prompt = ChatPromptTemplate.from_messages([
        ("system", "你是严格的审核员,负责检查回答的准确性、完整性和逻辑性,重点关注以下3点:1. 是否有事实错误/幻觉;2. 逻辑是否连贯;3. 是否遗漏关键信息。请先指出错误,再给出具体修改意见,不要直接修改答案。"),
        ("user", "问题:{query}\n当前回答:{answer}\n请严格检查,指出错误并给出修改意见。")
    ])
    chain = check_prompt | llm
    return chain.invoke({"answer": answer, "query": query}).content

# ---------------------- 3. 反思迭代总流程(控制迭代次数,避免死循环) ----------------------
def react_with_reflection(query, max_iter=2):
    """ReAct+Reflection 叠加逻辑,最多迭代2次,平衡质量和效率"""
    # 初始生成(ReAct逻辑)
    answer = generate_answer(query)
    print("📄 初始回答:\n", answer, "\n")
    
    # 迭代反思修正
    for i in range(max_iter):
        print(f"🔍 第{i+1}次反思检查...")
        feedback = reflection_check(answer, query)
        print("反思意见:\n", feedback, "\n")
        
        # 判断是否需要继续优化(如果没有错误,直接退出迭代)
        if "无错误" in feedback or "无需修改" in feedback:
            print("✅ 回答无错误,停止迭代。")
            break
        
        # 根据反思意见,优化回答
        optimize_prompt = ChatPromptTemplate.from_messages([
            ("system", "基于反思意见,修改初始回答,修正所有错误,保持逻辑连贯,不添加额外冗余内容。"),
            ("user", "反思意见:{feedback}\n原回答:{answer}\n请修改原回答,输出优化后的版本。")
        ])
        optimize_chain = optimize_prompt | llm
        answer = optimize_chain.invoke({"feedback": feedback, "answer": answer}).content
        print(f"✅ 第{i+1}次优化后回答:\n", answer, "\n")
    
    return answer

# 执行高要求任务(可替换为自己的需求,如面试答题、代码解释等)
if __name__ == "__main__":
    try:
        query = "详细解释Agent的Plan-and-Execute范式的原理与工程实现,要求准确、无错误,重点说明规划器和执行器的核心作用"
        final_result = react_with_reflection(query)
        print("🏁 最终优化结果:\n", final_result)
    except Exception as e:
        print(f"执行报错:{e}")

💡 代码说明:可调整max_iter(最大迭代次数),迭代次数越多,输出越严谨,但token消耗越高;适合对输出质量要求高的场景,如面试答题、生产级代码注释等。


三大范式核心对比(一张表看懂)

对比维度 ReAct Plan-and-Execute Reflection
核心逻辑 边想边干,单步迭代 先规划,后执行(解耦) 生成→评估→修正,质量增强
规划与执行 耦合(一起做) 解耦(分开做) 叠加其他范式使用,不改变原有关系
灵活度 极高 不改变原有范式的灵活度
长任务稳定性 差,易跑偏、忘目标 极高,不偏离目标 提升原有范式的稳定性
实现难度 低,新手友好 中等,需拆分模块 低(直接叠加,无需修改原有逻辑)
核心价值 快速完成灵活、简单任务 复杂、长流程任务稳定落地 纠错提效,杜绝幻觉,提升输出质量
Token消耗 高(多轮LLM调用)

实战选型指南

  1. 简单任务、新手入门、要灵活 → 直接用 ReAct,够用不折腾,开发效率高。

  2. 长流程、复杂任务、怕跑偏 → 选 Plan-and-Execute,稳准不翻车,可控性强。

  3. 高要求、不能出错、要严谨 → 基础范式 + Reflection叠加,提升输出质量。

⚠️ 开发避坑提醒

不要为了炫技把三大范式全堆在一起,会导致系统臃肿、延迟飙升、Bug频发,反而降低开发效率。

工程开发核心原则:够用就好,简单优先 —— 能用水ReAct解决的,就不用Plan-and-Execute;不需要高严谨性的,就不用加Reflection。


总结

Agent三大范式,本质是「不同场景下的最优执行逻辑」,没有好坏之分,只有适配与否:

  • ReAct:Agent基础款,边做边想,灵活简单,是新手入门的首选架构。

  • Plan-and-Execute:进阶款,先规划后执行,是复杂、长流程任务的必备架构。

  • Reflection:增强款,反思纠错,是高严谨场景必加的「质量Buff」。

吃透这三大范式,不管是面试时应对面试官的灵魂拷问,还是实际落地Agent项目,都能精准选型、快速开发,少走很多弯路。

Logo

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

更多推荐