乐于分享
好东西不私藏

为什么你的 AI 助手不会查天气?——一文看懂 Function Calling 如何让大模型"长出手脚"

为什么你的 AI 助手不会查天气?——一文看懂 Function Calling 如何让大模型"长出手脚"

导语:你问 AI ”北京今天天气怎么样”,它要么瞎编一个温度,要么老实回答”我的知识截止到某年某月”。这不是 AI 笨,而是它天生缺少一样关键能力。今天用 5 分钟,彻底搞懂 Function Calling 如何让 AI 从”纸上谈兵”变成”能干事”。


一、一个扎心的对比实验

先做个小实验,对比同一个问题在两种场景下的回答:

❌ 场景 A:没有工具,AI 只能”猜”

用户:北京今天天气怎么样?需要带伞吗?

AI:根据我的训练数据,北京春季(4 月)平均气温约为 15-22°C,天气多变,建议随身携带雨具以防万一。不过我的知识截止于 2026 年初,无法获取实时天气数据……

问题出在哪? 大模型本质上是一个”概率文本生成器”,它的知识被冻结在训练数据截止的那一刻 。对于天气、股价、航班动态这类实时变化的信息,它没有任何获取渠道,只能靠”经验推测”或干脆认怂。

✅ 场景 B:接入工具,AI 开始”查”

用户:北京今天天气怎么样?需要带伞吗?

AI:正在为您查询北京实时天气……

北京今天 晴天,气温 22°C,湿度 45%,东南风 3 级。紫外线中等,不需要带伞,是出门的好天气!🌤️

发生了什么变化? AI 并没有变成气象专家,而是学会了——在回答之前,先拿起电话打给气象局

这个”打电话”的动作,就是 Function Calling(函数调用/工具调用)


二、Function Calling 到底是什么?

用最通俗的话说:

Function Calling 是 AI 的”工具箱接口”。你给 AI 一份”工具说明书”,当用户的问题需要用到某个工具时,AI 不会直接回答,而是返回一份”调用指令”,你的程序执行这个指令、拿到结果,再喂给 AI,AI 最后组织语言回答用户。

整个过程就像这样:
用户提问 → AI 判断"需要查天气" → 返回"调用 get_weather(北京)"     ↓程序执行天气 API → 拿到实时数据 → 把结果塞回给 AI    ↓AI 基于真实数据 → 生成人话回答
关键点:AI 本身不执行工具,它只负责决策(要不要用工具、用哪个、传什么参数),真正的执行由外部程序完成 

三、代码视角:天气查询的完整实现

光说原理不够直观,来看一段真实可运行的 Python 代码(基于 OpenAI 兼容 API):

第一步:定义工具(告诉 AI 你有什么能力)

TOOLS = [    {        "type""function",        "function": {            "name""get_weather",            "description""获取指定城市的实时天气信息。当用户询问天气、温度、降雨概率等问题时使用。",            "parameters": {                "type""object",                "properties": {                    "city": {                        "type""string",                        "description""城市名称,例如:北京、Shanghai"                    }                },                "required": ["city"]            }        }    }]

注意description 是最关键的部分!AI 靠这段描述来判断”什么时候该调用这个工具”。描述越清晰,调用准确率越高 。

第二步:第一轮对话——AI 决定调用工具

messages = [    {"role""system""content""你是天气助手,使用工具获取实时天气信息后再回答。"},    {"role""user""content""北京今天天气怎么样?"}]# 传入 tools,让模型知道它有工具可用response = client.chat.completions.create(    model="gpt-4o",    messages=messages,    tools=TOOLS,    tool_choice="auto"  # 让模型自己决定)
此时模型返回的不是天气答案,而是一个工具调用请求
{  "tool_calls": [{    "id""call_abc123",    "function": {      "name""get_weather",      "arguments""{\"city\"\"北京\"}"    }  }]}

第三步:本地执行工具函数

def get_weather(city: str):    # 实际项目中这里调用真实天气 API    return {        "city": city,        "temperature"22,        "condition""晴天",        "humidity""45%",        "wind""东南风 3级"    }# 执行工具result = get_weather("北京")

第四步:第二轮对话——AI 基于真实数据生成答案

# 把工具调用和结果都加入对话历史messages.append(response.choices[0].message)  # AI 的调用意图messages.append({    "role""tool",    "tool_call_id""call_abc123",    "content": json.dumps(result)})# 再次调用模型,生成最终回答final = client.chat.completions.create(    model="gpt-4o",    messages=messages)print(final.choices[0].message.content)# 输出:北京今天晴天,气温 22°C……
核心流程总结两次模型交互 + 一次工具执行 = 一个完整的 Function Calling 闭环 

四、为什么这很重要?三个认知升级

1. 从”知识库”到”连接器”

没有 Function Calling,大模型只是一个封闭的知识库,再聪明也跳不出训练数据的牢笼。有了工具调用,它变成了现实世界与数字世界的连接器——查天气、订机票、操作数据库、发邮件,无所不能。

2. 从”聊天机器人”到”AI Agent”

Function Calling 是 AI Agent(智能体)的”灵魂”技术 。Agent 与普通聊天机器人的本质区别就在于:能否自主规划并执行多步骤任务。而每一步的执行,都依赖工具调用。

3. 从”瞎编”到”可信”

当 AI 能接入实时数据源,它的回答就从”可能正确的猜测”变成了”基于事实的总结”。这对企业级应用(客服、金融、医疗)至关重要。


六、总结:给 AI 一把伞,它才能告诉你下不下雨

回到文章开头的问题:

为什么你的 AI 不会查天气?

因为它没有工具。就像你问一个被关在房间里的人”外面下雨了吗”,他只能靠猜;而 Function Calling 就是给这个人一把伞、一扇门——让他能走出去,看了再回来告诉你。

Function Calling 的本质,不是让 AI 变聪明,而是让 AI 拥有了”行动的能力”。