很多人在用大模型做开发时总会频繁遇到回答跑偏、凭空编造信息、调用工具盲目执行等翻车问题,绝大多数人会误以为是模型本身能力不够,但真实核心症结是缺少思考 - 执行 - 观测修正闭环的 ReAct 执行逻辑。ReAct 架构让大模型推理与工具调用交替循环执行,依托实时观测结果迭代调整决策,完美弥补纯推理、纯工具调用两种传统方案的短板。本文完整拆解 ReAct 底层原理、无框架原生 Prompt 手写实现、LangChain 快速集成两套可运行代码,梳理落地适用边界与短板,点明工程落地三大核心关键点,零基础小白、后端程序员均可直接复制代码上手实操

1、什么是ReAct?

ReAct: Synergizing Reasoning and Acting in Language Models,核心思想很简单:让 LLM 交替进行思考(Reasoning)和行动(Acting),而不是一口气给出最终答案。传统做法的问题:

  • 纯推理(Chain-of-Thought):LLM 只能靠自己已有的知识推理,容易产生幻觉,无法获取实时信息。
  • 纯行动(Action-only):LLM 直接调用工具,但缺乏规划和反思,盲目执行。

ReAct 把两者结合:先想,再做,看结果,再想,再做……直到任务完成,每一步包含三个部分(Thought → Action → Observation)。

具体实例:苹果公司现任CEO的母校在哪个州?

Thought 1: 我需要先知道苹果公司现任 CEO 是谁。
Action 1: Search("苹果公司 现任 CEO")
Observation 1: 苹果公司现任 CEO 是 Tim Cook。
Thought 2: 现在我需要查 Tim Cook 的母校。
Action 2: Search("Tim Cook 母校 大学")
Observation 2: Tim Cook 毕业于 Auburn University(本科)和 Duke University(MBA)。
Thought 3: Auburn University 位于 Alabama 州,Duke University 位于 North Carolina 州。
问题问的是母校在哪个州,一般指本科母校。
Action 3: Finish("Alabama")

每次 Thought 都基于前面所有的 Observation 做推理,形成一条有据可依的推理链。

Thought 不只是想一想,它承担了几个关键功能:

  • 任务分解:把复杂问题拆成子步骤
  • 信息整合:综合之前所有 Observation 的信息
  • 错误检测:发现之前的结果不对,调整策略
  • 决策判断:决定下一步用什么工具、传什么参数

2、实现方式

纯prompt实现 :最简单的ReAct就是通过Prompt 工程 + OpenAI 原生 API 实现,让LLM进行固定格式输出,然后自己进行输出解析和条件判断等。它不依赖任何重型框架(如 LangChain),仅靠循环控制 + 正则解析 + 消息历史拼接,完整演示了 AI 如何执行 Thought → Action → Observation 的自主推理过程。

