ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

工具的调用方式与整体执行流程分析

工具的调用方式与整体执行流程分析

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(override=True)CLOSEAI_API_KEY=os.getenv("CLOSEAI_API_KEY")CLOSEAI_BASE_URL=os.getenv("CLOSEAI_BASE_URL")model=init_chat_model(model="gpt-5.4-mini",model_provider="openai", api_key=CLOSEAI_API_KEY,base_url=CLOSEAI_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_tools=model.bind_tools([get_weather])# 声明一个消息列表messages=[HumanMessage("今天北京天气如何")# HumanMessage(" 9 * 9 = ?")]# 模型生成调用工具请求response=model_with_tools.invoke(messages)# 添加AIMessagemessages.append(response)# rprint(response)# rprint(response.tool_calls)tool_calls=response.tool_calls print(tool_calls)fortool_callintool_calls:iftool_call["name"]=="get_weather":# 大模型和Agent的主要区别在于:大模型不会主动的调用工具,所以这时候我们需要主动让工具调用# 返回的是ToolMessage类型消息,添加到消息列表中tool_response=get_weather.invoke(tool_call)print(type(tool_response))messages.append(tool_response)print("-------------")# rprint(messages)formsginmessages: msg.pretty_print()print("=====================> messages <=====================")final_response=model_with_tools.invoke(messages)print(f"final_response:\n{final_response}")

说明:被@tool修饰的函数可以调用invoke接收模型返回的入参信息执行函数,并返回ToolMessage实例,我们不再需要手动拼接ToolMessage

对应图示

工具调用流程总结

如何真正要大模型根据工具调用结果进行回复,完整的调用流程包括如下四个步骤:

步骤1:模型绑定工具:通过model.bind_tools([…])绑定一个或者多个工具
步骤2:模型生成工具调用请求:用户输入问题,调用模型(比如invoke())。如果需要调用工具,模型返回包含工具调用信息(如工具名称和参数)的AIMessage
步骤3:开发者手动执行工具:用户从响应中提取工具调用信息并手动调用对应的工具(比如工具.invoke())
步骤4:将工具执行结果ToolMessage传递给模型生成最终结果:将之前用户提问内容和手动执行工具结果ToolMessage返回模型,模型最终生成回复

特别注意:
大模型调用工具是单次推理,需要开发者手动执行工具并管理循环,适合简单、确定的任务

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进