当前位置: 首页 > article >正文

DeepSeek实现FunctionCalling调用API查询天气

什么是FunctionCalling

Function Calling(函数调用)是大型语言模型(如 OpenAI 的 GPT 系列)提供的一种能力,允许模型在生成文本的过程中调用外部函数或工具,以完成更复杂的任务。通过 Function Calling,模型可以将自然语言请求转换为结构化的函数调用,从而与外部系统、API 或工具进行交互。

想象你有一个智能助手(比如 GPT),它可以回答你的问题,但它本身无法直接执行某些操作,比如查询天气、发送邮件或查询数据库。这时,Function Calling 就像给这个助手提供了一组工具(函数),让它可以根据你的需求调用这些工具来完成具体任务。例如:

  • 你问助手:“今天北京的天气怎么样?”

  • 助手不会直接回答天气,而是调用一个外部的“天气查询函数”,获取天气数据后,再生成回答。

Function Calling工作流程

Function Calling指的是大模型在生成回复的过程中可以调用外部函数来处理它无法解决的问题,的实现原理如下

  1. 要使用 Function Calling我们需要先定义函数:比如预先定义一组函数(例如查询天气、发送邮件、查询数据库等),并描述这些函数的功能和输入参数。

  2. 当用户提出请求时,模型会判断是否需要调用函数。如果需要,模型会生成一个结构化的函数调用请求

  3. 执行函数:开发者编写的代码接收到函数调用请求后,执行对应的函数,模型根据函数返回的结果,生成自然语言回答给用户

在这里插入图片描述

实现天气查询助手

以下是一个简单的 Function Calling 示例,假设我们需要实现一个天气查询助手,首先找到一个天气查询的平台,我这里使用:https://www.weatherapi.com/my/,注册账号后得到一个APIkey,如下
在这里插入图片描述

然后我们需要准备一个调用天气API的函数,python 代码片段如下:(后面会有完整代码)

# 使用 WeatherAPI 的天气查询函数
def get_weather(city: str):# 使用 WeatherAPI 的 API 来获取天气信息api_key = "你的天气的APIkEY"  # 替换为你自己的 WeatherAPI APIKEYbase_url = "http://api.weatherapi.com/v1/current.json"params = {'key': api_key,'q': 'Beijing','aqi': 'no'  # 不需要空气质量数据}# 调用天气 APIresponse = requests.get(base_url, params=params)if response.status_code == 200:data = response.json()#拿到天气和温度weather = data['current']['condition']['text']temperature = data['current']['temp_c']return f"城市 {city} 天气是 {weather} 温度为 {temperature}°C."else:return f"无法检索 {city} 的天气信息 ."

然后我们定义 tools ,大模型通过tools来调用天气函数:(后面会有完整代码)

# 定义 OpenAI 的 function calling tools
tools = [{'type': 'function','function': {'name': 'get_weather','description': 'Get the current weather for a given city.','parameters': {'type': 'object','properties': {'city': {'type': 'string','description': 'The name of the city to query weather for.',},},'required': ['city'],},}}
]

接着我们调用大模型,并指定 tools 属性,如下

def function_call_playground(prompt):messages = [{'role': 'user', 'content': prompt}]# 发送请求到 OpenAI APIresponse = client.chat.completions.create(model="deepseek-ai/DeepSeek-V2.5",messages=messages,temperature=0.01,top_p=0.95,stream=False,# 默认值,由 GPT 自主决定返回 function call 还是返回文字回复。也可以强制要求必须调用指定的函数,详见官方文档tool_choice="auto",tools=tools #指定 function calling tools)

完整代码如下:

