LangChain 设计原理分析⁷ | Agent 架构设计详解:决策循环与 ReAct

本文聚焦 LangChain 中 Agent 架构的核心执行逻辑,深入解析 AgentExecutor 如何驱动 LLM 推理、工具调用与中间态反馈循环,结合 ReAct 思维链模式与 scratchpad 记忆机制,构建具备决策能力的智能体系统。


一、什么是 Agent?

Agent 是 LangChain 的高阶抽象,代表一种 具备工具调用能力、拥有上下文记忆、能进行决策思考的智能体结构

它的基本职责包括:

  • 接收用户输入
  • 使用语言模型进行思考(Reasoning)
  • 选择工具并调用(Acting)
  • 接收工具反馈继续推理(Observation)
  • 判断是否可以输出最终答案(Decision)

LangChain 中默认采用 ReAct(推理与行动的协同)思维链作为 Agent 的策略模式,强调 语言模型推理驱动工具调用 的循环执行。


二、Agent 架构核心组件

组件名称 描述
AgentExecutor 整个 Agent 系统的运行控制器(核心入口)
ReActAgent 基于"思考-行动-观察"模式构建的默认 Agent
Tool 可被 Agent 调用的外部函数模块
AgentAction 模型当前决定使用的工具及输入
AgentFinish 模型决定终止,输出最终结果
scratchpad Agent 记录思考过程与工具反馈的中间文本

三、执行机制:AgentExecutor 决策循环

AgentExecutor 是 Agent 的运行引擎,它内部执行的循环大致如下:


graph TD A[用户输入] --> B["LLM 推理出 Action(选择工具 + 输入)"] --> C["执行 Tool 获取 Observation(反馈结果)"] --> D["拼接进 scratchpad(中间记忆)"] --> E["再次送入 LLM,循环直到返回 Final Answer"]

每一轮中间步骤会拼接到 Prompt 中,驱动模型完成下一轮推理。


示例思维链 Prompt 样式(ReAct):

makefile 复制代码
Question(用户输入): 12 * 7 是多少?
Thought(推理): 我需要进行计算
Action(行动): Calculator[input=12*7]
Observation(观察): 84
Thought(再推理): 我已经知道答案了
Final Answer: 84

四、实战:基于 ReAct 构建一个 AgentExecutor

✅ 步骤 1:定义 Tool

python 复制代码
from langchain_core.tools import Tool

def multiply_tool(expr: str) -> str:
    """接收乘法表达式如 '8*6' 并返回结果"""
    try:
        expr = expr.strip().replace("'", '').replace('"', '')
        return str(eval(expr))
    except Exception as e:
        print(f"输入的表达式:{expr.__repr__()} | 异常:{e}")
        return "表达式格式错误,请输入如 '3*7'"

tool = Tool(
    name="乘法计算工具",  # 工具名,必须是唯一的字符串
    func=multiply_tool,  # 工具执行函数
    description="输入形如 '3*5' 的字符串,返回乘积"  # 描述要清晰准确
)

LangChain 工具需要带有类型注解和 docstring,用于 Agent 生成正确的调用参数。


✅ 步骤 2:初始化 Chat 模型和 AgentExecutor

python 复制代码
import os
from langchain_core.prompts import PromptTemplate
from langchain.agents import AgentExecutor, create_react_agent
from langchain_openai import ChatOpenAI

# 初始化模型
llm = ChatOpenAI(
    temperature=0.1,
    model='deepseek-chat',
    openai_api_key=os.getenv('DEEPSEEK_API_KEY'),
    openai_api_base='https://api.deepseek.com',
    max_tokens=1024
)

