LangChain Agent的ReAct框架

Agent的ReAct框架

Agent ReAct是大模型智能体的核心思考与行动框架,全称Reasoning + Acting(推理+行动),是让Agent像人类一项【思考问题-> 制定策略->执行行动->验证结果】的关键逻辑

ReAct让Agent不再是“直接回答问题”,而是通过“自然语言思考过程”指导工具调用,一步步解决复杂问题,完美适配需要多步推理、工具协作的场景(如智能客服、报告生成、任务规划等)

一个典型的ReAct范式的Agent如图所示:

image

  • 思考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)。  

由于已经完成所有必要步骤,无需进一步调用工具。

posted @ 2026-03-18 16:50  风陵南  阅读(122)  评论(0)    收藏  举报