零基础学AI大模型之LangChain智能体执行引擎AgentExecutor

大家好,我是工藤学编程 🦉 一个正在努力学习的小博主,期待你的关注
实战代码系列最新文章😉 C++实现图书管理系统(Qt C++ GUI界面版)
SpringBoot实战系列🐷 【SpringBoot实战系列】SpringBoot3.X 整合 MinIO 存储原生方案
分库分表 分库分表之实战-sharding-JDBC分库分表执行流程原理剖析
消息队列 深入浅出 RabbitMQ-RabbitMQ消息确认机制(ACK)
AI大模型 零基础学AI大模型之CoT思维链和ReAct推理行动

前情摘要

1、零基础学AI大模型之读懂AI大模型
2、零基础学AI大模型之从0到1调用大模型API
3、零基础学AI大模型之SpringAI
4、零基础学AI大模型之AI大模型常见概念
5、零基础学AI大模型之大模型私有化部署全指南
6、零基础学AI大模型之AI大模型可视化界面
7、零基础学AI大模型之LangChain
8、零基础学AI大模型之LangChain六大核心模块与大模型IO交互链路
9、零基础学AI大模型之Prompt提示词工程
10、零基础学AI大模型之LangChain-PromptTemplate
11、零基础学AI大模型之ChatModel聊天模型与ChatPromptTemplate实战
12、零基础学AI大模型之LangChain链
13、零基础学AI大模型之Stream流式输出实战
14、零基础学AI大模型之LangChain Output Parser
15、零基础学AI大模型之解析器PydanticOutputParser
16、零基础学AI大模型之大模型的"幻觉"
17、零基础学AI大模型之RAG技术
18、零基础学AI大模型之RAG系统链路解析与Document Loaders多案例实战
19、零基础学AI大模型之LangChain PyPDFLoader实战与PDF图片提取全解析
20、零基础学AI大模型之LangChain WebBaseLoader与Docx2txtLoader实战
21、零基础学AI大模型之RAG系统链路构建:文档切割转换全解析
22、零基础学AI大模型之LangChain 文本分割器实战:CharacterTextSplitter 与 RecursiveCharacterTextSplitter 全解析
23、零基础学AI大模型之Embedding与LLM大模型对比全解析
24、零基础学AI大模型之LangChain Embedding框架全解析
25、零基础学AI大模型之嵌入模型性能优化
26、零基础学AI大模型之向量数据库介绍与技术选型思考
27、零基础学AI大模型之Milvus向量数据库全解析
28、零基础学AI大模型之Milvus核心:分区-分片-段结构全解+最佳实践
29、零基础学AI大模型之Milvus部署架构选型+Linux实战:Docker一键部署+WebUI使用
30、零基础学AI大模型之Milvus实战:Attu可视化安装+Python整合全案例
31、零基础学AI大模型之Milvus索引实战
32、零基础学AI大模型之Milvus DML实战
33、零基础学AI大模型之Milvus向量Search查询综合案例实战
33、零基础学AI大模型之新版LangChain向量数据库VectorStore设计全解析
34、零基础学AI大模型之相似度Search与MMR最大边界相关搜索实战
35、零基础学AI大模型之LangChain整合Milvus:新增与删除数据实战
36、零基础学AI大模型之LangChain+Milvus实战:相似性搜索与MMR多样化检索全解析
37、零基础学AI大模型之LangChain Retriever
38、零基础学AI大模型之MultiQueryRetriever多查询检索全解析
39、零基础学AI大模型之LangChain核心:Runnable接口底层实现
40、零基础学AI大模型之RunnablePassthrough
41、零基础学AI大模型之RunnableParallel
42、零基础学AI大模型之RunnableLambda
43、零基础学AI大模型之RunnableBranch
44、零基础学AI大模型之Agent智能体
45、零基础学AI大模型之LangChain Tool工具
46、零基础学AI大模型之LLM绑定Tool工具实战
47、零基础学AI大模型之LangChain Tool异常处理
48、零基础学AI大模型之CoT思维链和ReAct推理行动
49、零基础学AI大模型之Zero-Shot和Few-Shot


本文章目录

零基础学AI大模型之LangChain智能体执行引擎AgentExecutor

咱们之前学了Agent智能体、Tool工具、CoT和ReAct,知道了智能体可以"思考-行动-观察"完成任务。但实际开发时会发现:让智能体跑通多步骤任务,光有Agent和Tool还不够------循环执行、错误处理、防死循环这些琐事太费精力了。

今天就来学个"神器"------LangChain的AgentExecutor(智能体执行引擎) ,它就像智能体的"管家",把所有执行层面的杂活全揽了,让咱们专心搞业务逻辑~

一、为什么需要AgentExecutor?这些痛点太折磨人了