template = """你是一个可以通过工具来完成任务的智能 AI 助手,擅长推理、规划和执行。

你的目标是尽可能准确地解决用户的问题。你可以访问以下工具:

{tools}

严格地使用以下格式进行思考与行动:

Question: 用户的输入内容
Thought: 你对当前问题的理解与推理
Action: 选择调用的工具名称,应为 [{tool_names}] 之一
Action Input: 务必准确的工具所需的输入
Observation: 调用工具返回的结果

...(Thought/Action/Action Input/Observation 可以重复多次)

Thought: 根据观察得出的最终结论
Final Answer: 给用户的直接答复

开始!

Question: {input}
Thought: {agent_scratchpad}"""

prompt = PromptTemplate.from_template(template)

# 构造 ReAct 类型的 Agent
agent = create_react_agent(
    llm=llm,
    tools=[tool],
    prompt=prompt
)

# 构造 AgentExecutor,控制执行过程
executor = AgentExecutor.from_agent_and_tools(
    agent=agent,
    tools=[tool],
    verbose=True,  # 打印推理过程
    handle_parsing_errors=True
)

✅ 步骤 3:调用 AgentExecutor 执行任务

python 复制代码
response = executor.invoke({"input": "帮我计算 19 乘以 21 是多少?"})

print("最终输出结果:", response["output"])

示例输出(含中间推理):


五、scratchpad:中间记忆的核心

/ˈskrætʃpæd/ (音似"斯克软奇-帕德")

scratchpad 是 AgentExecutor 拼接的中间思维链:

text 复制代码
"Thought: 用户需要计算19乘以21的结果,我可以使用乘法计算工具来完成这个任务。\nAction: 乘法计算工具\nAction Input: '19*21'\nObservation: 399"

其作用是:

  • 让 LLM 看到自己曾经做了什么
  • 帮助 LLM 规划下一步行为
  • 让思维链自然递进(思考 → 执行 → 反馈 → 思考)

LangChain 中 Agent 的 prompt 会动态地将 intermediate_steps(AgentAction + Observation 的步骤)格式化并注入。


六、相关类的执行调用栈梳理

类名 关键方法 描述
AgentExecutor .invoke() 执行整个 Agent 流程
BaseAgent(抽象) .plan() 根据 prompt 决定下一步行为
ReActAgent 重写 .plan() 返回 AgentAction 或 AgentFinish
Tool .invoke(input) 实际执行函数逻辑

七、提示设计建议(可调节 Agent 效果)

  • 使用描述性 Tool docstring,有助于 LLM 选择正确工具
  • 控制 prompt 中 scratchpad 长度,避免上下文过长
  • 开启 verbose=True 便于观察 Agent 行为路径
  • 若需更细粒度控制,可重写 Agent、Tool 或增加 Memory

🔚 小结

  • LangChain Agent 采用 ReAct 思维模式,支持 LLM+工具 协作式推理
  • AgentExecutor 执行决策循环,驱动工具调用和上下文反馈
  • scratchpad 是核心中间结构,构建模型的"短期记忆"
  • 实现智能体行为链只需组合模型、工具、AgentExecutor,即可实现可观察、可插拔、可调节的智能链路

接下来,我们将探索如何构建你自己的 Tool 系统、接入外部插件、实现复杂状态的维护与控制,从而构建功能更丰富、行为更可控的智能体系统。

相关推荐
王国强20099 小时前
LangChain 设计原理分析⁶ | Memory 系统设计:如何构建上下文感知的链
langchain
掘我的金9 小时前
04_LangChain服务部署与链路监控
langchain
都叫我大帅哥11 小时前
🌟 LangChain回调机制全解析:从入门到实战,打造你的AI智能小助手
python·langchain·ai编程
Chasing__Dreams13 小时前
langchain--1--prompt、output格式、LCEL示例
langchain
王国强20091 天前
LangChain 设计原理分析⁵ | PromptTemplate 模板系统与上下文注入机制
langchain
都叫我大帅哥1 天前
当AI遇上话痨:LangGraph的`trim_messages`裁剪艺术完全指南
python·langchain·ai编程
青衫客362 天前
LLM——使用 LangGraph 构建 ReAct 智能体:多轮对话 + 工具调用 + 可视化流程图
langchain·大模型·llm·agent·langgraph