1、概述
ReAct = Reasoning(思考)+ Acting(行动)
让AI像人类一样:先想一想(Reason),再做一件事(Act),做完事再想一想,循环往复,直到解决问题。
核心思想:
不要让AI直接猜答案,而是让它:
- 思考(Reason):分析问题、制定计划、反思结果
- 行动(Act):调用工具(如搜素、计算、数据库)
- 循环:根据行动结果,再思考,再行动
2、ReAct vs 传统AI
对比项 | 传统方式(直接回答) | ReAct 模式 |
---|---|---|
过程 | 输入 → 直接输出答案 | 输入 → 思考 → 行动 → 思考 → 行动 → 输出 |
可解释性 | 黑箱,不知道怎么想的 | 白箱,能看到每一步思考 |
准确性 | 容易“幻觉”瞎猜 | 基于事实行动,更准确 |
工具使用 | 不会主动调用工具 | 主动调用 API、搜索、计算等 |
错误恢复 | 答错了就错了 | 行动失败后会反思并调整 |
3、ReAct典型步骤
(1)核心循环
Think -> Act -> Observe -> Think ...
一个典型的ReAct交互流程:
1. 🤔 Reason (思考): "我需要查一下北京今天的天气"
2. 🛠 Act (行动): 调用 weatherAPI.getWeather("北京")
3. 👁 Observe (观察): 返回 {"city": "北京", "temp": "25°C", "condition": "晴"}
4. 🤔 Reason: "北京今天晴,25度,适合户外"
5. 🛠 Act: 无(问题已解决)
6. ✅ Answer: "北京今天晴,25度,适合户外活动。"
这个循环可以多次执行,直到问题解决
(2)典型步骤
1)Step 1:Reasoning(推理)
AI开始思考:
- “用户问了什么?”
- “我需要哪些信息?”
- “我可以调用什么工具?”
- “下一步该做什么?”
示例输出:我需要查询北京的天气,可以调用天气 API。
2)Step 2:Acting(行动)
AI 决定调用一个工具:
- 调用
search(query)
搜索网页 - 调用
calculate(expr)
计算数学 - 调用
database.query(sql)
查数据库 - 调用
python(code)
执行代码
格式通常是结构化的,比如:
{
"action": "weather_api",
"action_input": "北京"
}
3)Step 3:Observe(观察)
系统执行工具调用,拿到结果,返回给AI,比如:
{
"observation": "北京,25°C,晴"
}
4)Step 4:继续Reasoning
AI看到结果后继续思考:"我拿到了天气数据,现在可以回答用户了。"
或者如果结果不完整:
”温度是25度,但用户可能想知道是否适合穿短袖,我需要补充穿衣建议。“
5)Step 5:Final Answer(最终回答)
当AI认为问题已解决,输出最终答案给用户
4、ReAct优势
优势 | 说明 |
---|---|
✅ 减少幻觉 | AI 不再瞎猜,而是基于真实工具返回的数据回答 |
✅ 可解释性强 | 你能看到 AI 的“思考过程”,像看侦探破案 |
✅ 能解决复杂问题 | 可以多步推理 + 多次调用工具(如先搜索,再计算) |
✅ 可调试 | 如果答案错了,可以看是哪一步出问题 |
✅ 支持工具扩展 | 可以接入搜索、数据库、代码执行、API 等 |
5、ReAct所需的技术组件
组件 | 说明 |
---|---|
LLM(大模型) | 负责推理和决策(如 GPT、通义千问) |
Tool Calling(工具调用) | 定义工具接口,让 LLM 知道能调用什么 |
Action Parser | 解析 LLM 输出的 action(如 JSON) |
Observation Handler | 执行工具并返回结果 |
Loop Controller | 控制最大步数,防止无限循环 |
Prompt Engineering | 设计提示词,引导 LLM 按 ReAct 格式输出 |
6、ReAct的典型Prompt模板
你可以使用以下工具:
- search(query): 搜索网页
- calculate(expr): 计算数学表达式
- get_weather(city): 获取天气
使用格式:
Thought: 你正在想什么
Action: 要执行的工具
Action Input: 工具参数
Observation: 工具返回结果
...(可以重复)
Thought: 我现在可以回答了
Final Answer: 最终答案