工业互联网

AI Agent全解析:从ReAct模式到LangGraph实战

小编 2026-04-21 工业互联网 2 0

本文发布时间: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

先来看一个常见场景:用户问“北京今天天气怎么样?适合穿什么?”

传统实现方式

python
复制
下载
 传统方式:硬编码调用
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']}℃,建议..."

这种方式有三个致命缺陷:

  1. 流程僵化——每一步都是硬编码,用户问什么就调什么,毫无灵活性

  2. 任务碎片化——模型无法自主判断“需要调什么工具”“什么时候调”

  3. 扩展性差——新增一个工具就得改代码、加逻辑

如何让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 AgentReAct
本质系统/实体(是什么)设计模式(怎么做)
范围完整系统,包含多个模块Agent的一种具体实现范式
关注点具备感知、规划、行动、记忆能力如何通过“思考-行动-观察”循环完成任务
类比“数字员工”这个角色员工手中的“任务执行流程手册”

一句话概括

AI Agent是“有手有脚的AI”,ReAct是“教它如何动手动脚”的方法论。


五、代码/流程示例:用LangGraph构建一个ReAct Agent

下面用 LangGraph(LangChain生态中的开源框架,专用于构建基于LLM的复杂应用)-48构建一个简单的Agent,让它根据用户问题自主决定是否调用工具-48

完整代码

python
复制
下载
 环境准备: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"])

关键步骤解析

  1. 定义状态(State) :使用TypedDict定义Agent在运行过程中需要保存的所有数据,包括用户问题、思考内容、行动选择、观察结果和最终答案-48

  2. 定义工具search_weathercalculate是两个示例工具,Agent可以根据任务需求选择调用

  3. 思考节点:大模型分析用户问题,决定“需要做什么”“调用哪个工具”

  4. 行动节点:执行具体的工具调用,获取结果

  5. 观察节点:根据工具返回的结果,生成最终答案或继续下一步

  6. 图流程:通过有向图(StateGraph)组织各节点的执行顺序,LangGraph会自动管理状态传递和流程控制-48

新旧方式对比

维度传统硬编码方式Agent方式(ReAct + LangGraph)
任务理解人工预判并硬编码调用逻辑模型自主分析并决策
工具调用每一步都需要人工写代码Agent根据思考结果动态选择工具
扩展新工具修改核心逻辑,改代码只需向TOOLS注册新函数
多步骤任务需要人工串联每一步Agent自动循环直到任务完成

六、底层原理支撑

ReAct如何让大模型“思考”?

ReAct模式的核心奥秘在于 系统提示词(System Prompt) -12。开发者向大模型发送一个精心设计的提示词,明确规定了:

  • 角色定位:你是一个能调用工具的AI助手

  • 输出格式:用Thought:标签写思考,用Action:标签写行动,用Observation:标签写观察

  • 示例:提供完整的ReAct流程示例供模型参考

大模型接收到这个提示词后,就会按照规定的格式输出。开发者再通过解析输出中的标签,识别模型想要做什么,然后执行对应的工具调用。

Function Calling:工具调用的底层机制

上述示例中模型能“调用工具”,背后依赖的是 Function Calling(函数调用) 机制-21。工作原理分三步:

  1. 注册:开发者通过tools字段向模型声明可用函数(名称、描述、参数结构)-25

  2. 决策:模型分析用户问题,自主判断是否需要调用函数,返回结构化的调用指令

  3. 执行:开发者负责实际执行函数,并将结果回填给模型

本质区别: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有什么区别?各适合什么场景?

参考答案:

维度ReActFunction 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的核心逻辑。

猜你喜欢