系列篇章💥
No. | 文章 |
---|---|
01 | 【DeepSeek应用实践】DeepSeek接入Word、WPS方法详解:无需代码,轻松实现智能办公助手功能 |
02 | 【DeepSeek应用实践】通义灵码 + DeepSeek:AI 编程助手的实战指南 |
03 | 【DeepSeek应用实践】Cline集成DeepSeek:开源AI编程助手,终端与Web开发的超强助力 |
04 | 【DeepSeek开发入门】DeepSeek API 开发初体验 |
05 | 【DeepSeek开发入门】DeepSeek API高级开发指南(推理与多轮对话机器人实践) |
06 | 【DeepSeek开发入门】Function Calling 函数功能应用实战指南 |
07 | 【DeepSeek部署实战】DeepSeek-R1-Distill-Qwen-7B:本地部署与API服务快速上手 |
08 | 【DeepSeek部署实战】DeepSeek-R1-Distill-Qwen-7B:Web聊天机器人部署指南 |
09 | 【DeepSeek部署实战】DeepSeek-R1-Distill-Qwen-7B:基于vLLM 搭建高性能推理服务器 |
10 | 【DeepSeek部署实战】基于Ollama快速部署DeepSeek-R1系列模型实战指南(Linux) |
11 | 【DeepSeek部署实战】基于Ollama+Chatbox零成本部署DeepSeek-R1系列模型攻略(Windows) |
12 | 【DeepSeek开发实战】DeepSeek-R1-Distill-Qwen与LangChain的本地大模型应用开发指南 |
目录
前言
在人工智能开发领域,DeepSeek 以其丰富的功能和强大的性能备受关注。其中,Function Calling(函数调用)功能为开发者提供了一种全新的交互方式,使得模型能够与外部工具和函数进行交互,极大地拓展了模型的应用能力。
本文将深入探讨 DeepSeek Function Calling 的原理、使用方法、应用场景以及开发过程中的注意事项。
一、Function Calling 功能概述
(一)功能原理
Function Calling 允许模型根据用户的输入,判断是否需要调用外部函数来完成任务。模型通过对用户问题的理解,识别出需要借助特定函数解决的部分,然后生成调用函数的指令。这些函数可以是自定义的工具函数,也可以是调用第三方 API 的函数。
例如,当用户询问 “明天北京的天气如何”,模型识别到这是一个获取天气信息的任务,就可以调用相应的天气查询函数来获取数据并回答用户。
(二)与传统对话的区别
与传统的对话模型不同,Function Calling 打破了模型只能基于自身知识进行回答的限制。
传统对话模型主要依赖预训练的知识来生成回复,而 Function Calling 使得模型能够动态地调用外部工具,获取最新的信息和执行特定的任务,从而提供更准确、更实用的回答。
二、Function Calling使用方法详解
(一)定义业务函数
在使用 Function Calling 之前,开发者需要定义可供模型调用的函数。这些函数需要有清晰的定义,包括函数名、参数列表和功能描述。例如,定义一个获取城市天气的函数:
def get_weather(city):
"""
获取指定城市的天气信息
:param city: 城市名称
:return: 包含天气状况和温度的字典
"""
# 这里是实际获取天气数据的代码,例如调用天气API
weather_data = {
"condition": "sunny",
"temperature": "25°C"
}
return weather_data
(二)初始化大模型客户端
导入相关的依赖包,并初始化大模型客户端
import json
from openai import OpenAI
client = OpenAI(api_key="sk-47a1288c898f43ecbb41864bf8f85a8a", base_url="https://api.deepseek.com")
(三)定义tools工具函数
# 定义tools工具函数
tools = [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "获取指定城市的天气信息",
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "城市名称"
}
},
"required": ["city"]
}
}
}
]
(四)第一次调用大模型API
在调用 DeepSeek API 时,需要在请求体中包含tools参数,用于指定模型可以调用的函数列表。同时,tool_choice参数可以控制模型调用工具的行为,取值包括none(不调用任何工具,直接生成消息)、auto(模型可选择生成消息或调用工具)、required(模型必须调用工具)。
# 定义消息
messages = [
{"role": "user", "content": "明天北京的天气如何"}
]
# 第1次大模型调用(查看是否有匹配到工具函数)
response = client.chat.completions.create(
model="deepseek-chat",
messages=messages,
tools=tools,
tool_choice="auto"
)
# 查看第一次调用后返回的消息(检查大模型是否有找到函数信息)
reply = response.choices[0].message
messages.append(reply)
print(reply)
返回结果如下:
(五)调用真正的业务函数
function_args = json.loads(reply.tool_calls[0].function.arguments) # 确保转换为字典
result = get_weather(**function_args) #真正调用,手动执行获取天气信息的方法
print(result)
打印如下:
{'condition': 'sunny', 'temperature': '25°C'}
(六)第二次调用大模型API
第2次大模型调用;将获取到的结果,丢给大模型帮忙整理后再输出给用户。
示例代码如下:
# messages.append({"role": "tool", "name": function_name, "content": str(result)})
tool_call_id = reply.tool_calls[0].id
#print("tool_call_id",tool_call_id)
messages.append({"role": "tool", "tool_call_id": tool_call_id, "content": str(result)})
second_response = client.chat.completions.create(
model="deepseek-chat",
messages=messages
)
print(second_response.choices[0].message.content)
模型整理后返回如下:
明天北京的天气预计是晴天,气温大约在25°C左右。记得做好防晒措施哦!
三、Function Calling实战(天气查询自能助手完整代码)
基于function calling自助查询天气,完整代码如下:
# 1、导入依赖&初始化大模型客户端
import json
from openai import OpenAI
client = OpenAI(api_key="sk-47a1288c898f43ecbb41864bf8f85a8a", base_url="https://api.deepseek.com")
# 2、定义消息
messages = [
{"role": "user", "content": "明天北京的天气如何"}
]
# 3、定义tools工具函数
tools = [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "获取指定城市的天气信息",
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "城市名称"
}
},
"required": ["city"]
}
}
}
]
# 第1次大模型调用(查看是否有匹配到工具函数)
response = client.chat.completions.create(
model="deepseek-chat",
messages=messages,
tools=tools,
tool_choice="auto"
)
# 查看第一次调用后返回的消息(检查大模型是否有找到函数信息)
reply = response.choices[0].message
print(reply)
messages.append(reply)
if reply.tool_calls:
#function_name = reply.tool_calls[0].function.name
#function_args = reply.tool_calls[0].function.arguments
function_args = json.loads(reply.tool_calls[0].function.arguments) # 确保转换为字典
result = get_weather(**function_args) #真正调用,手动执行获取天气信息的方法
print(result)
# 第2次大模型调用(将获取到的结果,丢给大模型帮忙整理后再输出给用户)
# messages.append({"role": "tool", "name": function_name, "content": str(result)})
tool_call_id = reply.tool_calls[0].id
#print("tool_call_id",tool_call_id)
messages.append({"role": "tool", "tool_call_id": tool_call_id, "content": str(result)})
second_response = client.chat.completions.create(
model="deepseek-chat",
messages=messages
)
print(second_response.choices[0].message.content)
else:
print(reply.message.content)
四、Function Calling应用场景
(一)智能助手
在智能助手应用中,Function Calling 可以使助手调用各种工具函数,如查询日历、发送邮件、设置提醒等。例如,用户说 “帮我明天下午三点设置一个会议提醒”,智能助手可以调用设置提醒的函数来完成任务。
(二)数据分析
在数据分析场景下,模型可以调用数据分析函数,如数据清洗、统计分析、数据可视化等。当用户询问 “对这个销售数据进行一下统计分析”,模型可以调用相应的数据分析函数,并将分析结果以可视化的方式呈现给用户。
(三)电商购物
在电商购物平台中,Function Calling 可以帮助用户查询商品信息、下单购买、跟踪物流等。用户说 “我想购买一部苹果手机”,模型可以调用商品查询和下单函数,完成购物流程。
五、Function Calling开发注意事项
(一)函数定义规范
定义函数时,要确保函数的描述清晰准确,参数定义明确。不规范的函数定义可能导致模型错误地调用函数,或者无法正确解析函数的返回结果。
(二)安全问题
在调用外部函数和 API 时,要注意安全问题,防止数据泄露和恶意攻击。例如,对用户输入进行严格的验证和过滤,避免 SQL 注入和其他安全漏洞。
(三)性能优化
过多的函数调用可能会影响性能,特别是在调用第三方 API 时,可能会面临网络延迟等问题。开发者需要合理设计函数调用策略,优化性能,例如缓存常用的函数调用结果。
总结
通过本文的介绍,我们深入了解了 DeepSeek Function Calling 的原理、使用方法、应用场景以及开发注意事项。Function Calling 为开发者提供了强大的工具,使得模型能够与外部世界进行更紧密的交互。在未来的开发中,我们可以进一步探索 Function Calling 与其他技术的结合,如与知识图谱、物联网设备的集成,拓展其应用边界。同时,随着模型和工具的不断发展,Function Calling 的性能和安全性也将得到进一步提升,为我们带来更多的创新和惊喜。让我们期待在 DeepSeek Function Calling 的助力下,创造出更加智能、高效的应用。
🎯🔖更多专栏系列文章:AI大模型提示工程完全指南、AI大模型探索之路(零基础入门)、AI大模型预训练微调进阶、AI大模型开源精选实践、AI大模型RAG应用探索实践🔥🔥🔥 其他专栏可以查看博客主页📑
😎 作者介绍:资深程序老猿,从业10年+、互联网系统架构师,目前专注于AIGC的探索(CSDN博客之星|AIGC领域优质创作者)
📖专属社群:欢迎关注【小兵的AI视界】公众号或扫描下方👇二维码,回复‘入群’ 即刻上车,获取邀请链接。
💘领取三大专属福利:1️⃣免费赠送AI+编程📚500本,2️⃣AI技术教程副业资料1套,3️⃣DeepSeek资料教程1套🔥(限前500人)
如果文章内容对您有所触动,别忘了点赞、⭐关注,收藏!加入我们,一起携手同行AI的探索之旅,开启智能时代的大门!