第05章:Tools

1、Tools概述

1.1 工具的重要性
要构建更强大的AI工程应用,只有生成文本这样的“ 纸上谈兵”能力自然是不够的。工具是赋予大语言模型与外部世界交互能力的关键组件,从而能让智能体执行搜索、计算、数据库查询、邮件发送或调用第三方API等,进而构建功能强大的AI应用。借助工具,大模型才能从“ 认识世界”走向“ 改变世界”。
举例:

图片[1]-第05章:Tools-大赛人网

工具是构建智能体的核心要素之一!

图片[2]-第05章:Tools-大赛人网

1.2 工具调用的方式
在LangChain中,工具(Tools)实际上是指明确定义了输入和输出的可调用函数。因此, 工具调用(Tool Calling) 也被称为函数调用(Function Calling) 。
具体有两种调用方式:
方式1:直接调用
这种方式,适合测试时使用。

from langchain_core.tools import tool
@tool
def get_weather(city: str) -> str:
"""
获取指定城市的天气信息
参数:
city: 城市名称,如"北京"、"上海"
返回:
天气信息字符串
"""
# 你的实现
return city + "晴天,温度 15°C"
# 使用 .invoke() 方法
result = get_weather.invoke({"city": "北京"})
print(result)

北京晴天,温度 15°C

方式2:绑定到模型(主流)
这种方式,让AI来调用,开发中使用。

from langchain.chat_models import init_chat_model
from dotenv import load_dotenv
import os
# 从.env文件中加载环境变量
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
)
from langchain_core.tools import tool
# 定义工具
@tool
def get_weather(city: str) -> str:
"""获取指定城市的天气"""
# 你的实现
return "晴天,温度 15°C"
# 绑定工具
model_with_tools = model.bind_tools([get_weather])
# AI 可以决定是否调用工具
response = model_with_tools.invoke("北京天气如何?")
# response = model_with_tools.invoke("2 + 3 = ?")
# 检查 AI 是否要调用工具
if response.tool_calls:
  print("AI 想调用工具:", response.tool_calls)
else:
  print("AI 直接回答:", response.content)

AI 想调用工具: [{‘name’: ‘get_weather’, ‘args’: {‘city’: ‘北京’}, ‘id’:
‘call_fR3LE8Wjqh9lnDosQ61Y892E’, ‘type’: ‘tool_call’}]

1.3 工具调用的整体流程

大模型能根据对话上下文决定何时调用工具以及传递哪些参数。
经典流程如下:

图片[3]-第05章:Tools-大赛人网

我们现在编写的LangChain应用对应上图中的AI助手或应用。

1.4 从Message流转看工具的调用
前提:模型的初始化

from langchain.chat_models import init_chat_model
from dotenv import load_dotenv
import os
# 从.env文件中加载环境变量
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
)

参考1:不使用@tool修饰

图片[4]-第05章:Tools-大赛人网
图片[5]-第05章:Tools-大赛人网

参考2:使用@tool修饰

图片[6]-第05章:Tools-大赛人网

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

<class 'langchain_core.messages.tool.ToolMessage'>
=====================> messages <=====================
================================ Human Message
=================================
今天北京天气如何
1
2
3
4
5
对应图示(以参考1为例):
工具调用流程总结:
所以如果真正要大模型根据工具调用结果进行回复,完整的调用流程包括如下四个步骤:
================================== Ai Message
==================================
好的,我来帮你查一下今天北京的天气情况。
Tool Calls:
get_weather (call_00_f65kV4JKjBPK0HhURzO99449)
Call ID: call_00_f65kV4JKjBPK0HhURzO99449
Args:
city: 北京
================================= Tool Message
=================================
Name: get_weather
北京天气晴朗~
=====================> messages <=====================
final_response:
content='今天北京天气**晴朗** ☀,是个好天气!如果你要出门的话,可以放心出行哦~'
additional_kwargs={'refusal': None} response_metadata={'token_usage':
{'completion_tokens': 24, 'prompt_tokens': 343, 'total_tokens': 367,
'completion_tokens_details': None, 'prompt_tokens_details':
{'audio_tokens': None, 'cached_tokens': 256},
'prompt_cache_hit_tokens': 256, 'prompt_cache_miss_tokens': 87},
'model_provider': 'deepseek', 'model_name': 'deepseek-v4-flash',
'system_fingerprint': 'fp_8b330d02d0_prod0820_fp8_kvcache_20260402',
'id': 'fabbebd6-498e-40f0-b1f6-e9fb43a36297', 'finish_reason': 'stop',
'logprobs': None} id='lc_run--019e5a90-f0ca-7d43-a4e5-3d34379e8208-0'
tool_calls=[] invalid_tool_calls=[] usage_metadata={'input_tokens':
343, 'output_tokens': 24, 'total_tokens': 367, 'input_token_details':
{'cache_read': 256}, 'output_token_details': {}}
图片[7]-第05章:Tools-大赛人网

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

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

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

© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享
评论 抢沙发
头像-大赛人网
欢迎您留下宝贵的见解!
提交
头像-大赛人网

昵称

取消
昵称

    请登录后查看评论内容