import requests
from openai import OpenAI
#这里使用的是硅基流动的API接口
client = OpenAI(api_key="硅基流动的apikey", # 从https://cloud.siliconflow.cn/account/ak获取base_url="https://api.siliconflow.cn/v1"
)# 使用 WeatherAPI 的天气查询函数
def get_weather(city: str):# 使用 WeatherAPI 的 API 来获取天气信息api_key = "天气的APIkey"  # 替换为你自己的 WeatherAPI APIKEYbase_url = "http://api.weatherapi.com/v1/current.json"params = {'key': api_key,'q': 'Beijing','aqi': 'no'  # 不需要空气质量数据}# 调用天气 APIresponse = requests.get(base_url, params=params)if response.status_code == 200:data = response.json()#拿到天气和温度weather = data['current']['condition']['text']temperature = data['current']['temp_c']return f"城市 {city} 天气是 {weather} 温度为 {temperature}°C."else:return f"无法检索 {city} 的天气信息 ."# 定义 OpenAI 的 function calling tools
tools = [{'type': 'function','function': {'name': 'get_weather','description': 'Get the current weather for a given city.','parameters': {'type': 'object','properties': {'city': {'type': 'string','description': 'The name of the city to query weather for.',},},'required': ['city'],},}}
]# 发送请求并处理 function calling
def function_call_playground(prompt):messages = [{'role': 'user', 'content': prompt}]# 发送请求到 OpenAI APIresponse = client.chat.completions.create(model="deepseek-ai/DeepSeek-V2.5",messages=messages,temperature=0.01,top_p=0.95,stream=False,# 默认值,由 GPT 自主决定返回 function call 还是返回文字回复。也可以强制要求必须调用指定的函数,详见官方文档tool_choice="auto",tools=tools)# 处理 API 返回的工具调用请求func1_name = response.choices[0].message.tool_calls[0].function.namefunc1_args = response.choices[0].message.tool_calls[0].function.argumentsfunc1_out = eval(f'{func1_name}(**{func1_args})')# 将结果添加到对话中并返回messages.append({'role': 'tool','content': f'{func1_out}','tool_call_id': response.choices[0].message.tool_calls[0].id})return messages# 示例使用
prompt = "how is the weather today in chegndu?"print(function_call_playground(prompt))

执行效果如下:
在这里插入图片描述

实现附近地图搜索

通过FunctionCalling调用百度地图进行附近搜索,和上面的思路一样,下面贴一下代码

import requests
from openai import OpenAIclient = OpenAI(api_key="你的key", # 从https://cloud.siliconflow.cn/account/ak获取base_url="https://api.siliconflow.cn/v1"
)# 使用 百度地图查询
def doQuery(keyword: str):api_key = "你的百度地图的key"  # 替换为你自己的APIKEYbase_url = "https://api.map.baidu.com/place/v2/search"params = {'ak': api_key,'query': keyword,'radius': 2000,'output': "json",'location': '30.538031,104.061420'  # 以成都为中心点}# 调用APIresponse = requests.get(base_url, params=params)if response.status_code == 200:data = response.json()return dataelse:return f"无法检索 {keyword} 信息."# 定义 OpenAI 的 function calling tools
tools = [{'type': 'function','function': {'name': 'doQuery','description': 'Search for nearby restaurants based on the given keyword','parameters': {'type': 'object','properties': {'keyword': {'type': 'string','description': 'The name of the keyword to query for near.',},},'required': ['keyword'],},}}
]# 发送请求并处理 function calling
def function_call_playground(prompt):messages = [{'role': 'user', 'content': prompt}]# 发送请求到 OpenAI APIresponse = client.chat.completions.create(model="deepseek-ai/DeepSeek-V2.5",messages=messages,temperature=0.01,top_p=0.95,stream=False,# 默认值,由 GPT 自主决定返回 function call 还是返回文字回复。也可以强制要求必须调用指定的函数,详见官方文档tool_choice="auto",tools=tools)# 处理 API 返回的工具调用请求func1_name = response.choices[0].message.tool_calls[0].function.namefunc1_args = response.choices[0].message.tool_calls[0].function.argumentsfunc1_out = eval(f'{func1_name}(**{func1_args})')# 将结果添加到对话中并返回messages.append({'role': 'tool','content': f'{func1_out}','tool_call_id': response.choices[0].message.tool_calls[0].id})return messages# 示例使用
prompt = "附近有哪些:饭店"print(function_call_playground(prompt))