import re
import json
from openai import OpenAI
# ==================== 配置 ====================
API_KEY = ""
BASE_URL = ""
MODEL_NAME = "gpt-3.5-turbo"
# ==============================================
client = OpenAI(api_key=API_KEY, base_url=BASE_URL)
# ============================================================
# 1. 定义工具
# ============================================================
def search(query: str) -> str:
"""模拟搜索工具,实际项目中替换为真实 API"""
# 真实场景:调用 Brave Search / Google / Bing API
return f"搜索结果:关于 '{query}' 的相关信息..."
def calculator(expression: str) -> str:
"""安全计算器"""
try:
result = eval(expression, {"__builtins__": {}})
return str(result)
except Exception as e:
return f"计算错误: {e}"
def sql_query(query: str) -> str:
"""模拟数据库查询"""
return f"查询结果:{query} 返回 42 条记录"
# 工具注册表
TOOLS = {
"Search": search,
"Calculator": calculator,
"SQL": sql_query,
}
# ============================================================
# 2. ReAct 核心循环
# ============================================================
SYSTEM_PROMPT = """你是一个 ReAct 智能助手。你通过交替思考和行动来解决问题。
可用工具:
- Search(query): 搜索信息
- Calculator(expression): 数学计算
- SQL(query): 查询数据库
严格按以下格式输出(每次只输出一步):
Thought: <你的思考过程>
Action: <工具名>(参数)
当你确定最终答案时:
Thought: <最终推理>
Action: Finish(最终答案)
注意:每次只输出一个 Thought + 一个 Action,然后等待 Observation。
"""
def parse_action(text: str) -> tuple[str, str]:
"""从 LLM 输出中解析 Action"""
# 匹配 Action: ToolName(参数内容)
match = re.search(r'Action:\s*(\w+)\((.+?)\)\s*$', text, re.MULTILINE | re.DOTALL)
if match:
tool_name = match.group(1).strip()
tool_arg = match.group(2).strip().strip('"\'')
return tool_name, tool_arg
return None, None
def react_agent(question: str, max_steps: int = 10, verbose: bool = True) -> str:
"""
ReAct Agent 主循环
Args:
question: 用户问题
max_steps: 最大推理步数(防止无限循环)
verbose: 是否打印中间过程
Returns:
最终答案字符串
"""
# 初始化对话历史
messages = [
{"role": "system", "content": SYSTEM_PROMPT},
{"role": "user", "content": f"Question: {question}"},
]
for step in range(1, max_steps + 1):
if verbose:
print(f"\n{'='*50}")
print(f"Step {step}")
print('='*50)
# --- LLM 生成 Thought + Action ---
response = client.chat.completions.create(
model="gpt-3.5-turbo",  # 或其他模型
messages=messages,
temperature=0,
stop=["Observation:"],  # 让模型在 Observation 前停下
)
llm_output = response.choices[0].message.content.strip()
if verbose:
print(f"LLM Output:\n{llm_output}")
# 将 LLM 输出加入历史
messages.append({"role": "assistant", "content": llm_output})
# --- 解析 Action ---
tool_name, tool_arg = parse_action(llm_output)
if tool_name is None:
# 解析失败,提示重新格式化
messages.append({
"role": "user",
"content": "格式错误,请严格按 'Action: ToolName(参数)' 格式输出。"
})
continue
# --- 检查是否结束 ---
if tool_name == "Finish":
if verbose:
print(f"\n✅ Final Answer: {tool_arg}")
return tool_arg
# --- 执行工具 ---
if tool_name not in TOOLS:
observation = f"错误:未知工具 '{tool_name}',可用工具: {list(TOOLS.keys())}"
else:
try:
observation = TOOLS[tool_name](tool_arg)
except Exception as e:
observation = f"工具执行错误: {e}"
if verbose:
print(f"Observation: {observation}")
# 将 Observation 作为 user 消息返回(模拟环境反馈)
messages.append({
"role": "user",
"content": f"Observation: {observation}"
})
return "达到最大步数限制,未能得出答案。"
if __name__ == "__main__":
answer = react_agent("计算10/2+3")
print(f"\n最终答案: {answer}")

运行结果如下:

==================================================
Step 1
==================================================
LLM Output:
Thought: 我需要先计算10除以2的结果,然后再加上3。
Action: Calculator(10/2)
Observation: 5.0
==================================================
Step 2
==================================================
LLM Output:
Thought: 现在我有了10除以2的结果是5.0,接下来我需要将这个结果加上3。
Action: Calculator(5.0 + 3)
Observation: 8.0
==================================================
Step 3
==================================================
LLM Output:
Thought: 最终结果是8.0,这是10除以2再加3的计算结果。
Action: Finish(8.0)
✅ Final Answer: 8.0
最终答案: 8.0

LangChain实现:

from langchain_openai import ChatOpenAI
from langchain_core.tools import tool
from langgraph.prebuilt import create_react_agent
# ==================== 配置 ====================
API_KEY = ""
BASE_URL = ""
MODEL_NAME = "gpt-3.5-turbo"
# ==================== 定义工具 ====================
@tool
def search(query: str) -> str:
"""搜索互联网获取实时信息"""
return f"搜索结果:关于 '{query}' 的相关信息..."
@tool
def calculator(expression: str) -> str:
"""计算数学表达式"""
try:
result = eval(expression, {"__builtins__": {}})
return str(result)
except Exception as e:
return f"计算错误: {e}"
tools = [search, calculator]
# ==================== 创建 Agent ====================
llm = ChatOpenAI(api_key=API_KEY, base_url=BASE_URL, model=MODEL_NAME, temperature=0)
agent = create_react_agent(llm, tools)
# ==================== 运行并打印完整过程 ====================
result = agent.invoke({"messages": [{"role": "user", "content": "计算10/2+3"}]})
for msg in result["messages"]:
print(f"[{msg.type}] {msg.content}")
if hasattr(msg, "tool_calls") and msg.tool_calls:
for tc in msg.tool_calls:
print(f"  → 调用工具: {tc['name']}({tc['args']})")
print("-" * 40)

运行结果如下:

[human] 计算10/2+3
----------------------------------------
[ai]
→ 调用工具: calculator({'expression': '10/2+3'})
----------------------------------------
[tool] 8.0
----------------------------------------
[ai] 计算结果是 8.0。
----------------------------------------

