工具的调用方式与整体执行流程分析
Tools概述1.1 工具的重要性要构建更强大的AI工程应用只有生成文本这样的“ 纸上谈兵 ”能力自然是不够的。工具是赋予大语言模型 与外部世界交互能力 的关键组件从而能让智能体执行搜索、计算、数据库查询、邮件发送或调用第三方API等进而构建功能强大的AI应用。借助工具大模型才能从“ 认识世界 ”走向“ 改变世界 ”。举例工具是构建智能体的核心要素之一大模型与智能体的本质区别本质区别是否能调用工具大模型能分析出我们的需求中需要用到工具但是真正工具调用还是做不到智能体分析需要用到工具同时还能去调用工具1.2 工具调用的方式在LangChain中工具Tools实际上是指明确定义了输入和输出的可调用函数。因此工具调用Tool Calling也被称为函数调用Function Calling。具体有两种调用方式方式1直接调用方式2绑定到模型主流这种方式让AI来调用开发中使用1.3 工具调用的整体流程1.4 从Message流转看工具的调用前提模型的初始化from langchain.chat_modelsimportinit_chat_model from dotenvimportload_dotenvimportos load_dotenv(overrideTrue)CLOSEAI_API_KEYos.getenv(CLOSEAI_API_KEY)CLOSEAI_BASE_URLos.getenv(CLOSEAI_BASE_URL)modelinit_chat_model(modelgpt-5.4-mini,model_provideropenai, api_keyCLOSEAI_API_KEY,base_urlCLOSEAI_BASE_URL,)print(model.invoke(介绍你自己).content)使用tool修饰from langchain.messagesimportHumanMessage,ToolMessage from richimportprint as rprint tool def get_weather(city:str): 获取天气的工具returnf{city}天气晴朗# 将模型和工具绑定model_with_toolsmodel.bind_tools([get_weather])# 声明一个消息列表messages[HumanMessage(今天北京天气如何)# HumanMessage( 9 * 9 ?)]# 模型生成调用工具请求responsemodel_with_tools.invoke(messages)# 添加AIMessagemessages.append(response)# rprint(response)# rprint(response.tool_calls)tool_callsresponse.tool_calls print(tool_calls)fortool_callintool_calls:iftool_call[name]get_weather:# 大模型和Agent的主要区别在于大模型不会主动的调用工具所以这时候我们需要主动让工具调用# 返回的是ToolMessage类型消息添加到消息列表中tool_responseget_weather.invoke(tool_call)print(type(tool_response))messages.append(tool_response)print(-------------)# rprint(messages)formsginmessages: msg.pretty_print()print( messages )final_responsemodel_with_tools.invoke(messages)print(ffinal_response:\n{final_response})说明被tool修饰的函数可以调用invoke接收模型返回的入参信息执行函数并返回ToolMessage实例我们不再需要手动拼接ToolMessage对应图示工具调用流程总结如何真正要大模型根据工具调用结果进行回复完整的调用流程包括如下四个步骤步骤1模型绑定工具通过model.bind_tools([…])绑定一个或者多个工具步骤2模型生成工具调用请求用户输入问题调用模型比如invoke())。如果需要调用工具模型返回包含工具调用信息如工具名称和参数的AIMessage步骤3开发者手动执行工具用户从响应中提取工具调用信息并手动调用对应的工具比如工具.invoke())步骤4将工具执行结果ToolMessage传递给模型生成最终结果将之前用户提问内容和手动执行工具结果ToolMessage返回模型模型最终生成回复特别注意大模型调用工具是单次推理需要开发者手动执行工具并管理循环适合简单、确定的任务