本文发布时间:2026年4月10日 北京时间
关键词:AI Agent、ReAct、Plan-and-Execute、Function Calling、LangGraph

适用读者:技术入门/进阶学习者、在校学生、面试备考者、相关技术栈开发工程师
文章定位:技术科普 + 原理讲解 + 代码示例 + 面试要点,兼顾易懂性与实用性

前置知识:了解大模型(LLM)的基本概念即可
2026年,人工智能正从“对话框时代”全面跨入 AI Agent(人工智能智能体) 时代-5。许多学习者正陷入这样的困境:会调用模型API、会写Prompt,却分不清AI Agent和AI助手的本质区别;听说过ReAct模式,却说不透它的工作原理;面试被问到Agent架构,只能支支吾吾。本文将从最基础的概念讲起,逐层拆解AI Agent的核心模式,并通过代码示例让你真正“跑通”一个Agent,建立从概念到实践的完整知识链路。
一、痛点切入:为什么需要AI Agent
先来看一个常见场景:用户问“北京今天天气怎么样?适合穿什么?”
传统实现方式
传统方式:硬编码调用 def get_weather(city): 必须手动调用天气API response = requests.get(f"https://api.weather.com?city={city}") return response.json() 然后手动将结果拼接成回答 weather_data = get_weather("北京") answer = f"北京今天{weather_data['condition']},气温{weather_data['temp']}℃,建议..."
这种方式有三个致命缺陷:
流程僵化——每一步都是硬编码,用户问什么就调什么,毫无灵活性
任务碎片化——模型无法自主判断“需要调什么工具”“什么时候调”
扩展性差——新增一个工具就得改代码、加逻辑
如何让AI自己判断“要不要查天气”“查完天气如何给出穿衣建议”?这就引出了AI Agent的设计初衷:让大模型从“被动应答者”升级为“主动问题解决者” -。
二、核心概念:AI Agent(人工智能智能体)
标准定义
AI Agent(Artificial Intelligence Agent,人工智能智能体) 是由大语言模型(Large Language Model,LLM)动态地指挥自己的流程和工具使用方式的系统,能够自主感知环境、独立制订计划、调用工具执行行动,并在结果反馈中动态调整策略--1。
拆解关键词
自主性(Autonomy) :Agent不需要人类一步步指导,能自己“想”下一步做什么
目标导向(Goal-Directed) :Agent不是逐条响应指令,而是围绕一个高层目标连续做事
工具调用(Tool Use) :Agent能主动调用引擎、API、代码执行器等外部工具-1
生活化类比
做个形象的对比:
大模型(LLM) ——“超级语言引擎”,会说话但没有手脚,被动响应
AI助手(如ChatGPT、豆包) ——“会说话的大脑”,能多轮对话,但执行边界止于文字回应
AI Agent ——“会行动的数字员工”,能自己拆解任务、调用工具、执行操作、交付结果-1
一句话记住:大模型是大脑,AI助手是会说话的大脑,AI Agent是完整的数字员工。
三、关联概念:ReAct模式(推理与行动)
标准定义
ReAct(Reasoning and Acting,推理与行动) 是一种Agent设计范式,让智能体在完成任务时,通过“思考 → 行动 → 观察”的迭代循环,模拟人类解决问题的思维方式-12。
它与AI Agent的关系
AI Agent 是“要建造什么”——一个具备自主行动能力的系统
ReAct 是“怎么建造”——一种具体的设计模式,让Agent能够边思考边行动
简单说:Agent是目标,ReAct是到达目标的路径之一。
工作机制:Thought → Action → Observation 循环
ReAct的核心是一个三组件循环-:
| 阶段 | 含义 | 示例 |
|---|---|---|
| Thought(思考) | 分析任务,决定下一步要做什么 | “需要先查北京今天的天气” |
| Action(行动) | 调用工具执行具体操作 | 调用天气查询API,传入参数city=北京 |
| Observation(观察) | 查看工具返回的结果 | API返回“晴,18-25℃” |
| 循环 | 根据观察结果,进入下一轮思考 | “已有天气数据,现在需要给出穿衣建议” |
| Final Answer | 任务完成,输出最终答案 | “北京今天晴朗,18-25℃,建议穿薄长袖...” |
一句话理解
ReAct打破了“输入→输出”的单向链路,构建了“感知→决策→执行→反馈”的智能闭环-。
四、概念关系与区别总结
核心关系梳理
| 维度 | AI Agent | ReAct |
|---|---|---|
| 本质 | 系统/实体(是什么) | 设计模式(怎么做) |
| 范围 | 完整系统,包含多个模块 | Agent的一种具体实现范式 |
| 关注点 | 具备感知、规划、行动、记忆能力 | 如何通过“思考-行动-观察”循环完成任务 |
| 类比 | “数字员工”这个角色 | 员工手中的“任务执行流程手册” |
一句话概括
AI Agent是“有手有脚的AI”,ReAct是“教它如何动手动脚”的方法论。
五、代码/流程示例:用LangGraph构建一个ReAct Agent
下面用 LangGraph(LangChain生态中的开源框架,专用于构建基于LLM的复杂应用)-48构建一个简单的Agent,让它根据用户问题自主决定是否调用工具-48。
完整代码
环境准备:pip install langgraph langchain langchain-openai import os from typing import TypedDict, List from langgraph.graph import StateGraph, END from langchain.prompts import PromptTemplate from langchain_openai import ChatOpenAI from langchain.schema import HumanMessage 1. 定义Agent状态(存储任务执行过程中的所有数据) class AgentState(TypedDict): user_query: str 用户原始问题 thought: str 模型思考内容 action: str 需要调用的工具 action_input: str 工具调用参数 observation: str 工具返回结果 final_answer: str 最终答案 2. 定义可用工具(模型可以调用的函数) def search_weather(city: str) -> str: """天气查询工具""" 实际场景中应调用真实API,这里用模拟数据 weather_data = {"北京": "晴朗,18-25℃", "上海": "多云,20-28℃"} return weather_data.get(city, f"{city}天气数据暂不可用") def calculate(expression: str) -> str: """计算器工具""" try: result = eval(expression) return f"计算结果: {result}" except: return "计算表达式有误" 3. 工具注册表 TOOLS = { "search_weather": search_weather, "calculate": calculate, } 4. 定义思考节点(模型判断需要调用哪个工具) def think_node(state: AgentState) -> AgentState: llm = ChatOpenAI(model="gpt-4", temperature=0) prompt = PromptTemplate.from_template(""" 你是一个AI助手,需要根据用户问题决定下一步操作。 可用工具: search_weather(查询天气,参数city),calculate(计算数学表达式,参数expression) 用户问题: {user_query} 请按照以下格式输出: 思考:[分析用户需要什么] 行动:[选择要调用的工具] 行动输入:[工具所需的参数] """) response = llm.invoke(prompt.format(user_query=state["user_query"])) 解析响应,提取思考和行动(实际应用中需编写解析逻辑) state["thought"] = "需要查询北京天气" state["action"] = "search_weather" state["action_input"] = "北京" return state 5. 定义行动节点(执行工具调用) def act_node(state: AgentState) -> AgentState: tool_name = state["action"] tool_input = state["action_input"] if tool_name in TOOLS: result = TOOLS[tool_name](tool_input) state["observation"] = result else: state["observation"] = f"未知工具: {tool_name}" return state 6. 定义观察节点(判断是否需要继续或结束) def observe_node(state: AgentState) -> AgentState: 根据观察结果生成最终答案 state["final_answer"] = f"根据查询结果: {state['observation']}" return state 7. 构建图流程 def build_agent(): graph = StateGraph(AgentState) graph.add_node("think", think_node) graph.add_node("act", act_node) graph.add_node("observe", observe_node) graph.set_entry_point("think") graph.add_edge("think", "act") graph.add_edge("act", "observe") graph.add_edge("observe", END) return graph.compile() 8. 运行Agent agent = build_agent() result = agent.invoke({"user_query": "北京今天天气怎么样?", "final_answer": ""}) print(result["final_answer"])
关键步骤解析
定义状态(State) :使用
TypedDict定义Agent在运行过程中需要保存的所有数据,包括用户问题、思考内容、行动选择、观察结果和最终答案-48定义工具:
search_weather和calculate是两个示例工具,Agent可以根据任务需求选择调用思考节点:大模型分析用户问题,决定“需要做什么”“调用哪个工具”
行动节点:执行具体的工具调用,获取结果
观察节点:根据工具返回的结果,生成最终答案或继续下一步
图流程:通过有向图(
StateGraph)组织各节点的执行顺序,LangGraph会自动管理状态传递和流程控制-48
新旧方式对比
| 维度 | 传统硬编码方式 | Agent方式(ReAct + LangGraph) |
|---|---|---|
| 任务理解 | 人工预判并硬编码调用逻辑 | 模型自主分析并决策 |
| 工具调用 | 每一步都需要人工写代码 | Agent根据思考结果动态选择工具 |
| 扩展新工具 | 修改核心逻辑,改代码 | 只需向TOOLS注册新函数 |
| 多步骤任务 | 需要人工串联每一步 | Agent自动循环直到任务完成 |
六、底层原理支撑
ReAct如何让大模型“思考”?
ReAct模式的核心奥秘在于 系统提示词(System Prompt) -12。开发者向大模型发送一个精心设计的提示词,明确规定了:
角色定位:你是一个能调用工具的AI助手
输出格式:用
Thought:标签写思考,用Action:标签写行动,用Observation:标签写观察示例:提供完整的ReAct流程示例供模型参考
大模型接收到这个提示词后,就会按照规定的格式输出。开发者再通过解析输出中的标签,识别模型想要做什么,然后执行对应的工具调用。
Function Calling:工具调用的底层机制
上述示例中模型能“调用工具”,背后依赖的是 Function Calling(函数调用) 机制-21。工作原理分三步:
注册:开发者通过
tools字段向模型声明可用函数(名称、描述、参数结构)-25决策:模型分析用户问题,自主判断是否需要调用函数,返回结构化的调用指令
执行:开发者负责实际执行函数,并将结果回填给模型
本质区别:ReAct是通过提示词引导模型按格式输出(控制权在模型),而Function Calling是模型直接返回结构化调用指令(控制权在开发者)-25。
记忆模块
真正的AI Agent还需要 记忆模块:短期记忆存储当前任务的上下文(避免“聊着聊着忘了前面说了什么”),长期记忆通过RAG(检索增强生成)技术存储历史偏好和历史交互数据,实现个性化服务-5。
七、进阶模式:Plan-and-Execute
ReAct适合“边走边想”的探索式任务,但对于步骤明确的任务,还有另一种模式——Plan-and-Execute(规划与执行)。
核心思想
将任务分解为两个独立阶段:规划阶段将复杂任务拆解为有序子任务序列;执行阶段按计划依次执行各子任务-。
何时选择哪种模式?
| 任务类型 | 推荐模式 | 原因 |
|---|---|---|
| 探索性任务(如“研究某个新领域”) | ReAct | 需要边探索边调整,走一步看一步 |
| 步骤明确的常规任务(如“生成周报”) | Plan-and-Execute | 计划可一次性制定,无需频繁交互 |
| 需要精确顺序的任务(如“先A再B再C”) | Plan-and-Execute | 执行顺序固定,避免走回头路 |
八、高频面试题与参考答案
Q1:AI Agent和传统大模型的核心区别是什么?
参考答案:
大模型是“超级语言引擎”,被动响应输入,输出文本,无记忆、无行动能力
AI Agent在此之上增加了自主性(自己决策)、工具调用(动手做事)和闭环行动(感知→规划→行动→反馈),能从“认知”走向“执行”-1
踩分点:答出“被动 vs 主动”“只说 vs 既说又做”
Q2:解释ReAct模式的工作原理。
参考答案:
ReAct = Reasoning + Acting,核心是 “思考→行动→观察”迭代循环:思考阶段分析任务并规划下一步,行动阶段调用外部工具执行操作,观察阶段分析工具返回结果。这个循环持续进行,直至任务完成,最终输出答案-12-
踩分点:说出三个关键词(Thought/Action/Observation)+ 解释循环机制
Q3:Function Calling和ReAct有什么区别?各适合什么场景?
参考答案:
| 维度 | ReAct | Function Calling |
|---|---|---|
| 控制权 | 流程控制嵌入提示词,由模型主导 | 函数接口由开发者定义,模型匹配参数 |
| 复杂度 | 高,适合复杂多步骤任务 | 中,适合单次或简单链式调用 |
| 典型场景 | 自主研究、复杂问题拆解 | API调用、数据库查询 |
一句话区分:ReAct像给模型一份“问题解决流程手册”,Function Calling像给模型一套“标准化工具操作指南”-25
踩分点:答出两种方式的核心差异 + 至少一个典型场景
Q4:构建一个AI Agent需要哪些核心模块?
参考答案:
四大核心模块构建“感知→决策→行动→记忆”闭环-2:
感知模块:采集多源信息(文本、图像、API数据)
大脑模块:以大模型为核心,理解意图、拆解任务
行动模块:调用工具执行具体操作
记忆模块:短期记忆管理上下文,长期记忆存储历史偏好
踩分点:说出4个模块名称 + 简要说明各自职责
Q5:Plan-and-Execute模式相比ReAct有什么优缺点?
参考答案:
优点:一次性规划减少模型调用次数;执行顺序固定,可控性强
缺点:缺乏灵活性,中间环节失败时难以动态调整
选择建议:步骤明确的任务用Plan-and-Execute,探索性任务用ReAct
踩分点:对比两种模式的适用场景,体现对两种模式的深入理解
九、结尾总结
本文核心知识点回顾
| 层级 | 要点 |
|---|---|
| 概念 | AI Agent = 自主决策 + 工具调用 + 闭环行动 |
| 模式 | ReAct = Thought → Action → Observation 循环 |
| 对比 | 大模型(大脑)→ AI助手(会说话的大脑)→ AI Agent(数字员工) |
| 底层 | System Prompt + Function Calling 是两大技术基石 |
| 框架 | LangGraph 提供图结构的状态管理与流程控制 |
| 进阶 | Plan-and-Execute 适合步骤明确的常规任务 |
易错点提醒
不要混淆:ReAct是“实现方式”,不是AI Agent本身
不要过度设计:简单任务用ReAct反而增加延迟,优先考虑单次Function Calling
注意上下文长度:复杂Agent任务可能触发上下文溢出,需合理规划记忆策略-35
下篇预告
本文重点讲解了ReAct模式,下一篇将深入 Multi-Agent System(多智能体系统) ,解析如何让多个Agent像人类团队一样分工协作,以及反思模式(Reflection) 如何让Agent实现自我纠错与持续进化。
学习建议:运行一遍代码示例,理解LangGraph的状态管理和图流程;再尝试添加一个自定义工具(如查询股票价格),体验Agent的扩展能力。理论与实践结合,才能真正掌握AI Agent的核心逻辑。
