从 “瞎猜” 到 “精准”:一文搞懂 LLM reAct 框架的底层逻辑与实战
核心概念:打破“幻觉”的循环
想象一下,你正在主导设计一个复杂的业务系统,比如一个需要处理海量高校数据的智能助手。
如果用户问大模型:“找出计算机系上个月登记的、采用率最高的三本教材,并核对它们在最新系统里的定价。”
-
传统大模型(裸聊): 它没有内部最新的业务数据,于是它会根据它几年前训练过的语料,一本正经地“胡说八道”(这就是幻觉)。
-
使用了 ReAct 框架的大模型: 它不会立刻给你答案,而是会开启一个经典的 “思考 (Thought) -> 行动 (Action) -> 观察 (Observation)” 的严密推理循环。
ReAct 的“三步走”工作流
大模型在后台的“内心戏”和操作步骤会变成这样:

第一轮循环:
-
🤔 思考 (Thought): “用户需要计算机系上个月采用率最高的教材。我不知道这些信息。我需要先去系统里查找对应的数据库表。”
-
🛠️ 行动 (Action): 触发系统工具
[查询特定数据表(目标=教材登记表, 院系=计算机, 时间=上个月)]。 -
👀 观察 (Observation): 工具返回了结果:“已找到 50 条记录,按采用率排序前三的是《数据结构》、《计算机网络》、《操作系统》。”
第二轮循环:
-
🤔 思考 (Thought): “好的,我已经拿到了前三本书的名字。现在我需要去另一个系统核对这三本书的最新定价。”
-
🛠️ 行动 (Action): 触发工具
[查询价格接口(书籍名单=[数据结构, 计算机网络, 操作系统])]。 -
👀 观察 (Observation): 工具返回结果:“《数据结构》58元,《计算机网络》65元,《操作系统》45元。”
最终结论:
-
🤔 思考 (Thought): “我现在收集齐了所有需要的信息,可以整理成最终答案回复用户了。”
-
💡 输出 (Output): 结构化、准确地将答案呈现给用户。
为什么 ReAct 如此重要?
-
有理有据,告别瞎编: 它强迫大模型在给出最终答案前,必须先在“思考”环节写出它的逻辑推导过程。
-
与现实世界接轨: 通过“行动”环节,大模型可以调用你写好的各种 API(比如直接去查某个特定的数据库表,而不是在庞杂的知识库里瞎找),获取实时、准确的信息。
-
极高的可控性和可解释性: 作为产品设计者,你可以清晰地在后台日志里看到模型卡在了哪一步、是不是调用错了工具。这就好比你在看一个员工的工作汇报,很容易就能找出流程上的问题并进行修正。
既然你已经掌握了 ReAct 这个让大模型长出“手脚”的底层逻辑,不妨顺着这个思路推演一下:在设计一个实际的 Agent 时,为了避免它滥用工具或者查错地方,在它的 Thought (思考) 环节,你会如何设计底层的提示词,来精准引导它优先去匹配我们指定的数据表呢?
ReAct 框架(Reasoning and Acting)的核心在于将 “推理” (Thought) 和 “行动” (Action) 结合起来。它不仅让模型给出一个答案,还要求模型写下它的思考过程,并决定去调用什么工具(比如搜索、计算器、代码解释器等)。
下面我为你准备了三个不同场景的 ReAct Prompt 例子,你可以直接参考或根据自己的工具集进行修改。
1. 通用百科搜索场景(最经典的用法)
这个例子展示了模型如何通过分步搜索来解决一个复杂的、需要多步查询的问题。
系统提示词 (System Prompt):
你是一个具备推理能力的助手。你可以通过以下格式来回答问题:
Question: 用户的输入问题
Thought: 思考你应该做什么,以及你还需要什么信息
Action: 选择一个工具(搜索[关键词])
Observation: 工具返回的结果(由系统提供)
... (重复 Thought/Action/Observation)
Thought: 我现在知道最终答案了
Final Answer: 最终的详细回答
可用工具:
- 搜索[查询词]: 在互联网上搜索信息。
用户提问 (User): > 谁是 2024 年巴黎奥运会男子百米冠军?他比博尔特的世界纪录慢了多少秒?
模型推理过程 (示例):
Thought: 我需要先确认 2024 年巴黎奥运会男子百米冠军是谁及其成绩,然后查找博尔特的世界纪录成绩,最后进行减法计算。
Action: 搜索[2024年巴黎奥运会男子百米冠军及成绩]
Observation: 冠军是美国的诺亚·莱尔斯 (Noah Lyles),成绩是 9.79 秒。
Thought: 现在我知道了莱尔斯的成绩是 9.79 秒。接下来我需要确认尤塞恩·博尔特保持的男子百米世界纪录。
Action: 搜索[博尔特男子百米世界纪录]
Observation: 尤塞恩·博尔特在 2009 年柏林世锦赛创下的世界纪录是 9.58 秒。
Thought: 莱尔斯是 9.79 秒,博尔特是 9.58 秒。计算差值:9.79 - 9.58 = 0.21 秒。
Final Answer: 2024 年巴黎奥运会男子百米冠军是诺亚·莱尔斯,成绩为 9.79 秒。他比尤塞恩·博尔特 9.58 秒的世界纪录慢了 0.21 秒。
2. 数据处理与计算场景
这个例子展示了如何利用 ReAct 调用 Python 或计算器来处理逻辑性更强的任务。
系统提示词 (System Prompt):
你是一个数据分析专家。请按以下流程思考:
Thought: 分析当前需要进行的计算步骤。
Action: 调用工具 python_interpreter[代码] 运行计算。
Observation: 代码运行结果。
Final Answer: 结论。
可用工具:
- python_interpreter[代码]: 执行 Python 代码进行数学计算或数据处理。
用户提问 (User):
我现在有 50000 元,年化利率是 3.5%,复利计算,5 年后我总共能拿到多少钱?
模型推理过程 (示例):
Thought: 这是一个复利计算问题。公式是 $A = P(1 + r)^n$。其中 P=50000, r=0.035, n=5。我需要写一段 Python 代码来计算。
Action: python_interpreter[print(50000 * (1 + 0.035)**5)]
Observation: 59384.31509375
Thought: 计算结果已经出来了,约为 59384.32 元。
Final Answer: 根据复利公式计算,50000 元以 3.5% 的年化利率投资 5 年后,总金额约为 59,384.32 元。
3. 企业内网/私有知识库场景
这个例子模拟了在办公自动化中,模型如何决定去查询 API 或数据库。
系统提示词 (System Prompt):
你是一个企业助理。你可以访问内部数据库。
格式:
Thought -> Action[API名称: 参数] -> Observation -> Final Answer
可用工具:
- get_user_info[姓名]: 获取员工职位和部门。
- get_calendar[姓名, 日期]: 获取该员工当天的日程安排。
用户提问 (User):
张三下午 3 点有空参加产品评审会吗?
模型推理过程 (示例):
Thought: 我需要先确认“张三”的具体信息,然后查询他今天的日程表。
Action: get_user_info[张三]
Observation: 姓名:张三,部门:产品部,职位:产品经理。
Thought: 确认了身份。现在查询张三在 2026 年 3 月 23 日(今天)的日程。
Action: get_calendar[张三, "2026-03-23"]
Observation: 14:00-15:30 部门周会;16:00-17:00 客户沟通。
Thought: 张三下午 2:00 到 3:30 有部门周会,所以 3:00 他正在开会,没有空。
Final Answer: 张三今天下午 3:00 没有空,他当时正参加部门周会(14:00-15:30)。建议安排在 15:30 之后或 14:00 之前。
给你的建议:
在使用 ReAct 框架时,Few-shot (少样本提示) 非常重要。在 System Prompt 后面放 1-2 个完整的 Thought/Action/Observation/Final Answer 例子,能极大地提高模型遵循格式的稳定性。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)