LangChain Agent的ReAct框架
Agent的ReAct框架
Agent ReAct是大模型智能体的核心思考与行动框架,全称Reasoning + Acting(推理+行动),是让Agent像人类一项【思考问题-> 制定策略->执行行动->验证结果】的关键逻辑
ReAct让Agent不再是“直接回答问题”,而是通过“自然语言思考过程”指导工具调用,一步步解决复杂问题,完美适配需要多步推理、工具协作的场景(如智能客服、报告生成、任务规划等)
一个典型的ReAct范式的Agent如图所示:

-
思考Reasoning:分析问题,判断现有信息是否足够,明确下一步
- 即模型决策是否需要调用外部工具获取更多信息用来回答问题
-
行动Action:执行思考阶段指定的策略
- 即基于模型决策结果,调用工具获取信息
-
观察Observation:获取行动结果,提取有效信息
- 即获取工具返回值 即判断工具是否正常工作 为下一轮思考提供信息
(再)思考->(再)行动->(再)观察->循环往复直到结束
from langchain.agents import create_agent
from langchain_community.chat_models import ChatTongyi
from langchain_core.tools import tool
@tool(description="获取体重,返回值是整数,单位千克")
def get_weight() -> int:
return 55
@tool(description="获取身高,返回值是整数,单位厘米")
def get_height() -> int:
return 178
# create_agent 默认使用ReAct框架
agent = create_agent(
model=ChatTongyi(model="qwen3-max"),
tools=[get_weight, get_height],
system_prompt="""你是一个严格遵循ReAct框架的智能体,必须按【思考->行动->观察->再思考】的流程解决问题
且**每轮仅能思考并调用一个工具**,禁止单词调用多个工具
告知我你的**思考过程**,工具调用的原因,按思考、行动、观察三个结构告知我
"""
)
for chunk in agent.stream(
{
"messages": [
{"role": "user", "content": "计算我的BMI?"},
]
},
stream_mode="values"
):
latest_message = chunk["messages"][-1]
if latest_message.content:
print(type(latest_message).__name__, latest_message.content)
try:
if latest_message.tool_calls:
print(f"工具调用: { [tc['name'] for tc in latest_message.tool_calls] }")
except AttributeError as e:
pass
输出:
D:\ProgramPackege\Python\python.exe D:\Code\Python\AI\LangChain\30_LangChain_Agent的ReAct框架.py
HumanMessage 计算我的BMI?
AIMessage 【思考】
要计算BMI(身体质量指数),需要知道体重(千克)和身高(米)。公式为:
$$ \text{BMI} = \frac{\text{体重(kg)}}{\text{身高(m)}^2} $$
目前我既没有体重也没有身高的数据,因此需要先获取其中一个值。按照工具调用规则,每轮只能调用一个工具,所以我先获取体重。
【行动】
工具调用: ['get_weight']
ToolMessage 55
AIMessage 【观察】
获取到体重为55千克。
【思考】
现在我已经知道体重是55千克,接下来需要获取身高(厘米),然后将其转换为米以计算BMI。按照规则,每轮只能调用一个工具,因此下一步我将调用获取身高的工具。
【行动】
工具调用: ['get_height']
ToolMessage 178
AIMessage 【观察】
获取到身高为178厘米,即1.78米。
【思考】
现在我已获得计算BMI所需的全部数据:体重55千克,身高1.78米。接下来可以计算BMI值。
$$ \text{BMI} = \frac{55}{1.78^2} \approx \frac{55}{3.1684} \approx 17.36 $$
根据计算结果,BMI约为17.36,属于偏瘦范围(正常范围为18.5–24)。
由于已经完成所有必要步骤,无需进一步调用工具。

浙公网安备 33010602011771号