| 大家好,我是工藤学编程 🦉 | 一个正在努力学习的小博主,期待你的关注 |
|---|---|
| 实战代码系列最新文章😉 | 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
-
- 一、为什么需要AgentExecutor?这些痛点太折磨人了
- 二、什么是AgentExecutor?智能体的"执行管家"
- 三、核心功能:AgentExecutor能帮你干哪些事?
- 四、关键参数:用好AgentExecutor的"密码"
- 五、使用场景:什么时候该用AgentExecutor?
- 六、LangChain实战:用AgentExecutor跑通多步骤任务
-
- [6.1 实战步骤:先准备工具和智能体](#6.1 实战步骤:先准备工具和智能体)
- [6.2 完整代码](#6.2 完整代码)
- [6.3 运行结果解读](#6.3 运行结果解读)
- 七、避坑技巧:让AgentExecutor稳定运行的5个要点
- 八、总结
零基础学AI大模型之LangChain智能体执行引擎AgentExecutor
咱们之前学了Agent智能体、Tool工具、CoT和ReAct,知道了智能体可以"思考-行动-观察"完成任务。但实际开发时会发现:让智能体跑通多步骤任务,光有Agent和Tool还不够------循环执行、错误处理、防死循环这些琐事太费精力了。
今天就来学个"神器"------LangChain的AgentExecutor(智能体执行引擎) ,它就像智能体的"管家",把所有执行层面的杂活全揽了,让咱们专心搞业务逻辑~
一、为什么需要AgentExecutor?这些痛点太折磨人了
没AgentExecutor的时候,咱们开发多步骤智能体,得手动搞定一堆麻烦事:
- 执行循环:要写代码判断智能体是该继续思考、调用工具,还是返回结果;
- 错误处理:工具调用超时、模型输出格式错、参数传错,都得一个个捕获处理;
- 防死循环:万一智能体陷入"思考-调用工具-思考"的死循环,程序就崩了;
- 日志调试:想知道智能体每一步干了啥,得自己写日志记录,排查问题超难。
总结下来就是三个痛点:
- 代码冗余:重复写循环、错误处理逻辑,越写越乱;
- 维护成本高:复杂任务里,流程稳定性根本没法保证;
- 可观测性差:多步骤执行出问题,不知道错在第一步还是第十步。
而AgentExecutor的出现,就是为了把这些"杂活"全封装,让咱们不用关心"怎么执行",只关心"要做什么任务"。
二、什么是AgentExecutor?智能体的"执行管家"

AgentExecutor是LangChain官方提供的智能体执行引擎,核心作用是封装智能体执行过程中的所有通用逻辑,让开发者聚焦业务。
简单说:你把智能体(Agent)、工具(Tools)交给它,它就能自动完成"思考→行动→观察→再思考"的循环,直到任务结束,还能帮你处理错误、防死循环、记日志。
就像你雇了个厨师(Agent),给了他食材(Tools),AgentExecutor就是餐厅经理------负责安排厨师干活流程、处理食材损坏(错误)、防止厨师一直炒同一道菜(死循环)、记录做菜步骤(日志),你只需要等着吃就行(要结果)。
三、核心功能:AgentExecutor能帮你干哪些事?

AgentExecutor的核心功能全是针对之前的痛点设计的,每一个都很实用:
- 自动执行循环:不用写循环代码,它会根据智能体输出,判断是继续调用工具,还是返回最终结果;
- 智能错误处理:能捕获工具调用异常、模型输出解析错误,支持自动重试或自定义回退逻辑;
- 迭代次数限制:通过参数设置最大执行次数,防止智能体陷入死循环;
- 详细日志追踪:开启后能看到每一步的思考、行动、观察结果,调试超方便,还能集成LangSmith做更专业的追踪;
- 统一输入输出:自动格式化最终结果,不想展示中间步骤就隐藏,想展示也能轻松获取。
四、关键参数:用好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=True和max_iterations是开发时必设的------前者帮你看清楚执行过程,后者帮你避免程序崩掉。
五、使用场景:什么时候该用AgentExecutor?

只要你的智能体需要执行多步骤任务,AgentExecutor就必须用!常见场景有这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个要点
- 调试必开verbose=True:不管什么任务,开发时先开日志,能快速定位"思考错了"还是"工具调用错了";
- 合理设置max_iterations:简单任务设3-5步,复杂任务设8-10步,太多浪费资源,太少完不成任务;
- 自定义错误处理逻辑 :如果
handle_parsing_errors=True满足不了需求,可以写自定义函数,比如"解析错误时提示用户重新提问"; - 生产环境关verbose:日志会占用资源,生产时设为False,只保留必要的错误日志;
- 集成LangSmith做追踪:复杂任务可以集成LangSmith,能看到更详细的执行链路、耗时、错误率,方便优化。
八、总结
今天咱们学会了AgentExecutor这个"执行管家",核心要点总结3句话:
- AgentExecutor帮我们搞定智能体执行的杂活:循环、错误、防死循环、日志;
- 关键参数要记牢:
verbose(调试)、max_iterations(防死循环)、handle_parsing_errors(错误处理); - 只要是多步骤智能体任务,都要用它------开发效率翻倍,稳定性也大大提升。
有了AgentExecutor,咱们后续开发复杂智能体(比如智能助手、数据分析机器人)就轻松多了,不用再纠结执行层面的细节,专心设计任务逻辑和工具就行~
如果本文对你有帮助,欢迎点赞+关注+收藏🌟 ,有任何问题或实战需求,欢迎在评论区留言交流~ 我是工藤学编程,陪你从零到一玩转AI大模型!🚀