
字节笔记本
2026年10月6日 · 约 7 分钟读完
ChatGPT 函数调用实战:让对话模型接入实时外部数据
对话式 AI 已经能写文章、改代码、做翻译,但很多人在实际使用中都遇到过同一个尴尬:问它「现在北京天气怎么样」「某某公司股价多少」,模型要么答非所问,要么坦承自己不知道。原因并不复杂:模型的知识来自训练语料,存在时间截止点,也无法主动联网获取最新数据。Function Calling,中文常称函数调用或工具扩展,正是为解决这一问题而设计的机制:模型在对话中负责理解意图并提出请求,由外部程序执行真正的查询动作,再把结果交回给模型,组织成最终回答。
一、模型为什么会「不知道」
ChatGPT 的对话与理解能力已经相当出色,但它的知识被固定在训练数据里。天气、股价、汇率、赛事比分这类实时信息随时在变,单靠模型本身无法给出准确答复,这直接限制了它在真实业务场景中的可用性。要让模型更好地服务用户,就要给它配上可以动态获取外部信息的工具,让它开口之前先去查一下真实世界。
二、函数怎么定义
在 API 层面,函数以结构化格式定义,包含名称、描述、参数等关键信息。下面是一个查询天气函数的定义示例:
tools = [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get weather of an location, the user should supply a location first",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city and state, e.g. San Francisco, CA",
}
},
"required": ["location"]
},
}
},
]其中 name 是函数名,description 告诉模型这个函数做什么、什么时候该用,parameters 则用 JSON Schema 描述入参,required 声明哪些参数必须提供。description 写得越清楚,模型判断得越准。定义好之后,模型会根据对话上下文自动判断是否需要调用、调用哪一个。
三、一次完整调用的五个步骤

函数调用的完整流程可以拆成五步:
- 模型分析用户请求,判断是否需要调用函数;
- 如需调用,模型生成一个结构化的函数调用请求并返回;
- 程序提取该请求,执行对应的函数逻辑,比如真正去请求天气接口;
- 把函数返回结果追加到对话上下文中;
- 再次调用模型,让它结合函数结果生成最终回答。
整个过程中,模型本身并没有执行任何代码,它只负责决定调用什么、传什么参数,以及解读返回结果,真正的执行动作发生在开发者自己的程序里。这也是函数调用机制的安全边界:执行权始终留在程序一侧。
四、程序侧如何处理
在程序侧,需要解析模型返回的调用请求,分发到对应的本地函数,再把结果写回消息列表。示意代码如下:
tool_calls = message.get("tool_calls", [])
for tool_call in tool_calls:
tool_name = tool_call["tool_name"]
parameters = tool_call["parameters"]
if tool_name == "get_weather":
location = parameters.get("location")
weather_result = get_weather_data(location)
tool_response = {"role": "function", "content": weather_result}
messages.append(tool_response)
message = send_messages(messages)
print(f"ChatGPT: {message.content}")这段代码遍历模型返回的 tool_calls,按函数名分发执行,将结果以消息形式追加进上下文,最后再次请求模型,输出面向用户的最终回答。不同版本的 API 对字段命名的细节略有差异,但这套「解析请求、执行函数、回填结果、再次生成」的思路是一致的。
五、三个典型场景

- 实时天气:定义 get_weather 函数后,模型可以查询指定城市的实时天气,为用户提供准确的气象信息。
- 股价查询:定义 get_stock_price 函数,模型能快速返回特定公司股票的实时价格,方便用户了解市场行情。
- 数学计算:calculate_expression 函数让模型具备处理复杂数学运算的能力,用户可以直接在对话中完成各类计算任务。
这三个场景有一个共同点:答案依赖模型训练数据之外的信息,或者依赖精确计算。凡是落在这些范围里的需求,都适合用函数调用补足。
六、优势与展望
函数调用带来的变化是实打实的:它极大拓展了对话模型的应用场景,让回答从凭训练记忆作答变成带实时数据作答,准确性和时效性明显提升,模型也因此更像一个真正可用的智能助手,而不只是一个聊天玩具。
往远处看,随着可调用函数的不断丰富,对话模型有望成长为集聊天、任务处理、数据查询等多种功能于一体的平台:订机票、查库存、控设备,都可能是未来对话界面背后的一次函数调用。对开发者而言,早一点熟悉这套定义函数、解析请求、回填结果的范式,就是在为下一代 AI 应用打底。
工具扩展是让 ChatGPT 走向实用化的重要一步。当你下一次发现模型「不知道」某件事时,不妨想一想:也许该给它配一个函数了。



