Deepseek Api Function Calling解析(tools、tool_calls)Deepseek函数调用流程图、Python代码示例
文章目录
- Function Calling介绍
- **核心原理**
- 1. **动态扩展模型能力**
- 2. **JSON结构化交互**
- **实现步骤**(以支持Function Calling的模型为例)
- 1. **定义可用函数**
- 2. **模型匹配与生成**
- 3. **开发者执行函数**
- 4. **结果反馈给模型**
- **DeepSeek R1的当前限制**
- **替代方案建议**
- 1. **自定义流程控制**
- 2. **关注更新动态**
- 💡 **扩展阅读**
- Function Calling调用流程
- **Function Calling 核心流程**
- 1. **用户输入请求**
- 2. **模型解析意图**
- 3. **生成函数调用请求**
- 4. **执行外部函数**
- 5. **返回函数结果**
- 6. **生成最终响应**
- **流程图**
- **关键点说明**
- 1. **两次模型交互(如OpenAI)**
- 2. **结构化参数验证**
- 3. **错误处理**
- **参考案例(天气查询)**
- 1. **用户输入**
- 2. **模型返回函数调用**
- 3. **执行天气API查询**
- 4. **模型生成最终响应**
- **扩展阅读**
- Function Calling Python代码示例(以调用OpenAI模型为例)
- 代码
- 代码解析:
- 1. **函数定义**
- 2. **API交互流程**
- 3. **关键参数说明**
- 执行示例输出:
- 注意事项:
- 1. 需替换为有效的OpenAI API密钥(`sk-your-api-key-here`)
- 2. GPT-3.5-turbo版本需 >= 0613 才能支持函数调用
- 3. 实际生产环境需要:
Function Calling介绍
根据官方文档和搜索结果,DeepSeek的 Function Calling(函数调用) 功能允许模型通过调用外部工具来增强其能力。以下是其核心原理与实现步骤:
核心原理
1. 动态扩展模型能力
通过预定义函数,模型可将用户查询映射到具体操作(如调用API、执行计算等),从而突破纯文本生成的限制。
2. JSON结构化交互
模型不直接执行函数,而是生成包含函数名和参数的JSON对象,开发者据此执行外部逻辑。
实现步骤(以支持Function Calling的模型为例)
1. 定义可用函数
开发者在API请求中声明函数列表,包括:
- 函数名(如
get_weather) - 参数描述(如
{"location": "string", "unit": "celsius|fahrenheit"})
2. 模型匹配与生成
用户输入查询后,模型判断是否需要调用函数。若需要,则生成JSON对象,例如:
{"tool_calls": [{"function": {"name": "get_weather", "arguments": "{\"location\": \"北京\"}"}}]
}
3. 开发者执行函数
解析JSON并调用对应函数,获取结果(如调用天气API返回数据)。
4. 结果反馈给模型
将执行结果返回给模型,模型整合信息生成最终回复(如“北京今天晴天,25℃”)。
DeepSeek R1的当前限制
🔴 注意:根据官方文档(DeepSeek API Docs),DeepSeek R1目前不支持Function Calling,且旧版模型(如 deepseek-chat)的此功能存在以下问题:
- 可能出现循环调用(模型重复生成函数请求)
- 返回空响应或无意义JSON
- 开发团队正在修复,预计下一版本改进。
替代方案建议
1. 自定义流程控制
通过Prompt Engineering引导模型输出结构化文本,开发者手动解析后调用外部工具。
示例Prompt:
若需查询天气,请以JSON格式回复:{"action": "weather", "location": "城市名"}
2. 关注更新动态
建议定期查阅DeepSeek GitHub仓库或官方文档,获取Function Calling支持进展。
💡 扩展阅读
- OpenAI式Function Calling详解: OpenAI函数调用机制
- DeepSeek工具调用优化方向: Reddit讨论
Function Calling调用流程
好的,用户需要理解Function Calling的流程,并希望有一个流程图来辅助理解。我之前提供的搜索结果里提到,Function Calling的基本流程包括用户输入、模型解析、生成函数调用请求、执行函数、返回结果和生成响应。用户可能已经了解了一些基本步骤,但可能对具体细节或流程图有疑问。
首先,需要确认用户的实际需求。他们可能是在开发中使用大模型,需要集成外部工具,比如天气API或数据库查询。流程图的请求表明他们希望有一个可视化的步骤说明,可能用于教学或系统设计。
根据搜索结果,尤其是来自CSDN和知乎的链接,流程通常包括两次模型调用:第一次判断是否需要调用函数,生成请求;第二次根据函数返回的结果生成最终响应。例如,OpenAI的流程是先发送用户输入和可用函数列表,模型返回需要调用的函数及参数,执行后再次将结果传给模型生成回答。
需要注意用户提到的DeepSeek R1目前不支持Function Calling,但其他模型如GPT-4有该功能。用户的示例可能基于通用流程,但需要明确说明不同模型的差异。
用户可能遇到的困惑点在于如何将模型和外部系统连接,以及具体步骤间的数据传递。流程图应清晰展示从用户输入到最终响应的闭环过程,包括模型判断和执行函数的环节。
综合搜索结果,可以构建一个包含以下步骤的流程图:
- 用户输入问题。
- 模型解析并判断是否需要调用函数。
- 生成函数调用请求(名称和参数)。
- 应用程序执行函数并获取结果。
- 结果返回给模型。
- 模型整合结果生成最终响应。
需要指出的是,部分实现可能需要两次模型交互,如OpenAI的流程,而有些可能整合为一次。此外,函数参数的验证和错误处理也是重要环节,但可能不在基础流程中体现。
最后,确保流程图简洁易懂,用文字说明每个步骤的关键点,如模型生成结构化请求(JSON),应用程序执行外部API调用等。同时,参考提供的链接中的示意图,但可能无法直接访问图片,需用文字描述结构。
以下是 Function Calling(函数调用) 的详细流程及示意图,结合大模型与外部工具的交互机制:
Function Calling 核心流程
1. 用户输入请求
- 用户提出自然语言请求(如“北京今天的天气如何?”)。
2. 模型解析意图
- 大模型(如GPT-4)分析用户意图,判断是否需要调用外部函数(如天气API)。
3. 生成函数调用请求
- 模型返回结构化请求(JSON格式),包含函数名和参数:
{"tool_calls": [{"function": {"name": "get_weather", "arguments": "{\"location\": \"北京\"}"}}] }
4. 执行外部函数
- 应用程序解析请求,调用对应的函数(如查询天气API)。
5. 返回函数结果
- 函数执行结果(如温度、天气状况)返回给模型。
6. 生成最终响应
- 模型将结果整合为自然语言回复(如“北京今天晴天,25℃”)。
流程图
用户输入│▼
大模型解析意图│▼
是否需要调用函数? ——是→ 生成函数调用请求(JSON)│ │否 ▼│ 执行外部函数(如API、数据库)▼ │
直接生成回答 ▼│ 获取函数结果▼ │
返回用户响应 ←───────────┘
关键点说明
1. 两次模型交互(如OpenAI)
- 第一次请求:发送用户输入 + 可用函数列表,模型返回需调用的函数及参数。
- 第二次请求:发送函数执行结果,模型生成最终回复。
2. 结构化参数验证
- 应用程序需校验参数格式(如参数类型、必填字段),避免错误调用。
3. 错误处理
- 若函数调用失败,模型可能重新生成请求或提示用户修正输入。
参考案例(天气查询)
1. 用户输入
“上海明天会下雨吗?”
2. 模型返回函数调用
{"function": "get_weather", "arguments": {"location": "上海", "date": "2024-06-20"}}
3. 执行天气API查询
调用第三方API获取天气数据(如{"weather": "rain", "temp": 22})。
4. 模型生成最终响应
“上海明天有雨,气温22℃。”
扩展阅读
- OpenAI Function Calling 官方文档
- 大模型函数调用原理与实战(CSDN)
- LangChain 函数调用实现
通过流程图和分步解释,可以更清晰地理解大模型如何通过函数调用与外部系统协同工作。
Function Calling Python代码示例(以调用OpenAI模型为例)
代码
以下是使用OpenAI Function Calling的Python代码示例,实现天气查询功能:
import openai
import json# 配置OpenAI API密钥
openai.api_key = "sk-your-api-key-here"def get_current_weather(location, unit="celsius"):"""模拟天气API调用(实际应替换为真实API调用)"""weather_data = {"location": location,"temperature": "25","unit": unit,"forecast": ["sunny", "windy"],}return json.dumps(weather_data)def run_conversation():# 第一步:发送用户查询和函数定义messages = [{"role": "user", "content": "北京今天天气怎么样?"}]functions = [{"name": "get_current_weather","description": "获取指定地区的当前天气","parameters": {"type": "object","properties": {"location": {"type": "string","description": "城市或地区名称,例如:北京",},"unit": {"type": "string", "enum": ["celsius", "fahrenheit"],"description": "温度单位"}},"required": ["location"],},}]# 初始API调用response = openai.ChatCompletion.create(model="gpt-3.5-turbo-0613",messages=messages,functions=functions,function_call="auto",)response_message = response.choices[0].message# 第二步:处理函数调用if hasattr(response_message, "function_call"):# 解析函数调用信息function_name = response_message["function_call"]["name"]function_args = json.loads(response_message["function_call"]["arguments"])# 调用对应函数if function_name == "get_current_weather":function_response = get_current_weather(location=function_args.get("location"),unit=function_args.get("unit", "celsius"))# 第三步:发送函数结果给模型messages.append(response_message) # 添加助理的消息messages.append({"role": "function","name": function_name,"content": function_response,})# 获取最终响应final_response = openai.ChatCompletion.create(model="gpt-3.5-turbo-0613",messages=messages,)return final_response.choices[0].message['content']else:return response_message['content']# 运行对话
print(run_conversation())
代码解析:
1. 函数定义
get_current_weather:模拟天气API调用(实际开发需替换为真实API)- 参数验证逻辑可在此函数中添加
2. API交互流程
用户输入 → 模型判断需要函数调用 → 生成函数调用请求 →
执行函数 → 返回结果给模型 → 生成最终响应
3. 关键参数说明
functions:声明模型可用的函数列表function_call:设置为"auto"让模型自主决策
执行示例输出:
北京今天天气晴朗,当前气温为25摄氏度,风力较大。请注意防晒。
注意事项:
1. 需替换为有效的OpenAI API密钥(sk-your-api-key-here)
2. GPT-3.5-turbo版本需 >= 0613 才能支持函数调用
3. 实际生产环境需要:
- 添加错误处理(网络错误/参数错误)
- 实现真正的天气API调用
- 设置合理的temperature参数控制输出稳定性
如果需要DeepSeek版本的实现,请关注其API文档的更新,当前(截至2024年6月)DeepSeek R1尚未开放Function Calling支持。
相关文章:
Deepseek Api Function Calling解析(tools、tool_calls)Deepseek函数调用流程图、Python代码示例
文章目录 Function Calling介绍**核心原理**1. **动态扩展模型能力**2. **JSON结构化交互** **实现步骤**(以支持Function Calling的模型为例)1. **定义可用函数**2. **模型匹配与生成**3. **开发者执行函数**4. **结果反馈给模型** **DeepSeek R1的当前…...
现代未来派品牌海报设计液体装饰英文字体安装包 Booster – Liquid Font
CS Booster – 具有动态流的液体显示字体 具有液体美感的现代显示字体 CS Booster 是一种未来主义的显示字体,采用流畅和有机的形式设计,赋予其流畅、灵活和不断移动的外观。独特的液体灵感形状和非刚性边缘使这款字体脱颖而出,提供一种既俏…...
python流水线自动化项目教程
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言1. 项目环境准备Python安装选择Python开发环境安装必要库 2. 数据获取与理解4. 模型训练流水线6. 模型保存7. 模型部署(简单 Web 服务)8…...
(十 四)趣学设计模式 之 策略模式!
目录 一、 啥是策略模式?二、 为什么要用策略模式?三、 策略模式的实现方式四、 策略模式的优缺点五、 策略模式的应用场景六、 总结 🌟我的其他文章也讲解的比较有趣😁,如果喜欢博主的讲解方式,可以多多支…...
EMO模型详解及代码复现
EMO定义 EMO(Efficient Mobile Networks)是一种 面向移动端的轻量化网络模型 ,旨在 在参数、FLOPs和性能之间实现平衡 ,特别适用于 密集预测任务 。EMO的设计理念源于对CNN和Transformer架构的深入理解,通过整合两者的优势,实现了高效的模型性能。 EMO的核心是 反向残差…...
kkfileview部署
kkfileview部署 链接: 官方文档 链接: gitee 链接: github 首先打开官网如下: OK,我们从官方文档的教程中看到,部署步骤如下: 是不是很简单,没错,于是我们按照步骤从码云上下载,然后解压,然…...
leetcode_34 在排序数组中查找元素的第一个和最后一个位置
1. 题意 给定一个非递减的数组,找出给定元素的开始位置和 结束位置。 2. 题解 题目要求复杂度为 log ( n ) \log (n) log(n), 因此不能用双指针了。 这个题目练习二分挺好的。 2.1 双指针 还是把双指针的写下来吧。 class Solution { public:vector<i…...
网络编程——UDP
UDP编程使用套接字(Socket)进行通信。下面是基于UDP协议进行网络编程的基本步骤。 1. 创建套接字 首先,客户端和服务器都需要通过 socket() 系统调用创建一个UDP套接字。 2. 配置地址和端口 UDP是无连接的,因此你不需要像TCP一…...
文件描述符(File Descriptor)
一、介绍 内核(kernel)利用文件描述符(file descriptor)来访问文件。文件描述符是非负整数。打开现存文件或新建文件时,内核会返回一个文件描述符。读写文件也需要使用文件描述符来指定待读写的文件。 二、功能 文件…...
【3天快速入门WPF】12-MVVM
目录 1. 什么是MVVM2. 实现简单MVVM2.1. Part 12.2. Part 21. 什么是MVVM MVVM 是 Model-View-ViewModel 的缩写,是一种用于构建用户界面的设计模式,是一种简化用户界面的事件驱动编程方式。 MVVM 的目标是实现用户界面和业务逻辑之间的彻底分离,以便更好地管理和维护应用…...
钉钉MAKE AI生态大会思考
1. 核心特性 1.1 底层模型开放 除原有模型通义千问外,新接入猎户星空、智普、MinMax、月之暗面、百川智能、零一万物。 1.2 AI搜索 AI搜索贯通企业和个人散落在各地的知识(聊天记录、文档、会议、日程、知识库、项目等),通过大模型对知识逻辑化,直接生成搜索的答案,并…...
[操作系统] 文件的软链接和硬链接
文章目录 引言硬链接(Hard Link)什么是硬链接?硬链接的特性硬链接的用途 软链接(Symbolic Link)什么是软链接?软链接的特性软链接的用途 软硬链接对比文件的时间戳实际应用示例使用硬链接节省备份空间用软链…...
【TI毫米波雷达】DCA1000的ADC原始数据C语言解析及FMCW的Python解析2D-FFT图像
【TI毫米波雷达】DCA1000的ADC原始数据C语言解析及FMCW的Python解析2D-FFT图像 文章目录 ADC原始数据C语言解析Python的2D-FFT图像附录:结构框架雷达基本原理叙述雷达天线排列位置芯片框架Demo工程功能CCS工程导入工程叙述Software TasksData PathOutput informati…...
基于ai技术的视频生成工具
一、通用型AI视频生成工具 腾讯智影 特点:支持数字人播报、文字转视频,提供免费模板和素材库,登录即送5分钟免费时长,每日签到可兑换额外额度。 限制:免费版分辨率较低,部分高级功能需付费。 LunaAI.vid…...
Python Cookbook-2.29 带版本号的文件名
任务 如果你想在改写某文件之前对其做个备份,可以在老文件的名字后面根据惯例加上三个数字的版本号。 解决方案 我们需要编写一个函数来完成备份工作: def VersionFile(file_spec, vtypecopy):import os,shutilif os.path.isfile(file_spec):#检查vtype参数if v…...
阿里云轻量级服务器通过宝塔安装PgVector要点
设置环境变量: export PG_HOME/www/server/pgsql export LD_LIBRARY_PATH$LD_LIBRARY_PATH:/www/server/pgsql/lib export PG_CONFIG/www/server/pgsql/bin/pg_config export PGDATA/www/server/pgsql/data PATH$PATH:$HOME/.local/bin:$HOME/bin:$PG_HOME/bin ali…...
LeeCode题库第三十九题
39.组合总和 项目场景: 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。 candidates 中的 同…...
Android Activity栈关系解析
在 Android 系统中,这些类共同构成了 Activity 任务栈管理的核心架构。它们的关系可以类比为一栋大楼的管理体系,每个类负责不同层级的任务。以下是它们的详细解释和实际场景示例: 1. ActivityRecord(活动记录) 是什么…...
B/B+树与mysql索引
数据结构操作网站:https://www.cs.usfca.edu/~galles/visualization/Algorithms.html B树 算法平均最差空间O(n)O(n)搜索O(log n)O(log n)插入O(log n)O(log n)删除O(log n)O(log n) B树 算法平均最差空间O(n)O(n)搜索O(log n)O(log n)插入O(log n)O(log n)删除O(…...
1.2.3 使用Spring Initializr方式构建Spring Boot项目
本实战概述介绍了如何使用Spring Initializr创建Spring Boot项目,并进行基本配置。首先,通过Spring Initializr生成项目骨架,然后创建控制器HelloController,定义处理GET请求的方法hello,返回HTML字符串。接着…...
【踩坑随笔】`npm list axios echarts`查看npm依赖包报错
npm list axios echarts查看npm依赖包出现以下报错,原因就是包的版本匹配问题,按照提示降axios版本或者自己升找合适的got版本,我这里是选择了降版本。本文记录仅做解决思路参考不一定适配大家的实际情况。 weed-detection-system1.0.0 E:\P…...
十四届蓝桥杯JAVA-b组-合并石子
点我写题 思路:区间dp和缝合dp板子题,先用个dp[i][j][k]表示考虑区间[i,j]合并成颜色k的最小代价,然后用min[i][j]存一下[i,j]区间合并的最小代价,即min(dp[i][j][0-2]),has[i][j]表示区间[i,j]是否能合并,…...
芯片算力的概念
根据ISO 26262标准要求,要获得ASIL-D(汽车安全完整性等级最高级)认证,企业需满足以下核心条件: 一、体系与流程要求 功能安全管理体系认证 必须建立符合ISO 26262标准的全生命周期安全管理体系,涵盖需求分…...
leetcode日记(74)合并两个有序数组
还是很简单很基础的。一开始在思考后面补的全是0怎么知道0是原本数组的还是要替换成nums2的元素的,后来发现其实一开始可以直接剔除nums1后的n个元素…… 使用双指针: class Solution { public:void merge(vector<int>& nums1, int m, vecto…...
Git 安装与配置一站式指南
🏝️专栏:计算机操作系统 🌅主页:猫咪-9527-CSDN博客 “欲穷千里目,更上一层楼。会当凌绝顶,一览众山小。” 目录 一、环境检查与旧版本处理 1. 检查 Git 安装状态 2. 卸载旧版本(可选&…...
【数据结构】堆与二叉树
一、树的概念 1.1 什么是树? 树是一种非线性的数据结构,其由 n 个 ( n > 0 ) 有限节点所组成的一个有层次关系的集合。之所以称其为树,是因为其逻辑结构看起来像是一颗倒挂的树。 在树中,有一个特殊的节点称为根节点…...
游戏引擎学习第128天
开始 然而,我们仍然有一些工作要做,渲染部分并没有完全完成。虽然现在已经能够运行游戏,而且帧率已经可以接受,但仍然有一些东西需要进一步完善。正在使用调试构建编译版本,虽然调试版本的性能不如优化版本࿰…...
我们应该如何优化UI(基于UGUI)
这是一道面试题,下面,我们来详细分析这个问题。 目录 1. 减少 Draw Call 合理设置图集 避免材质和 Shader 的频繁切换 减少 UI 元素的重叠 2. 优化UI布局 3. 优化UI元素的渲染 4.优化UI动画 5. 优化 UI 事件处理 6. 运行时优化 1. 减少 Draw C…...
自然语言处理:词频-逆文档频率
介绍 大家好,博主又来给大家分享知识了。本来博主计划完成稠密向量表示的内容分享后,就开启自然语言处理中文本表示的讲解。可在整理分享资料的时候,博主发现还有个知识点,必须得单独拎出来好好说道说道。 这就是TF-IDF…...
快速在本地运行SpringBoot项目的流程介绍
目录 前言 一、环境配置 1.1Java环境 1.2Maven环境 1.3IntelliJ IDEA安装 1.4MySql安装 二、项目导入与启动的过程 2.1Maven镜像和本地仓库 2.1.2镜像配置 2.1.3配置本地仓库 2.2导入项目与启动 2.2.1加载Maven设置 2.2.2配置jdk与java版本 2.2.3创建数据库 2.2…...
