
AgentExecutor 是 LangChain 框架中「智能体系统agent」的核心子组件依赖 LangChain 的基础能力运行。AgentExecutor 是 LangChain 实现 “大模型自主决策 工具调用” 的核心载体是其区别于其他纯对话框架的关键特色。LangChain 靠Chain实现 “大模型聊天 / 问答”靠AgentExecutor实现 “大模型自主做事”。Agent智能体负责「决策」思考 “该调用哪个工具、下一步做什么”AgentExecutor负责「执行」驱动决策落地完成 “思考→行动→反馈→循环” 的全流程。AgentExecutor核心功能功能具体作用驱动思考 - 行动循环循环执行「Agent 思考 → 调用工具 → 反馈结果 → Agent 再思考」直到任务完成控制执行边界通过max_iterations限制最大循环次数防止智能体陷入无限循环处理异常容错捕获工具调用失败、Agent 输出格式错误等异常支持重试 / 强制终止避免崩溃维护执行上下文记录每一步的「思考Thought、行动Action、结果Observation」支持调试追溯标准化输出结果将 Agent 的最终决策整理为统一格式如字典方便对接业务系统适用场景AgentExecutor 仅用于「需要动态决策 工具调用」的场景典型案例多步骤推理任务如 “查天气→算出行时间→推荐路线”依赖外部工具的任务如调用数据库、搜索引擎、API结果不确定的任务需要根据中间结果调整下一步行动。注意纯固定流程的问答如 “Python 怎么定义函数”用 LLMChain 即可无需 AgentExecutor。代码示例# 安装依赖若未安装 # pip install langchain langchain-openai python-dotenv import os from dotenv import load_dotenv # 推荐用dotenv管理API Key更安全 # 1. 导入核心模块 from langchain_openai import ChatOpenAI from langchain.agents import create_openai_functions_agent, AgentExecutor from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder from langchain_core.tools import Tool from langchain.memory import ConversationBufferMemory # 2. 加载环境变量替代硬编码API Key load_dotenv() # 读取.env文件中的OPENAI_API_KEY llm ChatOpenAI( modelgpt-3.5-turbo, temperature0.3, # 轻微随机性让回答更自然 api_keyos.getenv(OPENAI_API_KEY) # 从环境变量读取 ) # 3. 定义核心工具模拟真实业务工具可替换为真实API # 工具1查询指定城市指定日期的天气 def get_weather(city: str, date: str) - str: 模拟天气查询工具实际开发可对接高德/百度天气API # 模拟天气数据 weather_data { 北京-2026-03-18: 晴10-22℃微风, 上海-2026-03-18: 多云12-20℃东风3级, 广州-2026-03-18: 小雨18-25℃南风2级 } key f{city}-{date} return weather_data.get(key, f未查询到{city}{date}的天气信息) # 工具2根据城市天气推荐景点 def recommend_scenic_spots(city: str, weather: str) - str: 模拟景点推荐工具实际开发可对接旅游API if 晴 in weather: return f{city}晴天推荐景点故宫、颐和园、天安门广场适合户外游览 elif 雨 in weather: return f{city}雨天推荐景点国家博物馆、中国科技馆、北京环球影城室内/有遮蔽 else: return f{city}多云推荐景点什刹海、南锣鼓巷、798艺术区兼顾户外与室内 # 封装为LangChain Tool对象Tool 的description必须清晰决定 Agent 是否调用该工具 tools [ # 天气查询工具 Tool( nameWeatherQuery, funcget_weather, description查询指定城市指定日期的天气信息参数为city城市名、date日期格式YYYY-MM-DD ), # 景点推荐工具 Tool( nameScenicSpotRecommendation, funcrecommend_scenic_spots, description根据城市和天气推荐适合的景点参数为city城市名、weather天气描述 ) ] # 4. 定义Agent提示词适配中文场景明确思考规则 prompt ChatPromptTemplate.from_messages([ (system, 你是一个智能旅游助手需要按以下规则完成用户需求 1. 先调用WeatherQuery工具查询目标城市指定日期的天气 2. 再调用ScenicSpotRecommendation工具根据天气结果推荐景点 3. 最后整合两个工具的结果用自然的中文给出旅行建议 4. 若用户未指定日期默认查询次日2026-03-18的天气。 ), (user, {input}), MessagesPlaceholder(variable_namechat_history), # 对话记忆 MessagesPlaceholder(variable_nameagent_scratchpad) # Agent思考过程必须 ]) # 5. 初始化记忆支持多轮对话 memory ConversationBufferMemory( memory_keychat_history, return_messagesTrue, input_keyinput # 匹配用户输入的变量名 ) # 6. 创建Agent决策逻辑 agent create_openai_functions_agent( llmllm, toolstools, promptprompt ) # 7. 创建AgentExecutor核心执行引擎 agent_executor AgentExecutor( agentagent, toolstools, memorymemory, # 绑定记忆 verboseTrue, # 打印执行过程便于调试 max_iterations8, # 多工具调用适当增加最大循环次数 handle_parsing_errors返回到用户告知解析错误请简化问题重试, # 自定义错误提示 return_intermediate_stepsTrue # 返回中间步骤便于追溯工具调用记录 ) # 8. 运行示例多轮对话 if __name__ __main__: # 第一轮用户发起旅行咨询 print( 第一轮对话 ) result1 agent_executor.invoke({input: 我明天去北京玩推荐几个适合的景点}) print(最终回答, result1[output], \n) # 第二轮用户追问测试记忆 print( 第二轮对话 ) result2 agent_executor.invoke({input: 那如果下雨的话有什么替代方案吗}) print(最终回答, result2[output])运行效果 第一轮对话 Entering new AgentExecutor chain... Invoking: WeatherQuery with {city:北京,date:2026-03-18} 晴10-22℃微风 Invoking: ScenicSpotRecommendation with {city:北京,weather:晴10-22℃微风} 北京晴天推荐景点故宫、颐和园、天安门广场适合户外游览 Finished chain. 最终回答 你明天去北京游玩的天气是晴10-22℃微风推荐你去故宫、颐和园、天安门广场这些适合户外游览的景点 第二轮对话 Entering new AgentExecutor chain... Invoking: ScenicSpotRecommendation with {city:北京,weather:小雨} 北京雨天推荐景点国家博物馆、中国科技馆、北京环球影城室内/有遮蔽 Finished chain. 最终回答 如果北京下雨的话推荐你去国家博物馆、中国科技馆、北京环球影城这些以室内或有遮蔽为主的景点避免淋雨影响游玩体验