设想这样一个场景,你步入一家高档餐厅。无需亲自前往厨房动手烹饪,只需向服务员告知:“我想要一份香煎三文鱼,烹饪至七分熟,搭配芦笋和柠檬汁。”
服务员会精准地将你的需求传达给厨师,待厨师完成菜品烹制后,服务员会把这份美味佳肴端到你面前。
Function Call恰似大模型的’服务员’,它具备以下能力:
- 领会用户需求
- 把需求转化为标准化的函数调用形式
- 调用外部工具或API
- 向用户反馈执行结果
通俗来讲,Function Call让大模型能够’调用’外部功能,去完成自身不擅长的任务。
1、Function Call解决了什么问题
DeepSeek等大模型虽然聪明,但它们有三个明显短板:
- 无法执行实时操作:比如无法获取实时天气、股票价格
- 无法进行复杂计算:难以精确计算复杂数学问题
- 无法访问外部资源:不能直接查询数据库或使用专业工具
Function Call就像是给了大模型一套"超能力按钮",需要什么能力,按下对应的按钮即可。
2、以具体例子理解Function Call
例子1:天气查询助手
想象DeepSeek是你的私人助理。当你问"上海明天天气怎么样?"时:
没有Function Call的大模型:
“我无法获取实时天气信息,因为我没有访问互联网的能力。我的知识截止到训练日期。”
有Function Call的大模型:
- 识别出需要查询天气
- 调用
get_weather(location, date)
函数 - 获取实时数据
- 给你完整回答:“上海明天多云,气温17°C至25°C,有轻微降雨可能。”
来看看这是如何实现的:
# 定义一个天气查询函数
def get_weather(location, date):
"""查询指定地点和日期的天气
参数:
location (str): 城市名称
date (str): 日期,格式为YYYY-MM-DD
返回:
dict: 包含天气信息的字典
"""
# 实际应用中,这里会调用天气API
import requests
api_url = f"https://weather-api.example.com/forecast?location={location}&date={date}"
response = requests.get(api_url)
if response.status_code == 200:
return response.json()
else:
return {"error": "无法获取天气信息"}
# DeepSeek如何使用Function Call
def deepseek_with_function_call(user_query):
# 1. 模型理解用户查询天气的意图
if "天气" in user_query:
# 2. 提取地点和时间信息
location = extract_location(user_query) # 假设这个函数能提取位置
date = extract_date(user_query) # 假设这个函数能提取日期
# 3. 调用天气函数
weather_data = get_weather(location, date)
# 4. 格式化回复
response = f"{location}{date}天气为{weather_data['condition']},"
response += f"温度在{weather_data['min_temp']}°C至{weather_data['max_temp']}°C之间,"
response += f"降水概率{weather_data['precipitation_chance']}%。"
return response
# 其他类型的查询...
return "我无法理解您的问题。"
例子2:购物助手
当你问"帮我找价格低于300元的红色连衣裙":
有Function Call的DeepSeek:
- 理解你想要查找特定条件的商品
- 调用
search_products
函数 - 获取符合条件的商品列表
- 整理结果并回答你
# 商品搜索函数
def search_products(product_type, color=None, max_price=None, min_price=None):
"""搜索符合条件的商品
参数:
product_type (str): 商品类型
color (str, optional): 颜色
max_price (float, optional): 最高价格
min_price (float, optional): 最低价格
返回:
list: 符合条件的商品列表
"""
# 实际中会调用电商平台API
# 这里用模拟数据演示
all_products = [
{"id": 1, "name": "夏季红色连衣裙", "color": "红色", "price": 259.00},
{"id": 2, "name": "优雅红色长裙", "color": "红色", "price": 329.00},
{"id": 3, "name": "简约红色连衣裙", "color": "红色", "price": 199.00}
]
results = []
for product in all_products:
if product_type in product["name"] and \
(color is None or product["color"] == color) and \
(max_price is None or product["price"] <= max_price) and \
(min_price is None or product["price"] >= min_price):
results.append(product)
return results
# DeepSeek处理购物查询
def handle_shopping_query(query):
# 提取查询信息
if "连衣裙" in query and "红色" in query:
# 解析价格条件
max_price = 300 # 从查询中提取"低于300元"
# 调用商品搜索函数
products = search_products("连衣裙", color="红色", max_price=max_price)
# 格式化回复
if products:
response = f"我找到了{len(products)}款符合条件的红色连衣裙:\n"
for p in products:
response += f"- {p['name']},售价{p['price']}元\n"
else:
response = "抱歉,没有找到符合条件的商品。"
return response
3、DeepSeek如何实现Function Call
DeepSeek的Function Call实现包含三个关键步骤:
1. 函数定义与注册
首先,需要定义可供调用的函数及其参数格式:
# 注册可用函数
available_functions = {
"get_weather": {
"description": "获取指定地点和日期的天气信息",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "城市名称,如'北京'、'上海'"
},
"date": {
"type": "string",
"description": "日期,格式为YYYY-MM-DD"
}
},
"required": ["location"]
}
},
"search_products": {
"description": "搜索符合条件的商品",
"parameters": {
"type": "object",
"properties": {
"product_type": {
"type": "string",
"description": "商品类型,如'连衣裙'、'手机'"
},
"color": {
"type": "string",
"description": "商品颜色"
},
"max_price": {
"type": "number",
"description": "最高价格"
}
},
"required": ["product_type"]
}
}
}
2. 意图识别与函数选择
DeepSeek分析用户输入,判断需要调用哪个函数:
def process_user_query(user_query):
# 模拟DeepSeek分析用户意图的过程
# 假设这是模型的思考过程
"""
用户问"上海明天天气怎么样",明显是查询天气信息。
需要的信息:城市=上海,日期=明天(2025-02-27)
应该调用get_weather函数
"""
# 模型决定调用get_weather函数
function_call = {
"name": "get_weather",
"arguments": {
"location": "上海",
"date": "2025-02-27"
}
}
return function_call
3. 函数执行与结果整合
执行函数并将结果融入回答:
def deepseek_complete_response(user_query):
# 1. 确定需要调用的函数
function_call = process_user_query(user_query)
# 2. 执行函数调用
if function_call["name"] == "get_weather":
args = function_call["arguments"]
weather_data = get_weather(args["location"], args["date"])
# 3. 将函数结果融入自然语言回答
response = f"{args['location']}在{args['date']}的天气预报:\n"
response += f"天气状况: {weather_data['condition']}\n"
response += f"温度范围: {weather_data['min_temp']}°C - {weather_data['max_temp']}°C\n"
response += f"降水概率: {weather_data['precipitation_chance']}%\n"
if weather_data['precipitation_chance'] > 50:
response += "建议您出门携带雨伞!"
return response
# 其他函数调用类似处理...
4、与普通API调用的本质差异
Function Call与传统API调用有着根本性的区别,这使得大模型从"被动工具"变成了"主动管家":
特性 | 传统API调用 | Function Call |
---|---|---|
触发方式 | 开发者硬编码调用逻辑 | 模型自主决策何时调用 |
参数生成 | 人工预设 | 模型动态生成结构化参数 |
错误处理 | 需手动捕获异常 | 模型可识别错误并重试 |
多函数协作 | 需编写复杂流程 | 模型自动规划调用顺序 |
让我们通过日常生活来理解这些差异:
传统API调用就像是一本烹饪食谱,厨师必须严格按照步骤操作:“先切洋葱,再煎牛排,最后加盐”。每一步都是预先写好的,没有灵活性。
Function Call则像是一位经验丰富的主厨,能根据食材状态和客人口味动态调整烹饪过程:“这块牛排较厚,需要多煎2分钟”,“客人喜欢微辣,可以添加少量辣椒粉”。
举个例子说明差异:
# 传统API调用 - 开发者必须硬编码逻辑
def traditional_weather_app(user_input):
if "天气" in user_input and extract_location(user_input):
location = extract_location(user_input)
date = extract_date(user_input) or "today"
try:
weather_data = weather_api.get_forecast(location, date)
return format_weather_response(weather_data)
except ApiError as e:
return f"获取天气失败: {e}"
else:
return "我不理解您的问题"
# Function Call - 模型自主决策
def function_call_assistant(user_input):
# 模型分析输入,自主决定是否需要天气信息
function_decision = model.analyze(user_input)
if function_decision.needs_function_call:
# 模型自动生成结构化参数
function_name = function_decision.function_name # 可能是"get_weather"或其他
function_args = function_decision.arguments # 模型提取的参数
try:
result = call_function(function_name, function_args)
except Exception as e:
# 模型能理解错误并尝试修正参数后重试
corrected_args = model.correct_arguments(function_args, error=str(e))
result = call_function(function_name, corrected_args)
# 模型融合函数结果生成回答
return model.generate_response(user_input, function_result=result)
else:
# 模型判断不需要调用外部函数
return model.generate_response(user_input)
在复杂场景中,这种差异更为明显。例如,当用户问"我明天去上海出差,需要带伞吗?还有,推荐几家商务酒店":
- 传统方式:开发者需要预先编写逻辑,将其拆分为天气查询和酒店查询两个独立步骤
- Function Call:模型自动识别需要调用天气和酒店两个函数,并安排合适的调用顺序,最后将结果整合成连贯的回答
5、Function Call的魔力:类比理解
Function Call就像是:
- 翻译官:将用户自然语言转为计算机可理解的结构化指令
- 外交官:负责大模型与外部世界的沟通协调
- 工具箱管理员:知道什么情况下该使用什么工具
- 魔术师助手:递给魔术师(大模型)需要的道具,让表演更精彩
6、 实际应用场景
DeepSeek的Function Call功能在以下场景特别有用:
- 智能客服:调用企业内部API获取订单、物流信息
- 个人助理:日程安排、提醒、信息查询
- 数据分析:调用分析工具处理复杂数据
- 内容创作:调用专业工具生成图表、编辑图片
- 智能家居控制:通过API控制智能设备
7、结语
Function Call让DeepSeek从"只会说话"变成了"会做事"的助手。它像是大模型与现实世界之间的桥梁,让AI不再封闭在自己的知识库中,而是能够主动获取信息、使用工具、解决实际问题。
正如一位优秀的管家不仅能听懂主人的各种需求,还知道如何调动合适的资源来满足这些需求,Function Call让大模型有了"管家效率",能够更加全面而精准地为用户服务。
通过这种能力,DeepSeek和其他大模型正逐步从信息提供者转变为行动的助手,为我们的生活和工作带来更多便利与可能。
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费
】
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。