3、适用场景和局限性

适合用 ReAct 的场景

  • 需要查询外部信息的问答(知识密集型)
  • 多步骤推理任务
  • 需要调用多个工具协同完成的任务
  • 需要根据中间结果动态调整策略的任务

局限性

  • Token 消耗大:每一步都要把完整历史发给 LLM
  • 延迟高:多轮 LLM 调用 + 工具调用
  • 依赖 LLM 能力:小模型可能无法稳定遵循 ReAct 格式
  • 工具设计很重要:工具描述不清晰会导致调用错误

ReAct 不是魔法,而是一套让大模型学会如何干活的工程范式,无论是用纯 Prompt 手写控制,还是借助 LangChain 快速搭建,核心逻辑从未改变,在实际落地中你会发现,随着大模型能力越来越强,ReAct 的瓶颈往往不在模型能力,而在工具设计、Prompt 稳定性与上下文管理。但这正是AI工程师的价值所在。

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线科技企业深耕十二载,见证过太多因技术卡位而跃迁的案例。那些率先拥抱 AI 的同事,早已在效率与薪资上形成代际优势,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在大模型的学习中的很多困惑。我们整理出这套 AI 大模型突围资料包

  • ✅ 从零到一的 AI 学习路径图
  • ✅ 大模型调优实战手册(附医疗/金融等大厂真实案例)
  • ✅ 百度/阿里专家闭门录播课
  • ✅ 大模型当下最新行业报告
  • ✅ 真实大厂面试真题
  • ✅ 2026 最新岗位需求图谱

所有资料 ⚡️ ,朋友们如果有需要 《AI大模型入门+进阶学习资源包》下方扫码获取~
在这里插入图片描述

① 全套AI大模型应用开发视频教程

(包含提示工程、RAG、LangChain、Agent、模型微调与部署、DeepSeek等技术点)
在这里插入图片描述

② 大模型系统化学习路线

作为学习AI大模型技术的新手,方向至关重要。 正确的学习路线可以为你节省时间,少走弯路;方向不对,努力白费。这里我给大家准备了一份最科学最系统的学习成长路线图和学习规划,带你从零基础入门到精通!
在这里插入图片描述

③ 大模型学习书籍&文档

学习AI大模型离不开书籍文档,我精选了一系列大模型技术的书籍和学习文档(电子版),它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础。
在这里插入图片描述

④ AI大模型最新行业报告

2025最新行业报告,针对不同行业的现状、趋势、问题、机会等进行系统地调研和评估,以了解哪些行业更适合引入大模型的技术和应用,以及在哪些方面可以发挥大模型的优势。
在这里插入图片描述

⑤ 大模型项目实战&配套源码

学以致用,在项目实战中检验和巩固你所学到的知识,同时为你找工作就业和职业发展打下坚实的基础。
在这里插入图片描述

⑥ 大模型大厂面试真题

面试不仅是技术的较量,更需要充分的准备。在你已经掌握了大模型技术之后,就需要开始准备面试,我精心整理了一份大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余

图片

以上资料如何领取?

在这里插入图片描述

为什么大家都在学大模型?

最近科技巨头英特尔宣布裁员2万人,传统岗位不断缩减,但AI相关技术岗疯狂扩招,有3-5年经验,大厂薪资就能给到50K*20薪!

图片

不出1年,“有AI项目经验”将成为投递简历的门槛。

风口之下,与其像“温水煮青蛙”一样坐等被行业淘汰,不如先人一步,掌握AI大模型原理+应用技术+项目实操经验,“顺风”翻盘!
在这里插入图片描述
在这里插入图片描述

这些资料真的有用吗?

这份资料由我和鲁为民博士(北京清华大学学士和美国加州理工学院博士)共同整理,现任上海殷泊信息科技CEO,其创立的MoPaaS云平台获Forrester全球’强劲表现者’认证,服务航天科工、国家电网等1000+企业,以第一作者在IEEE Transactions发表论文50+篇,获NASA JPL火星探测系统强化学习专利等35项中美专利。本套AI大模型课程由清华大学-加州理工双料博士、吴文俊人工智能奖得主鲁为民教授领衔研发。

资料内容涵盖了从入门到进阶的各类视频教程和实战项目,无论你是小白还是有些技术基础的技术人员,这份资料都绝对能帮助你提升薪资待遇,转行大模型岗位。
在这里插入图片描述
在这里插入图片描述

以上全套大模型资料如何领取?

在这里插入图片描述

Logo

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

更多推荐