没AgentExecutor的时候,咱们开发多步骤智能体,得手动搞定一堆麻烦事:

  1. 执行循环:要写代码判断智能体是该继续思考、调用工具,还是返回结果;
  2. 错误处理:工具调用超时、模型输出格式错、参数传错,都得一个个捕获处理;
  3. 防死循环:万一智能体陷入"思考-调用工具-思考"的死循环,程序就崩了;
  4. 日志调试:想知道智能体每一步干了啥,得自己写日志记录,排查问题超难。

总结下来就是三个痛点:

  • 代码冗余:重复写循环、错误处理逻辑,越写越乱;
  • 维护成本高:复杂任务里,流程稳定性根本没法保证;
  • 可观测性差:多步骤执行出问题,不知道错在第一步还是第十步。

而AgentExecutor的出现,就是为了把这些"杂活"全封装,让咱们不用关心"怎么执行",只关心"要做什么任务"。

二、什么是AgentExecutor?智能体的"执行管家"

AgentExecutor是LangChain官方提供的智能体执行引擎,核心作用是封装智能体执行过程中的所有通用逻辑,让开发者聚焦业务。

简单说:你把智能体(Agent)、工具(Tools)交给它,它就能自动完成"思考→行动→观察→再思考"的循环,直到任务结束,还能帮你处理错误、防死循环、记日志。

就像你雇了个厨师(Agent),给了他食材(Tools),AgentExecutor就是餐厅经理------负责安排厨师干活流程、处理食材损坏(错误)、防止厨师一直炒同一道菜(死循环)、记录做菜步骤(日志),你只需要等着吃就行(要结果)。

三、核心功能:AgentExecutor能帮你干哪些事?

AgentExecutor的核心功能全是针对之前的痛点设计的,每一个都很实用:

  1. 自动执行循环:不用写循环代码,它会根据智能体输出,判断是继续调用工具,还是返回最终结果;
  2. 智能错误处理:能捕获工具调用异常、模型输出解析错误,支持自动重试或自定义回退逻辑;
  3. 迭代次数限制:通过参数设置最大执行次数,防止智能体陷入死循环;
  4. 详细日志追踪:开启后能看到每一步的思考、行动、观察结果,调试超方便,还能集成LangSmith做更专业的追踪;
  5. 统一输入输出:自动格式化最终结果,不想展示中间步骤就隐藏,想展示也能轻松获取。

四、关键参数:用好AgentExecutor的"密码"

创建AgentExecutor时,几个关键参数决定了它的表现,咱们一个个说清楚(直接用表格更直观):

参数名 作用说明 常用值/示例
agent 绑定要执行的智能体实例(如ReAct Agent、Zero-Shot Agent) agent=react_agent(自定义的智能体)
tools 智能体可调⽤的工具列表 tools=[search_tool, calc_tool]
verbose 是否打印详细执行日志(调试必开,生产可关) True/False(默认False)
max_iterations 最大执行迭代次数(防死循环,根据任务复杂度设3-10) 3、5、10
handle_parsing_errors 处理模型输出解析错误(如返回无效工具名) True/自定义函数(如lambda e: "解析错")
return_intermediate_steps 是否返回中间步骤结果(调试、展示完整链路时用) True/False(默认False)

这些参数里,verbose=Truemax_iterations是开发时必设的------前者帮你看清楚执行过程,后者帮你避免程序崩掉。

五、使用场景:什么时候该用AgentExecutor?

只要你的智能体需要执行多步骤任务,AgentExecutor就必须用!常见场景有这4类:

  1. 多步骤工具调用:比如"先查商品价格,再算折扣价""先查天气,再推荐穿搭";
  2. 工具依赖任务:比如预订航班,需要先调用"查航班"工具,再调用"订机票"工具,最后调用"发短信通知"工具;
  3. 复杂推理任务:比如数学题需要多次尝试不同公式,逻辑推理需要逐步验证;
  4. 生产环境部署:需要保证服务稳定,自动处理超时、限流、格式错误等异常。

六、LangChain实战:用AgentExecutor跑通多步骤任务

咱们用之前学的ReAct Agent,结合AgentExecutor,做一个"查北京气温并转换为华氏度"的任务------先查摄氏度,再调用计算工具转换,全程让AgentExecutor管执行。

6.1 实战步骤:先准备工具和智能体

首先安装依赖(如果没装的话):

bash 复制代码
pip install langchain langchain-openai

6.2 完整代码

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

# 1. 初始化大模型(通义千问,替换成自己的api_key)
llm = ChatOpenAI(
    model_name="qwen-plus",
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
    api_key="sk-xxx",
    temperature=0.3
)

# 2. 加载工具:天气查询工具 + 计算工具
tools = load_tools(["openweathermap", "calculator"], llm=llm)

# 3. 定义ReAct Agent的提示词模板
react_prompt = ChatPromptTemplate.from_messages([
    ("system", "你是一个助手,能调用工具解决问题。先思考需要做什么,再调用合适的工具。"),
    ("human", "{input}"),
    ("placeholder", "{agent_scratchpad}")  # 存储思考、行动、观察记录
])