文章就写到这,喜欢请给个好评!!!

相关文章:

DeepSeek实现FunctionCalling调用API查询天气

什么是FunctionCalling Function Calling(函数调用)是大型语言模型(如 OpenAI 的 GPT 系列)提供的一种能力,允许模型在生成文本的过程中调用外部函数或工具,以完成更复杂的任务。通过 Function Calling&am…...

从 Spring Boot 2 升级到 Spring Boot 3 的终极指南

一、升级前的核心准备 1. JDK 版本升级 Spring Boot 3 强制要求 Java 17 及以上版本。若当前项目使用 Java 8 或 11,需按以下步骤操作: 安装 JDK 17:从 Oracle 或 OpenJDK 官网下载,配置环境变量(如 JAVA_HOME&…...

C#设计模式深度解析:经典实现与现代演进 ——基于《设计模式》的.NET技术实践

一、设计模式与C#语言特性融合 C#凭借其面向对象特性、泛型、委托/事件、LINQ等能力&#xff0c;为设计模式提供了更优雅的实现方式。以下通过典型模式展现其技术融合&#xff1a; 1. 工厂方法模式 泛型约束 public interface IProduct<T> where T : new() {void O…...

原子性(Atomicity)和一致性(Consistency)的区别?

原子性&#xff08;Atomicity&#xff09;和一致性&#xff08;Consistency&#xff09;是数据库事务ACID特性中的两个核心概念&#xff0c;虽然它们密切相关&#xff0c;但解决的问题和侧重点完全不同。原子性关注事务的操作完整性&#xff0c;而一致性关注数据的逻辑正确性。…...

windows设置暂停更新时长

windows设置暂停更新时长 win11与win10修改注册表操作一致 &#xff0c;系统界面不同 1.打开注册表 2.在以下路径 \HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings 右键新建 DWORD 32位值&#xff0c;名称为FlightSettingsMaxPauseDays 根据需求填写数…...

【Kimi】自动生成PPT-并支持下载和在线编辑--全部免费

【Kimi】免费生成PPT并免费下载 用了好几个大模型&#xff0c;有些能生成PPT内容&#xff1b; 有些能生成PPT&#xff0c;但下载需要付费&#xff1b; 目前只有Kimi生成的PPT&#xff0c;能选择模板、能在线编辑、能下载&#xff0c;关键全部免费&#xff01; 一、用kimi生成PP…...

一款在手机上制作电子表格

今天给大家分享一款在手机上制作电子表格的&#xff0c;免费好用的Exce1表格软件&#xff0c;让工作变得更加简单。 1 软件介绍 Exce1是一款手机制作表格的办公软件&#xff0c;您可以使用手机exce1在线制作表格、工资表、编辑xlsx和xls表格文件等&#xff0c;还可以学习使用…...

【实战 ES】实战 Elasticsearch:快速上手与深度实践-1.3.1单节点安装(Docker与手动部署)

&#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 文章大纲 10分钟快速部署Elasticsearch单节点环境1. 系统环境要求1.1 硬件配置推荐1.2 软件依赖 2. Docker部署方案2.1 部署流程2.2 参数说明2.3 性能优化建议 3. 手动部署方案3.1 安…...

7 天精通 DeepSeek 实操手册

挑战目标 从零基础开始&#xff0c;用 7 天时间&#xff0c;精通 DeepSeek 实操。 对零基础的同学来说&#xff0c;要全部完成这个挑战并不容易。因此&#xff0c;我们提供了每天的学习目标和实操任务&#xff0c;并提供三大锦囊助你一臂之力&#xff1a; 针对常见问题的解决…...

过滤器 二、过滤器详解

过滤器生命周期&#xff1a; init(FilterConfig)&#xff1a;在服务器启动时会创建Filter实例&#xff0c;并且每个类型的Filter只创建一个实例&#xff0c;从此不再创建&#xff01;在创建完Filter实例后&#xff0c;会马上调用init()方法完成初始化工作&#xff0c;这个方法…...

【Mac电脑本地部署Deepseek-r1:详细教程与Openwebui配置指南】

文章目录 前言电脑配置&#xff1a;安装的Deepseek版本&#xff1a;使用的UI框架&#xff1a;体验效果展示&#xff1a;本地部署体验总结 部署过程Ollama部署拉取模型运行模型Openwebui部署运行Ollama服务在Openwebui中配置ollama的服务 后话 前言 deepseek最近火的一塌糊涂&a…...

网络安全学习中,web渗透的测试流程是怎样的?

渗透测试是什么&#xff1f;网络安全学习中&#xff0c;web渗透的测试流程是怎样的&#xff1f; 渗透测试就是利用我们所掌握的渗透知识&#xff0c;对网站进行一步一步的渗透&#xff0c;发现其中存在的漏洞和隐藏的风险&#xff0c;然后撰写一篇测试报告&#xff0c;提供给我…...

将VsCode变得顺手好用(1

目录 设置中文 配置调试功能 提效和增强相关插件 主题和图标相关插件 创建js文件 设置中文 打开【拓展】 输入【Chinese】 下载完成后重启Vs即可变为中文 配置调试功能 在随便一个位置新建一个文件夹&#xff0c;用于放置调试文件以及你未来写的代码&#xff0c;随便命名但…...

【MySQL篇】表的操作

1&#xff0c;创建表 语法&#xff1a; create table ( field1 datatype, field2 datatype, field3 datatype )charset 字符集 collate 校验规则 engine 存储引擎; 说明&#xff1a; field表示列名datatype表示列的类型charset字符集&#xff0c;如果没有指明&#xff0c;则…...

第6_7章_管理权限评估和测试策略

管理权限 权限将受保护的对象与必须评估以决定是否应授予访问权限的策略相关联。 在创建要保护的资源以及要用于保护这些资源的策略后&#xff0c; 您可以开始管理权限。要管理权限&#xff0c;请在编辑资源服务器时单击 Permissions 选项卡。 可以创建权限来保护两种主要类…...

2025年网校系统源码开发趋势:技术革新的教育培训APP搭建实战

2025年&#xff0c;随着AI、大数据、云计算等技术的深度融合&#xff0c;网校教育系统的源码开发也迎来了新的发展趋势。本文将深入探讨这些趋势&#xff0c;并结合教育培训APP的开发实战&#xff0c;展示如何应对未来的技术挑战。 一、2025年网校教育系统源码的技术趋势 AI驱…...

Linux驱动开发实战(一):LED控制驱动详解

Linux驱动开发野火实战&#xff08;一&#xff09;&#xff1a;LED控制驱动详解 文章目录 Linux驱动开发野火实战&#xff08;一&#xff09;&#xff1a;LED控制驱动详解引言一、基础知识1.1 什么是字符设备驱动1.2 重要的数据结构read 函数write 函数open 函数release 函数 二…...

PowerShell 执行策略:fnm管理软件安装nodejs无法运行npm,错误信息:about_Execution_Policies

通过fnm管理软件安装NodeJS后添加环境变量依然无法执行npm,提示无法加载文件&#xff0c;错误如下&#xff1a; PowerShell 执行策略简介&#xff1a; PowerShell 执行策略是一项安全功能&#xff0c;用于控制 PowerShell 加载配置文件和运行脚本的条件。 此功能有助于防止恶…...

论文阅读笔记:Deep Face Recognition: A Survey

论文阅读笔记&#xff1a;Deep Face Recognition: A Survey 1 介绍2 总览2.1 人脸识别组件2.1.1 人脸处理2.1.2 深度特征提取2.1.3 基于深度特征的人脸对比 3 网络结构和损失函数3.1 判别损失函数的演化3.1.1 基于欧式距离的损失3.1.2 基于角度/余弦边距的损失3.1.3 Softmax损失…...

本地dify绑定notion

需要用到 notion 的“集成”功能。对于个人用户来说&#xff0c;选择使用**内部 internal **集成&#xff0c;公司用户可以考虑使用公开 public 集成。 在下面的 notion 集成网站中申请一个新的集成&#xff1a; Notion – The all-in-one workspace for your notes, tasks, …...

k8s中pod的调度策略之pod的亲和性调度与反亲和性调度 一文搞懂 k8s中创建的pod如何调度?

接上文写的Node亲和性调度https://blog.csdn.net/soso678/article/details/144777397 Pod 间的亲和性和反亲和性&#xff08;Affinity/AntiAffinity&#xff09;调度 Pod 间亲和性与反亲和性使你可以基于已经在节点上运行的 Pod 的标签来约束 Pod 可以调度到的节点&#xff0…...

JSON Schema 入门指南:如何定义和验证 JSON 数据结构

文章目录 一、引言二、什么是 JSON Schema&#xff1f;三、JSON Schema 的基本结构3.1 基本关键字3.2 对象属性3.3 数组元素3.4 字符串约束3.5 数值约束 四、示例&#xff1a;定义一个简单的 JSON Schema五、使用 JSON Schema 进行验证六、实战效果6.1 如何使用 七、总结 一、引…...

借DeepSeek的风思考:未来可通过AI+视觉识别技术,实现足球比赛中的教练决策指挥系统,以此提高中国足球冲出亚洲夺取世界杯冠军

国家如此强大&#xff0c;必须需要提升国足冲向世界&#xff0c;一雪前耻的了。现在我脑洞大开&#xff0c;提出以下思路寄望国家重视。具体思考如下&#xff1a; 通过AI视觉识别技术实现足球比赛中的教练决策指挥系统&#xff0c;有潜力提升中国足球的竞争力。但要实现这一目标…...

DeepSeek今日连开3源!针对优化的并行策略,梁文锋本人参与开发

DeepSeek开源周第四天&#xff0c;直接痛快「1日3连发」&#xff0c;且全都围绕一个主题&#xff1a; 优化并行策略。 DualPipe&#xff1a;一种创新的双向流水线并行算法&#xff0c;能够完全重叠前向和后向计算-通信阶段&#xff0c;并减少“流水线气泡”。它通过对称的微批…...

【含文档+PPT+源码】基于过滤协同算法的旅游推荐管理系统设计与实现

项目介绍 本课程演示的是一款基于过滤协同算法的旅游推荐管理系统设计与实现&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含&#xff1a;项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本套…...

蓝桥杯2024年第十五届省赛真题-传送阵

#include<stdio.h> #include<stdbool.h> #define MAX 100000 int circle[MAX];//记录每个环大小 int parent[MAX];//记录每个传送阵所属的环 int m[MAX]; bool visited[MAX]; int circleIndex0;//当前环的编号 //迭代实现换的查找void findcircle(int start){int c…...

数据存储:一文掌握存储数据到mysql的详细使用

文章目录 一、环境准备1.1 安装MySQL数据库1.2 安装Python MySQL驱动 二、连接到MySQL数据库三、执行基本的CRUD操作3.1 创建&#xff08;Create&#xff09;&#xff1a;插入数据3.2 读取&#xff08;Read&#xff09;&#xff1a;查询数据3.3 更新&#xff08;Update&#xf…...

【华为OD机考】华为OD笔试真题解析(15)--异常的打卡记录

题目描述 考勤记录是分析和考核职工工作时间利用情况的原始依据&#xff0c;也是计算职工工资的原始依据&#xff0c;为了正确地计算职工工资和监督工资基金使用情况&#xff0c;公司决定对员工的手机打卡记录进行异常排查。 如果出现以下两种情况&#xff0c;则认为打卡异常…...

Java实战:使用HttpClient实现图片下载与本地保存

在当今数字化时代&#xff0c;网络资源的获取与处理已成为软件开发中的常见需求。其中&#xff0c;图片作为网络上最常见的资源之一&#xff0c;其下载与保存功能在许多应用场景中都显得尤为重要。无论是社交媒体平台、电商平台&#xff0c;还是个人项目&#xff0c;能够高效地…...

【实战】使用PCA可视化神经网络提取后的特征空间【附源码】

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…...