为什么你的 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 基于真实数据 → 生成人话回答
三、代码视角:天气查询的完整实现
光说原理不够直观,来看一段真实可运行的 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):# 实际项目中这里调用真实天气 APIreturn {"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……
四、为什么这很重要?三个认知升级
1. 从”知识库”到”连接器”
没有 Function Calling,大模型只是一个封闭的知识库,再聪明也跳不出训练数据的牢笼。有了工具调用,它变成了现实世界与数字世界的连接器——查天气、订机票、操作数据库、发邮件,无所不能。
2. 从”聊天机器人”到”AI Agent”
Function Calling 是 AI Agent(智能体)的”灵魂”技术 。Agent 与普通聊天机器人的本质区别就在于:能否自主规划并执行多步骤任务。而每一步的执行,都依赖工具调用。
3. 从”瞎编”到”可信”
当 AI 能接入实时数据源,它的回答就从”可能正确的猜测”变成了”基于事实的总结”。这对企业级应用(客服、金融、医疗)至关重要。
六、总结:给 AI 一把伞,它才能告诉你下不下雨
回到文章开头的问题:
为什么你的 AI 不会查天气?
因为它没有工具。就像你问一个被关在房间里的人”外面下雨了吗”,他只能靠猜;而 Function Calling 就是给这个人一把伞、一扇门——让他能走出去,看了再回来告诉你。
Function Calling 的本质,不是让 AI 变聪明,而是让 AI 拥有了”行动的能力”。
夜雨聆风