从‘单打独斗’到‘团队协作’用LangChain AgentExecutor构建你的第一个多工具AI助手想象一下你正在准备一份关于特斯拉最新财报的分析报告。传统的工作流程可能是先打开搜索引擎查找财报数据然后手动计算关键指标最后用文字处理软件撰写总结。这一系列操作不仅耗时还需要在不同工具间频繁切换。而今天我们将用LangChain的AgentExecutor构建一个能自动完成这些复合任务的AI助手——它像一位经验丰富的助理能自主判断何时该查资料、何时该算数据、何时该写总结。1. 理解智能体工作流的核心价值在LangChain生态中智能体Agent代表了一种能自主决策和行动的人工智能实体。与单一功能的链式调用不同智能体的核心优势在于动态工具选择根据问题类型自动匹配合适的工具迭代式问题解决通过思考-行动-观察循环处理复杂任务上下文感知保留完整的执行历史作为决策依据典型应用场景对比场景类型传统方法痛点智能体解决方案跨工具任务需要人工切换工具自动选择并组合多个工具多步骤问题固定流程难以适应变化动态调整执行路径模糊需求需要明确拆解需求能主动澄清和探索解决方案# 智能体工作流的基本模式图示伪代码 def agent_workflow(input): while not task_complete: thought analyze(input history) tool select_tool(thought) result execute(tool) history.append((tool, result)) return final_answer2. 构建你的第一个多工具助手让我们从实战出发创建一个能处理查财报-算数据-写总结复合任务的AI助手。这个案例将展示如何让AI像人类助理一样协调使用不同工具。2.1 准备工具集优秀的智能体需要专业的工具箱。我们首先配置三个核心工具网络搜索工具获取最新财报数据计算工具处理财务指标计算摘要工具生成简洁的报告总结from langchain_community.tools import DuckDuckGoSearchRun from langchain.tools import Tool from langchain.chains.summarize import load_summarize_chain # 搜索工具配置 search DuckDuckGoSearchRun(nameweb_search) # 自定义计算工具 def financial_calculator(query): # 这里可以接入专业财务计算库 return eval(query) # 简单示例实际项目请使用安全计算方式 calc_tool Tool( namefinancial_calculator, funcfinancial_calculator, description用于计算财务指标输入应为数学表达式 ) # 摘要工具配置 llm ChatOpenAI(temperature0, modelgpt-3.5-turbo) summarize_chain load_summarize_chain(llm, chain_typestuff)2.2 配置智能体执行器AgentExecutor是协调整个工作流的大脑需要特别注意三个关键参数max_iterations防止无限循环建议5-10次handle_parsing_errors处理LLM输出异常return_intermediate_steps调试时查看详细过程from langchain.agents import AgentExecutor, create_react_agent tools [search, calc_tool, summarize_chain] prompt ChatPromptTemplate.from_messages([...]) # 完整的提示模板 agent create_react_agent(llmllm, toolstools, promptprompt) executor AgentExecutor( agentagent, toolstools, verboseTrue, max_iterations7, handle_parsing_errorsTrue )3. 实战处理复合型财务查询现在让我们测试这个助手处理真实任务的能力。以下是一个典型的工作场景获取特斯拉2023年Q4财报计算营收同比增长率并用中文总结关键点task 请执行以下复合任务 1. 搜索特斯拉2023年第四季度财报关键数据 2. 计算营收同比增长率假设2022年Q4营收为100亿美元 3. 用中文总结财报亮点和主要风险 result executor.invoke({input: task}) print(result[output])执行过程分解智能体首先识别出需要搜索最新财报数据获取数据后自动调用计算工具处理增长率最后选择摘要工具生成中文总结整个过程在单个工作流中自动完成4. 高级技巧与故障排除当智能体表现不如预期时以下调试方法特别有用4.1 监控中间步骤设置return_intermediate_stepsTrue可以查看智能体的思考过程executor AgentExecutor( # ...其他参数... return_intermediate_stepsTrue ) result executor.invoke({input: task}) for i, (action, observation) in enumerate(result[intermediate_steps]): print(fStep {i1}: Used {action.tool} with input {action.tool_input}) print(fObservation: {observation[:200]}...\n)4.2 常见问题解决方案问题1智能体陷入循环检查工具描述是否清晰降低max_iterations值如从10降到5添加自定义停止条件def stop_when_repeat(steps): last_actions [a.tool for a, _ in steps[-3:]] return len(set(last_actions)) 1 # 如果连续三次使用相同工具则停止 executor AgentExecutor( # ...其他参数... custom_stopping_conditionstop_when_repeat )问题2工具选择错误改进工具的描述字段在提示模板中添加工具选择示例使用few-shot learning提供示范calc_tool Tool( # ...其他参数... description用于精确的财务计算。输入应为数学表达式如 - (最新营收 - 上年同期营收)/上年同期营收 * 100 - 毛利/营收 * 100 不要用于文本处理或逻辑判断 )在实际项目中我发现最有效的优化策略是渐进式测试先验证单个工具的工作情况再测试简单组合最后处理复杂任务。这种分层方法能快速定位问题源头。
从‘单打独斗’到‘团队协作’:用LangChain AgentExecutor构建你的第一个多工具AI助手
从‘单打独斗’到‘团队协作’用LangChain AgentExecutor构建你的第一个多工具AI助手想象一下你正在准备一份关于特斯拉最新财报的分析报告。传统的工作流程可能是先打开搜索引擎查找财报数据然后手动计算关键指标最后用文字处理软件撰写总结。这一系列操作不仅耗时还需要在不同工具间频繁切换。而今天我们将用LangChain的AgentExecutor构建一个能自动完成这些复合任务的AI助手——它像一位经验丰富的助理能自主判断何时该查资料、何时该算数据、何时该写总结。1. 理解智能体工作流的核心价值在LangChain生态中智能体Agent代表了一种能自主决策和行动的人工智能实体。与单一功能的链式调用不同智能体的核心优势在于动态工具选择根据问题类型自动匹配合适的工具迭代式问题解决通过思考-行动-观察循环处理复杂任务上下文感知保留完整的执行历史作为决策依据典型应用场景对比场景类型传统方法痛点智能体解决方案跨工具任务需要人工切换工具自动选择并组合多个工具多步骤问题固定流程难以适应变化动态调整执行路径模糊需求需要明确拆解需求能主动澄清和探索解决方案# 智能体工作流的基本模式图示伪代码 def agent_workflow(input): while not task_complete: thought analyze(input history) tool select_tool(thought) result execute(tool) history.append((tool, result)) return final_answer2. 构建你的第一个多工具助手让我们从实战出发创建一个能处理查财报-算数据-写总结复合任务的AI助手。这个案例将展示如何让AI像人类助理一样协调使用不同工具。2.1 准备工具集优秀的智能体需要专业的工具箱。我们首先配置三个核心工具网络搜索工具获取最新财报数据计算工具处理财务指标计算摘要工具生成简洁的报告总结from langchain_community.tools import DuckDuckGoSearchRun from langchain.tools import Tool from langchain.chains.summarize import load_summarize_chain # 搜索工具配置 search DuckDuckGoSearchRun(nameweb_search) # 自定义计算工具 def financial_calculator(query): # 这里可以接入专业财务计算库 return eval(query) # 简单示例实际项目请使用安全计算方式 calc_tool Tool( namefinancial_calculator, funcfinancial_calculator, description用于计算财务指标输入应为数学表达式 ) # 摘要工具配置 llm ChatOpenAI(temperature0, modelgpt-3.5-turbo) summarize_chain load_summarize_chain(llm, chain_typestuff)2.2 配置智能体执行器AgentExecutor是协调整个工作流的大脑需要特别注意三个关键参数max_iterations防止无限循环建议5-10次handle_parsing_errors处理LLM输出异常return_intermediate_steps调试时查看详细过程from langchain.agents import AgentExecutor, create_react_agent tools [search, calc_tool, summarize_chain] prompt ChatPromptTemplate.from_messages([...]) # 完整的提示模板 agent create_react_agent(llmllm, toolstools, promptprompt) executor AgentExecutor( agentagent, toolstools, verboseTrue, max_iterations7, handle_parsing_errorsTrue )3. 实战处理复合型财务查询现在让我们测试这个助手处理真实任务的能力。以下是一个典型的工作场景获取特斯拉2023年Q4财报计算营收同比增长率并用中文总结关键点task 请执行以下复合任务 1. 搜索特斯拉2023年第四季度财报关键数据 2. 计算营收同比增长率假设2022年Q4营收为100亿美元 3. 用中文总结财报亮点和主要风险 result executor.invoke({input: task}) print(result[output])执行过程分解智能体首先识别出需要搜索最新财报数据获取数据后自动调用计算工具处理增长率最后选择摘要工具生成中文总结整个过程在单个工作流中自动完成4. 高级技巧与故障排除当智能体表现不如预期时以下调试方法特别有用4.1 监控中间步骤设置return_intermediate_stepsTrue可以查看智能体的思考过程executor AgentExecutor( # ...其他参数... return_intermediate_stepsTrue ) result executor.invoke({input: task}) for i, (action, observation) in enumerate(result[intermediate_steps]): print(fStep {i1}: Used {action.tool} with input {action.tool_input}) print(fObservation: {observation[:200]}...\n)4.2 常见问题解决方案问题1智能体陷入循环检查工具描述是否清晰降低max_iterations值如从10降到5添加自定义停止条件def stop_when_repeat(steps): last_actions [a.tool for a, _ in steps[-3:]] return len(set(last_actions)) 1 # 如果连续三次使用相同工具则停止 executor AgentExecutor( # ...其他参数... custom_stopping_conditionstop_when_repeat )问题2工具选择错误改进工具的描述字段在提示模板中添加工具选择示例使用few-shot learning提供示范calc_tool Tool( # ...其他参数... description用于精确的财务计算。输入应为数学表达式如 - (最新营收 - 上年同期营收)/上年同期营收 * 100 - 毛利/营收 * 100 不要用于文本处理或逻辑判断 )在实际项目中我发现最有效的优化策略是渐进式测试先验证单个工具的工作情况再测试简单组合最后处理复杂任务。这种分层方法能快速定位问题源头。