- 最近,千问“请大家喝奶茶”火了一把,这背后是一次真实的接口调用。
- AI它不是在聊天,而是在“调接口[下单系统]”。这种能力,就叫Function Calling。
- 当大模型从“生成文本”升级为“调用工具”,AI 才真正开始从对话助手,变成执行系统。
Function Calling的步骤
一
Function Calling 的完整流程包括以下步骤:
- 定义工具(tools):告诉 AI 你有哪些函数/工具可以调用,每个函数的参数是什么
- 第一次调用大模型API[如何调用大模型API]:AI 分析用户输入,决定是否需要调用函数/工具
- 检查响应:如果 AI 返回了
tool\_calls,说明它想调用函数/工具 - 执行函数/工具:根据 AI 的请求,执行实际的函数调用
- 第二次调用大模型API:将函数/工具执行结果返回给 AI
- AI 生成最终回复:结合函数/工具结果,生成用户可读的回答
完整示例:天气查询工具
二
2.1 定义工具——调用get_weather API查询天气
#定义工具
tools = [
{
"type": "function",
"function":{
"name": "get_weather",
"description": "获取指定城市的实时天气信息",
"parameters":{
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "城市名称,例如:北京、上海"
},
"unit": {
"type": "string",
"enum": ["celsius","fahrenheit"],
"description":"温度单位:celsius(摄氏度)或fahrenheit(华氏度)"
}
},
"required": ["city"] #city是必填参数
}
}
}
]
print("工具schema已定义")
#这里我们自己定义下get_weather工具[实际使用时我们调用天气API]
def get_weather(city: str, unit: str = "celsius") -> str:
"""
获取指定城市的天气信息(Mock函数,实际调用天气API)
Args:
city: 城市名称
unit: 温度单位(celsius或fahrenheit)
Returns:
天气信息的JSON字符串
"""
#模拟天气数据
weather_data = {
"北京": {"temperature": 15, "condition": "晴天", "humidity": 45},
"上海": {"temperature": 20, "condition": "多云", "humidity": 60},
"深圳": {"temperature": 28, "condition": "小鱼", "humidity": 75},
}
#检查城市是否存在于模拟数据中
if city in weather_data:
data = weather_data[city]
if unit == 'fahrenheit':
data['temperature'] = int(data['temperature'] * 9/5 + 32)
return json.dumps({
"city": city,
"temperature": data["temperature"],
"unit": unit,
"condition": data["condition"],
"humidity": data["humidity"]
}, ensure_ascii = False)
else:
return json.dumps({"error": f"未找到 {city} 的天气数据"}, ensure_ascii = False)
print("测试天气查询函数:")
print(get_weather('北京'))
print(get_weather('上海', 'fahrenheit'))
2.2 第一次调用大模型API
import json
import os
from openai import OpenAI
from dotenv import load_dotenv
load_dotenv(override=True)
client = OpenAI(
api_key = os.getenv("DASHSCOPE_API_KEY"),
base_url = "https://dashscope.aliyuncs.com/compatible-mode/v1")
#用户提问
user_query = "北京现在的天气怎么样?"
#初始化信息
messages = [
{"role": "system", "content": "你是一个友好的天气助手,可以查询天气信息。"},
{"role": "user", "content": user_query}
]
print(f"用户: {user_query}\n")
#第一次调用:让AI决定是否需要调用工具
response = client.chat.completions.create(
model = 'deepseek-v3.2',
messages = messages,
tools = tools, #传递工具定义
tool_choice = 'auto' #"auto"为自动决定
)
2.3 检查AI的响应:是否想调用函数/工具
if response.choices[0].message.tool_calls:
print('AI决定调用工具:')
#提取工具调用信息
tool_call = response.choices[0].message.tool_calls[0]
function_name = tool_call.function.name
function_args = json.loads(tool_call.function.arguments)
print(f" 函数名: {function_name}")
print(f" 参数: {function_args}")
2.4 执行函数/工具:根据 AI 的请求,执行实际的函数调用
if function_name == 'get_weather':
function_result = get_weather(**function_args)
print(f"函数执行结果:{function_result}\n")
2.5-2.6:第二次调用 大模型API,AI生成最终回复
#将函数结果添加到消息历史
messages.append(response.choices[0].message) #AI的工具调用请求
messages.append({
"role": "tool",
"tool_call_id": tool_call.id,
"content": function_result
})
# 第二次调用:让AI根据函数结果生成最终回复
final_response = client.chat.completions.create(
model = 'deepseek-v3.2',
messages = messages
)
final_answer = final_response.choices[0].message.content
print(f"AI 最终回复:{final_answer}")
2.7 测试如下

Function calling的其他应用
三

这里给大家精心整理了一份全面的AI大模型学习资源,包括:AI大模型全套学习路线图(从入门到实战)、精品AI大模型学习书籍手册、视频教程、实战学习、面试题等,资料免费分享!
👇👇扫码免费领取全部内容👇👇

1. 成长路线图&学习规划
要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。
这里,我们为新手和想要进一步提升的专业人士准备了一份详细的学习成长路线图和规划。可以说是最科学最系统的学习成长路线。

2. 大模型经典PDF书籍
书籍和学习文档资料是学习大模型过程中必不可少的,我们精选了一系列深入探讨大模型技术的书籍和学习文档,它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础。(书籍含电子版PDF)

3. 大模型视频教程
对于很多自学或者没有基础的同学来说,书籍这些纯文字类的学习教材会觉得比较晦涩难以理解,因此,我们提供了丰富的大模型视频教程,以动态、形象的方式展示技术概念,帮助你更快、更轻松地掌握核心知识。

4. 2026行业报告
行业分析主要包括对不同行业的现状、趋势、问题、机会等进行系统地调研和评估,以了解哪些行业更适合引入大模型的技术和应用,以及在哪些方面可以发挥大模型的优势。

5. 大模型项目实战
学以致用 ,当你的理论知识积累到一定程度,就需要通过项目实战,在实际操作中检验和巩固你所学到的知识,同时为你找工作和职业发展打下坚实的基础。

6. 大模型面试题
面试不仅是技术的较量,更需要充分的准备。
在你已经掌握了大模型技术之后,就需要开始准备面试,我们将提供精心整理的大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余。

7. 资料领取:全套内容免费抱走,学 AI 不用再找第二份
不管你是 0 基础想入门 AI 大模型,还是有基础想冲刺大厂、了解行业趋势,这份资料都能满足你!
现在只需按照提示操作,就能免费领取:
👇👇扫码免费领取全部内容👇👇

3174



被折叠的 条评论
为什么被折叠?