# 4. 创建ReAct智能体
react_agent = create_react_agent(
    llm=llm,
    tools=tools,
    prompt=react_prompt
)

# 5. 创建AgentExecutor(核心:执行引擎)
agent_executor = AgentExecutor(
    agent=react_agent,
    tools=tools,
    verbose=True,  # 开启日志,看执行过程
    max_iterations=3,  # 最多执行3步,防死循环
    handle_parsing_errors=True,  # 自动处理解析错误
    return_intermediate_steps=True  # 返回中间步骤,方便调试
)

# 6. 执行任务:查北京气温并转换为华氏度
task = "查询北京现在的气温(摄氏度),并转换为华氏度,最后告诉我结果。"
response = agent_executor.invoke({"input": task})

# 7. 输出结果
print("\n最终结果:", response["output"])
print("\n中间步骤:")
for step in response["intermediate_steps"]:
    print(f"步骤:{step}")

6.3 运行结果解读

开启verbose=True后,控制台会输出详细执行过程,大概是这样:

复制代码
> Entering new AgentExecutor chain...
我需要先查询北京的气温(摄氏度),再用计算器转换为华氏度。
Action: openweathermap
Action Input: 北京
Observation: Current weather in 北京: clear sky, temperature: 25°C
Thought: 现在知道北京气温是25摄氏度,需要转换为华氏度,公式是华氏度=摄氏度×9/5 +32。
Action: calculator
Action Input: 25 * 9 / 5 + 32
Observation: 77.0
Thought: 已经算出结果,25摄氏度等于77华氏度,可以直接回答用户。
Final Answer: 北京现在的气温为25摄氏度,转换为华氏度是77华氏度。

> Finished chain.

最终结果: 北京现在的气温为25摄氏度,转换为华氏度是77华氏度。

中间步骤:
步骤:(ToolCall(...), 'Current weather in 北京: clear sky, temperature: 25°C')
步骤:(ToolCall(...), '77.0')

可以看到:AgentExecutor自动完成了"查天气→算华氏度→返回结果"的两步循环,还记录了每一步的行动和结果,完全不用我们写循环和日志代码!

七、避坑技巧:让AgentExecutor稳定运行的5个要点

  1. 调试必开verbose=True:不管什么任务,开发时先开日志,能快速定位"思考错了"还是"工具调用错了";
  2. 合理设置max_iterations:简单任务设3-5步,复杂任务设8-10步,太多浪费资源,太少完不成任务;
  3. 自定义错误处理逻辑 :如果handle_parsing_errors=True满足不了需求,可以写自定义函数,比如"解析错误时提示用户重新提问";
  4. 生产环境关verbose:日志会占用资源,生产时设为False,只保留必要的错误日志;
  5. 集成LangSmith做追踪:复杂任务可以集成LangSmith,能看到更详细的执行链路、耗时、错误率,方便优化。

八、总结

今天咱们学会了AgentExecutor这个"执行管家",核心要点总结3句话:

  1. AgentExecutor帮我们搞定智能体执行的杂活:循环、错误、防死循环、日志;
  2. 关键参数要记牢:verbose(调试)、max_iterations(防死循环)、handle_parsing_errors(错误处理);
  3. 只要是多步骤智能体任务,都要用它------开发效率翻倍,稳定性也大大提升。

有了AgentExecutor,咱们后续开发复杂智能体(比如智能助手、数据分析机器人)就轻松多了,不用再纠结执行层面的细节,专心设计任务逻辑和工具就行~

如果本文对你有帮助,欢迎点赞+关注+收藏🌟 ,有任何问题或实战需求,欢迎在评论区留言交流~ 我是工藤学编程,陪你从零到一玩转AI大模型!🚀

相关推荐
图生生7 小时前
基于AI的商品场景图批量生成方案,助力电商大促效率翻倍
人工智能·ai
说私域7 小时前
短视频私域流量池的变现路径创新:基于AI智能名片链动2+1模式S2B2C商城小程序的实践研究
大数据·人工智能·小程序
yugi9878387 小时前
用于图像分类的EMAP:概念、实现与工具支持
人工智能·计算机视觉·分类
aigcapi7 小时前
AI搜索排名提升:GEO优化如何成为企业增长新引擎
人工智能
彼岸花开了吗7 小时前
构建AI智能体:八十、SVD知识整理与降维:从数据混沌到语义秩序的智能转换
人工智能·python·llm
MM_MS7 小时前
Halcon图像锐化和图像增强、窗口的相关算子
大数据·图像处理·人工智能·opencv·算法·计算机视觉·视觉检测
韩师傅7 小时前
前端开发消亡史:AI也无法掩盖没有设计创造力的真相
前端·人工智能·后端
AI大佬的小弟7 小时前
【小白第一课】大模型基础知识(1)---大模型到底是啥?
人工智能·自然语言处理·开源·大模型基础·大模型分类·什么是大模型·国内外主流大模型
lambo mercy7 小时前
无监督学习
人工智能·深度学习