LangGraph ReAct模式详解:让AI学会思考与行动
一、什么是ReAct模式?
概念定义
ReAct 是一种让大型语言模型(LLM)能够思考后行动 的模式,全称是 Reasoning + Acting(推理+行动)。它不是前端框架,而是AI代理的核心设计思想。
通俗理解
想象你让一个聪明的助手完成复杂任务:
- 思考:先分析任务,规划步骤
- 行动:执行具体操作(如搜索、计算)
- 观察:查看行动结果
- 再思考:基于结果决定下一步
这个循环过程就是ReAct模式。
二、ReAct模式的工作原理
核心循环
思考(Reason) → 行动(Act) → 观察(Observe) → 再思考...
与传统AI的区别
| 传统AI | ReAct模式AI |
|---|---|
| 直接给出答案 | 先思考,再行动 |
| 单一回应 | 多步骤执行 |
| 无法使用工具 | 可调用各种工具 |
| 无自我修正 | 基于反馈调整策略 |
三、您的Python代码详解
代码含义解析
python
from langgraph.prebuilt import create_react_agent
这行代码的意思是:
- langgraph:一个构建AI工作流的库
- prebuilt:预构建好的组件
- create_react_agent:创建一个具有"思考-行动"能力的AI代理
完整示例代码解释
python
# 导入必要的模块
from langgraph.prebuilt import create_react_agent
from langchain_openai import ChatOpenAI
from langchain.tools import Tool
# 1. 定义工具 - AI可以使用的"手和脚"
def search_tool(query: str) -> str:
"""搜索信息"""
# 实际应用中这里会调用搜索引擎API
if "weather" in query:
return "Current temperature: 22°C, Sunny"
return "Information found: " + query
def calculator_tool(expression: str) -> str:
"""执行计算"""
try:
result = eval(expression) # 注意:实际生产环境应更安全地处理
return f"计算结果: {result}"
except:
return "计算错误"
# 2. 封装工具
tools = [
Tool(
name="搜索", # 工具名称
func=search_tool, # 工具函数
description="用于搜索网络信息" # 工具描述,AI据此决定何时使用
),
Tool(
name="计算器",
func=calculator_tool,
description="用于数学计算"
)
]
# 3. 创建AI大脑
llm = ChatOpenAI(
model="gpt-4", # 使用GPT-4模型
temperature=0 # 确定性高,创造性低
)
# 4. 创建ReAct代理 - 这才是关键!
agent = create_react_agent(llm, tools)
# 5. 使用代理
inputs = {
"messages": [("user", "北京现在的温度是多少?如果是摄氏25度,转成华氏是多少?")]
}
result = agent.invoke(inputs)
print("AI的完整思考过程:")
for msg in result["messages"]:
print(f"- {msg}")
print("\n最终答案:", result["messages"][-1].content)
四、ReAct代理的内部运作机制
AI的思考过程(模拟)
当您问:"北京现在的温度是多少?如果是摄氏25度,转成华氏是多少?"
AI会这样思考:
第1步思考:
用户问了两个问题:1)北京温度 2)摄氏转华氏。我应该先搜索北京温度。
第1步行动:
调用"搜索"工具,输入"北京天气"
第1步观察:
得到结果:"Current temperature: 25°C, Sunny"
第2步思考:
现在我有北京温度是25°C。用户还要求将25°C转换为华氏。
华氏温度公式是:F = C × 9/5 + 32
第2步行动:
调用"计算器"工具,输入"25 * 9/5 + 32"
第2步观察:
得到结果:"计算结果: 77.0"
第3步思考:
现在我可以回答用户了。北京温度25°C,相当于77°F。
最终答案:
北京现在的温度是25°C,晴朗。25°C转换为华氏温度是77°F。
五、实际应用场景
场景1:客服机器人
python
# ReAct代理可以:
# 1. 思考:用户的问题是什么类型?
# 2. 行动:查订单数据库
# 3. 观察:找到订单状态
# 4. 思考:是否需要其他信息?
# 5. 行动:查物流信息
# 6. 给出完整回答
场景2:数据分析助手
python
# 当用户问:"上个月销售额最高的产品是什么?比前个月增长多少?"
# ReAct代理会:
# 1. 调用"查询数据库"工具,获取上个月数据
# 2. 调用"排序"工具,找最高销售额
# 3. 调用"计算百分比"工具,计算增长率
# 4. 整理回答
场景3:编程助手
python
# 当用户问:"写一个Python函数计算斐波那契数列,并测试n=10"
# ReAct代理会:
# 1. 思考:需要写代码,然后测试
# 2. 行动:调用"代码生成"工具
# 3. 观察:得到生成的代码
# 4. 行动:调用"代码执行"工具进行测试
# 5. 观察:测试结果
# 6. 返回代码和测试结果
六、为什么需要ReAct模式?
解决传统AI的局限性
- 复杂任务分解:AI能自动将大问题拆解为小步骤
- 工具使用能力:AI不只是聊天,还能真正"做事"
- 自我修正:基于行动结果调整策略
- 可解释性:能看到AI的思考过程,不只是黑盒
与传统提示工程对比
python
# 传统方式 - 一次性回答
prompt = "北京温度多少?25°C转华氏是多少?"
response = llm(prompt) # 可能出错,无法使用工具
# ReAct方式 - 思考后行动
agent.run("北京温度多少?25°C转华氏是多少?")
# 会:思考 → 搜索 → 思考 → 计算 → 回答
七、LangGraph中的高级ReAct功能
记忆功能
python
# ReAct代理可以记住对话历史
agent_with_memory = create_react_agent(
llm,
tools,
memory=True # 记住之前的对话
)
# 当用户问:"刚才说的北京温度,和上海比哪个高?"
# AI能记住之前的北京温度,只需查询上海温度
多代理协作
python
# 可以创建多个ReAct代理,各自专长
weather_agent = create_react_agent(llm, weather_tools)
finance_agent = create_react_agent(llm, finance_tools)
travel_agent = create_react_agent(llm, travel_tools)
# 协同解决复杂问题:"计划去北京的旅行,考虑天气和预算"
八、入门者的关键概念总结
必须理解的5个核心概念
- 代理(Agent):能够思考行动的AI程序
- 工具(Tools):代理可以使用的功能(搜索、计算、API调用等)
- 思考链(Chain of Thought):AI的推理过程
- 行动(Action):调用工具执行任务
- 观察(Observation):工具返回的结果
类比理解
ReAct代理 ≈ 项目经理
思考 ≈ 制定计划
行动 ≈ 分配任务
工具 ≈ 团队成员
观察 ≈ 进度汇报
最终答案 ≈ 项目报告
九、自己动手:创建第一个ReAct代理
简易版实现
python
import re
# 简易工具
def search_simple(query):
knowledge_base = {
"北京温度": "25°C",
"上海温度": "28°C",
"华氏公式": "F = C × 9/5 + 32"
}
return knowledge_base.get(query, "未找到信息")
def calculate_simple(expression):
# 简易计算器,仅支持基本运算
expression = expression.replace("×", "*").replace("÷", "/")
try:
return str(eval(expression))
except:
return "计算失败"
# 简易ReAct逻辑
def simple_react_agent(question):
print(f"问题: {question}")
if "温度" in question and "北京" in question:
print("思考: 需要查询北京温度")
temp = search_simple("北京温度")
print(f"行动: 查询北京温度 → 结果: {temp}")
if "华氏" in question and "25" in question:
print("思考: 需要将25°C转换为华氏")
result = calculate_simple("25 * 9/5 + 32")
print(f"行动: 计算华氏温度 → 结果: {result}°F")
return f"北京温度{temp},转换为华氏是{result}°F"
# 使用
answer = simple_react_agent("北京温度多少?25°C转华氏是多少?")
print(f"回答: {answer}")
十、学习路径建议
入门者路线图
- 第一周:理解ReAct基本概念,运行示例代码
- 第二周:学习创建自定义工具
- 第三周:探索不同LLM模型与ReAct的结合
- 第四周:构建实际应用项目
常见误区提醒
- ❌ ReAct不是React前端框架
- ❌ 不是所有AI代理都需要ReAct模式
- ❌ ReAct不是魔法,需要合理设计工具
- ✅ ReAct让AI更可靠、可解释
- ✅ 适合多步骤、需要工具的任务
总结
ReAct模式 是让AI从"聊天机器人"升级为"智能助手"的关键技术。通过思考→行动→观察 的循环,AI能够像人类一样规划任务、使用工具、解决问题。您的代码中的create_react_agent就是创建这样一个智能代理的快捷方式。
学习ReAct不仅是学习一个技术,更是理解未来AI如何真正帮助我们完成工作的思维方式。从简单的工具调用开始,逐步构建能够处理复杂任务的智能系统,这正是AI技术最有价值的方向之一。