从“聊天机器人”到“能干活的人工”就差这一步大家好今天咱们聊一个特别实在的话题怎么让AI真正“动起来”。不知道你有没有这种体验——跟ChatGPT聊了半天它说得头头是道但一到要它帮你干点实事比如查个天气、算个账、查个数据库它就傻眼了。为啥因为大模型本质上就是个“嘴强王者”它懂再多也没法直接触碰外面的世界。工具调用Tool Calling就是来解决这个问题的。它让AI模型能够调用外部函数或API来完成特定任务相当于给AI装上了手和脚。今天我就用LangChain和Dify两个主流框架手把手带大家给AI装上这双手脚。一、先搞懂原理工具调用到底是怎么回事说白了工具调用的核心就三步AI“想”用户提了个需求大模型推理后决定——这事儿我得找外援AI“喊”模型发出一个工具调用请求告诉系统“我要用XX工具参数是XXX”系统“干”执行工具把结果返回给模型模型再整合成最终答案一个关键原则是模型根据输入的相关性决定是否调用工具。如果用户只是随便聊聊天模型不会没事找事去调工具。好原理懂了咱们直接上代码。二、LangChain实战用代码给AI“安胳膊”LangChain是当前生态规模最大的大模型应用开发框架。它提供了tool装饰器和create_tool_calling_agent等工具让你能快速地把业务函数包装成AI可调用的工具。第一步安装依赖pipinstalllangchain langchain-openai python-dotenv第二步定义工具假设我们要让AI能算数、能查天气模拟、能查股票模拟。用tool装饰器一包装普通函数秒变AI工具fromlangchain.toolsimporttoolfromlangchain_openaiimportChatOpenAIfromlangchain.agentsimportcreate_tool_calling_agent,AgentExecutorfromlangchain.promptsimportChatPromptTemplatefromdotenvimportload_dotenvimportrandom load_dotenv()# 工具1加法计算器tooldefadd(a:int,b:int)-int:将两个数字相加。 Args: a: 第一个数字 b: 第二个数字 returnab# 工具2乘法计算器tooldefmultiply(a:int,b:int)-int:将两个数字相乘。 Args: a: 第一个数字 b: 第二个数字 returna*b# 工具3模拟天气查询tooldefget_weather(city:str)-str:查询指定城市的天气情况。 Args: city: 城市名称 weathers[晴天☀️ 28°C,多云☁️ 22°C,小雨️ 18°C,大雪❄️ -5°C]returnf{city}的天气{random.choice(weathers)}# 工具4模拟股票查询tooldefget_stock_price(symbol:str)-str:查询指定股票代码的当前价格。 Args: symbol: 股票代码如 AAPL, TSLA prices{AAPL:188.50,TSLA:245.30,GOOGL:141.80,MSFT:378.90}returnf{symbol}当前价格${prices.get(symbol.upper(),100.00)}看到了吗每个工具函数的文档字符串docstring特别重要——它就是AI理解“这个工具是干嘛的、什么时候该用”的唯一依据。描述写得越清楚AI选工具就越准。第三步创建智能体# 初始化模型选支持工具调用的模型llmChatOpenAI(modelgpt-3.5-turbo,temperature0)# 把所有工具打包tools[add,multiply,get_weather,get_stock_price]# 写提示词模板promptChatPromptTemplate.from_messages([(system,你是一个智能助手可以根据用户需求自主调用合适的工具来完成任务。),(human,{input}),(placeholder,{agent_scratchpad}),])# 创建智能体agentcreate_tool_calling_agent(llm,tools,prompt)# 创建执行器真正跑起来的东西agent_executorAgentExecutor(agentagent,toolstools,verboseTrue)create_tool_calling_agent是LangChain官方推荐的新范式基于函数调用机制效率更高适合生产环境。第四步跑起来看看# 测试1纯计算resultagent_executor.invoke({input:帮我算一下 123 乘以 456 等于多少})print(result[output])# 测试2查天气resultagent_executor.invoke({input:北京今天天气怎么样})print(result[output])# 测试3混合任务resultagent_executor.invoke({input:查一下苹果公司的股票价格然后告诉我如果买100股需要多少钱})print(result[output])运行效果大概是这样开启verboseTrue可以看到完整推理过程 Entering new AgentExecutor chain... Invoking: multiply with {a: 123, b: 456} responded: 123乘以456等于56088。 Invoking: get_weather with {city: 北京} responded: 北京的天气晴天☀️ 28°C Invoking: get_stock_price with {symbol: AAPL} responded: AAPL 当前价格$188.50 计算得出100股需要 $18,850。AI真的自己判断该用哪个工具、怎么组合使用了。这就是工具调用的魅力——不需要你写一堆if/elseAI自己决定走哪条路。三、LangChain进阶多工具协同与踩坑指南1. 工具越多越要写好描述当你给AI挂了十几个工具时工具的名称和描述就成了AI选对工具的关键。描述要具体比如tooldefcalculate_compound_interest(principal:float,rate:float,years:int)-float:计算复利收益。适用于投资回报计算场景。 Args: principal: 本金金额 rate: 年利率如 0.05 表示5% years: 投资年数 returnprincipal*(1rate)**years2. 工具调用失败怎么办真实生产中工具调用失败太常见了——API超时、参数格式不对、网络波动……LangGraph的tool node会捕获异常并返回ToolMessage。你可以在AgentExecutor中配置handle_parsing_errorsTrue来优雅处理。3. 别忘了设置迭代上限agent_executorAgentExecutor(agentagent,toolstools,max_iterations5,# 最多迭代5次防止死循环verboseTrue)四、Dify实战不写代码也能给AI装“手脚”如果说LangChain是“自己造轮子”那Dify就是“直接开4S店提车”。Dify是一个集LLMOps和可视化工作流于一体的AI应用开发平台。它的Agent节点让你无需编码通过可视化界面就能让AI自主调用工具。第一步创建Agent应用登录Dify点击“创建空白应用”选择应用类型为“Agent”起个名字比如“全能小助手”第二步配置模型在“模型供应商”中配置你的API密钥。建议选择支持函数调用的模型如GPT-4、Claude 3.5 Sonnet等。第三步添加工具Dify提供了两种工具类型第一方工具Dify生态内置的开箱即用如谷歌搜索、科学计算等自定义工具支持OpenAPI/Swagger和OpenAI Plugin规范导入配置工具时每个工具需要授权API密钥等凭据描述清楚说明工具的作用和适用场景这点和LangChain一样重要参数必填和可选输入第四步写指令Prompt在“指令”框中定义Agent的角色和目标。比如你是一个全能智能助手可以调用工具来帮助用户完成各种任务。 - 遇到计算问题使用计算器工具 - 需要实时信息使用搜索工具 - 查询数据使用数据库工具 请根据用户需求自主选择合适的工具。第五步设置执行控制最大迭代次数防止无限循环简单任务3-5次复杂任务10-15次记忆窗口控制Agent记住多少历史消息第六步开跑配置完成后直接对话测试。你只需要在对话框中谈及需要调用的工具名字Agent就会自动调用。整个过程零代码从配置到上线可能只需要十分钟。五、LangChain vs Dify我该怎么选维度LangChainDify定位编程框架 / 工具库完整解决方案 / 低代码平台灵活性⭐⭐⭐⭐⭐ 极高想怎么改就怎么改⭐⭐⭐ 中等受限于平台能力上手难度⭐⭐⭐⭐ 需要Python基础和工程能力⭐⭐ 可视化操作门槛极低适用场景复杂定制化业务、深度集成快速原型验证、企业内部工具工具生态极其丰富社区最活跃插件市场持续扩展中一句话建议你是开发者需要深度定制、和现有系统紧密集成 → 选LangChain你是产品/业务人员想快速验证想法、低门槛上线 → 选Dify两者也不是非此即彼——很多团队用Dify做快速原型验证通过后用LangChain做工程化落地。六、写在最后工具调用这件事本质上是让AI从“只会说”变成“既能说又能干”。LangChain给了你一把手术刀精细、强大但需要你自己动手Dify给了你一台全自动机器人省心、快速但定制空间有限。不管选哪条路核心就一句话把业务能力包装成工具让AI自己决定什么时候用、怎么用。一旦打通了这一步AI就不再是“聊天玩具”而是真正能帮你干活的“数字员工”。如果你也在折腾AI工具调用欢迎在评论区交流踩坑经验。下期见本文代码基于 LangChain v0.3.x、Dify v1.16.0 测试通过。
给AI装上“手和脚”:LangChain与Dify实战,让智能体自主调用工具完成复杂任务
从“聊天机器人”到“能干活的人工”就差这一步大家好今天咱们聊一个特别实在的话题怎么让AI真正“动起来”。不知道你有没有这种体验——跟ChatGPT聊了半天它说得头头是道但一到要它帮你干点实事比如查个天气、算个账、查个数据库它就傻眼了。为啥因为大模型本质上就是个“嘴强王者”它懂再多也没法直接触碰外面的世界。工具调用Tool Calling就是来解决这个问题的。它让AI模型能够调用外部函数或API来完成特定任务相当于给AI装上了手和脚。今天我就用LangChain和Dify两个主流框架手把手带大家给AI装上这双手脚。一、先搞懂原理工具调用到底是怎么回事说白了工具调用的核心就三步AI“想”用户提了个需求大模型推理后决定——这事儿我得找外援AI“喊”模型发出一个工具调用请求告诉系统“我要用XX工具参数是XXX”系统“干”执行工具把结果返回给模型模型再整合成最终答案一个关键原则是模型根据输入的相关性决定是否调用工具。如果用户只是随便聊聊天模型不会没事找事去调工具。好原理懂了咱们直接上代码。二、LangChain实战用代码给AI“安胳膊”LangChain是当前生态规模最大的大模型应用开发框架。它提供了tool装饰器和create_tool_calling_agent等工具让你能快速地把业务函数包装成AI可调用的工具。第一步安装依赖pipinstalllangchain langchain-openai python-dotenv第二步定义工具假设我们要让AI能算数、能查天气模拟、能查股票模拟。用tool装饰器一包装普通函数秒变AI工具fromlangchain.toolsimporttoolfromlangchain_openaiimportChatOpenAIfromlangchain.agentsimportcreate_tool_calling_agent,AgentExecutorfromlangchain.promptsimportChatPromptTemplatefromdotenvimportload_dotenvimportrandom load_dotenv()# 工具1加法计算器tooldefadd(a:int,b:int)-int:将两个数字相加。 Args: a: 第一个数字 b: 第二个数字 returnab# 工具2乘法计算器tooldefmultiply(a:int,b:int)-int:将两个数字相乘。 Args: a: 第一个数字 b: 第二个数字 returna*b# 工具3模拟天气查询tooldefget_weather(city:str)-str:查询指定城市的天气情况。 Args: city: 城市名称 weathers[晴天☀️ 28°C,多云☁️ 22°C,小雨️ 18°C,大雪❄️ -5°C]returnf{city}的天气{random.choice(weathers)}# 工具4模拟股票查询tooldefget_stock_price(symbol:str)-str:查询指定股票代码的当前价格。 Args: symbol: 股票代码如 AAPL, TSLA prices{AAPL:188.50,TSLA:245.30,GOOGL:141.80,MSFT:378.90}returnf{symbol}当前价格${prices.get(symbol.upper(),100.00)}看到了吗每个工具函数的文档字符串docstring特别重要——它就是AI理解“这个工具是干嘛的、什么时候该用”的唯一依据。描述写得越清楚AI选工具就越准。第三步创建智能体# 初始化模型选支持工具调用的模型llmChatOpenAI(modelgpt-3.5-turbo,temperature0)# 把所有工具打包tools[add,multiply,get_weather,get_stock_price]# 写提示词模板promptChatPromptTemplate.from_messages([(system,你是一个智能助手可以根据用户需求自主调用合适的工具来完成任务。),(human,{input}),(placeholder,{agent_scratchpad}),])# 创建智能体agentcreate_tool_calling_agent(llm,tools,prompt)# 创建执行器真正跑起来的东西agent_executorAgentExecutor(agentagent,toolstools,verboseTrue)create_tool_calling_agent是LangChain官方推荐的新范式基于函数调用机制效率更高适合生产环境。第四步跑起来看看# 测试1纯计算resultagent_executor.invoke({input:帮我算一下 123 乘以 456 等于多少})print(result[output])# 测试2查天气resultagent_executor.invoke({input:北京今天天气怎么样})print(result[output])# 测试3混合任务resultagent_executor.invoke({input:查一下苹果公司的股票价格然后告诉我如果买100股需要多少钱})print(result[output])运行效果大概是这样开启verboseTrue可以看到完整推理过程 Entering new AgentExecutor chain... Invoking: multiply with {a: 123, b: 456} responded: 123乘以456等于56088。 Invoking: get_weather with {city: 北京} responded: 北京的天气晴天☀️ 28°C Invoking: get_stock_price with {symbol: AAPL} responded: AAPL 当前价格$188.50 计算得出100股需要 $18,850。AI真的自己判断该用哪个工具、怎么组合使用了。这就是工具调用的魅力——不需要你写一堆if/elseAI自己决定走哪条路。三、LangChain进阶多工具协同与踩坑指南1. 工具越多越要写好描述当你给AI挂了十几个工具时工具的名称和描述就成了AI选对工具的关键。描述要具体比如tooldefcalculate_compound_interest(principal:float,rate:float,years:int)-float:计算复利收益。适用于投资回报计算场景。 Args: principal: 本金金额 rate: 年利率如 0.05 表示5% years: 投资年数 returnprincipal*(1rate)**years2. 工具调用失败怎么办真实生产中工具调用失败太常见了——API超时、参数格式不对、网络波动……LangGraph的tool node会捕获异常并返回ToolMessage。你可以在AgentExecutor中配置handle_parsing_errorsTrue来优雅处理。3. 别忘了设置迭代上限agent_executorAgentExecutor(agentagent,toolstools,max_iterations5,# 最多迭代5次防止死循环verboseTrue)四、Dify实战不写代码也能给AI装“手脚”如果说LangChain是“自己造轮子”那Dify就是“直接开4S店提车”。Dify是一个集LLMOps和可视化工作流于一体的AI应用开发平台。它的Agent节点让你无需编码通过可视化界面就能让AI自主调用工具。第一步创建Agent应用登录Dify点击“创建空白应用”选择应用类型为“Agent”起个名字比如“全能小助手”第二步配置模型在“模型供应商”中配置你的API密钥。建议选择支持函数调用的模型如GPT-4、Claude 3.5 Sonnet等。第三步添加工具Dify提供了两种工具类型第一方工具Dify生态内置的开箱即用如谷歌搜索、科学计算等自定义工具支持OpenAPI/Swagger和OpenAI Plugin规范导入配置工具时每个工具需要授权API密钥等凭据描述清楚说明工具的作用和适用场景这点和LangChain一样重要参数必填和可选输入第四步写指令Prompt在“指令”框中定义Agent的角色和目标。比如你是一个全能智能助手可以调用工具来帮助用户完成各种任务。 - 遇到计算问题使用计算器工具 - 需要实时信息使用搜索工具 - 查询数据使用数据库工具 请根据用户需求自主选择合适的工具。第五步设置执行控制最大迭代次数防止无限循环简单任务3-5次复杂任务10-15次记忆窗口控制Agent记住多少历史消息第六步开跑配置完成后直接对话测试。你只需要在对话框中谈及需要调用的工具名字Agent就会自动调用。整个过程零代码从配置到上线可能只需要十分钟。五、LangChain vs Dify我该怎么选维度LangChainDify定位编程框架 / 工具库完整解决方案 / 低代码平台灵活性⭐⭐⭐⭐⭐ 极高想怎么改就怎么改⭐⭐⭐ 中等受限于平台能力上手难度⭐⭐⭐⭐ 需要Python基础和工程能力⭐⭐ 可视化操作门槛极低适用场景复杂定制化业务、深度集成快速原型验证、企业内部工具工具生态极其丰富社区最活跃插件市场持续扩展中一句话建议你是开发者需要深度定制、和现有系统紧密集成 → 选LangChain你是产品/业务人员想快速验证想法、低门槛上线 → 选Dify两者也不是非此即彼——很多团队用Dify做快速原型验证通过后用LangChain做工程化落地。六、写在最后工具调用这件事本质上是让AI从“只会说”变成“既能说又能干”。LangChain给了你一把手术刀精细、强大但需要你自己动手Dify给了你一台全自动机器人省心、快速但定制空间有限。不管选哪条路核心就一句话把业务能力包装成工具让AI自己决定什么时候用、怎么用。一旦打通了这一步AI就不再是“聊天玩具”而是真正能帮你干活的“数字员工”。如果你也在折腾AI工具调用欢迎在评论区交流踩坑经验。下期见本文代码基于 LangChain v0.3.x、Dify v1.16.0 测试通过。