什么是工具函数调用
大语言模型(LLM)本质上是基于概率的文本生成系统,其知识边界受限于训练数据的截止时间。当用户询问'今天北京天气如何'或'查询订单状态'这类需要实时数据的问题时,模型无法直接给出准确答案。工具函数调用(Tool Use / Function Calling)正是为突破这一限制而设计的能力,它在 LLM 与外部系统之间建立了一条可靠的交互通道。
从技术实现上看,Function Calling 并非让模型直接执行代码,而是让模型在理解用户意图后,输出一段结构化的 JSON 数据,其中包含需要调用的函数名称及对应的参数。经过微调的 LLM 能够准确判断当前对话是否需要借助外部工具,并严格按照预定义的函数签名(function schema)生成符合格式要求的调用请求。整个过程中,模型扮演的是'决策者'角色,而实际的函数执行则由外部程序完成。
目前,主流的 LLM 服务商均已支持 Function Calling 能力,包括 OpenAI、Anthropic(Claude)、Google(Gemini)等。尽管各平台在 API 设计和参数格式上存在差异,但核心思路一致:通过预定义工具描述,让模型具备调用外部能力的'接口意识'。
为什么需要工具函数调用
LLM 无法感知训练截止日期之后发生的事件,也无法直接访问私有数据库或调用第三方服务。在构建 LLM 驱动的聊天机器人或智能代理(Agent)时,这一局限尤为突出。函数调用机制主要解决两类问题:
- 数据获取:获取模型自身不具备的实时信息,例如当前天气、数据库记录、知识库文档等。
- 执行行动:触发具有实际效果的外部操作,例如发送邮件、创建工单、提交表单、调用第三方 API 等。
借助这两类能力,开发者可以构建出多种形态的应用,例如能够调用外部工具回答问题的对话代理、用于从非结构化文本中提取数据的方案、将自然语言转换为有效 API 调用的中间层应用等。
主流大模型平台的核心工作流程基本一致:开发者通过 JSON Schema 定义工具函数的名称、描述和参数约束,模型根据用户输入和系统提示自主决定是否调用以及调用哪些函数,最终在获取函数执行结果后整合生成自然语言响应。
函数实例:获取天气
以一个典型的天气查询场景为例,展示函数调用的完整实现过程。下面的代码基于 OpenAI 的 Python SDK,定义了一个名为 get_weather 的工具函数,用于获取指定地点的当前温度,位置参数需要以'城市 + 国家'的格式传入。
from openai import OpenAI
# 配置 API 中转站端点
client = OpenAI(
base_url="https://api.aaaaapi.com/v1",
api_key="your-api-key" # 替换为你的 API 密钥
)
# 定义工具(函数)
tools = [
{
"type": "function",
"name": "get_weather",
"description": "获取指定地点的当前温度。",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "城市和国家,例如:波哥大,哥伦比亚"
}
},
: [],
:
}
}
]
response = client.responses.create(
model=,
=[{: , : }],
tools=tools
)
(response.output)


