我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python ChatGPT API 新增的函数调用功能演示

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python ChatGPT API 新增的函数调用功能演示

文章目录

🍉 CSDN 叶庭云https://yetingyun.blog.csdn.net/


OpenAI 重磅更新,API 添加函数调用能力,能处理更长上下文,价格又有所降低 …

在这里插入图片描述

知乎讨论:https://www.zhihu.com/question/606520916

这次更新的主角,在我看来毫无疑问是函数调用功能,过去要么依靠 Prompt Engineering 提供的信息,要么就需要使用 LangChain 这样的框架实现。现在官方提供了更稳定的方式与本地代码或者第三方 API,可以无缝将 GPT 的语言理解和解析能力整合入本地工作流中。

稍微再总结一下此次更新的主要内容:

  • 在 Chat Completions API 中提供函数调用能力
  • 更新更易控制的 gpt-4 和 gpt-3.5-turbo 版本
  • 新的 16k 上下文版本 gpt-3.5-turbo (与标准的 4k 版本相比很香)
  • embeddings 嵌入模型价格降低了75%
  • gpt-3.5-turbo 输入 token 价格降低 25%
  • 宣布 gpt-3.5-turbo-0301 和 gpt-4-0314 型号的弃用计划
  • 以上所有的模型都会遵循 0301 介绍的数据隐私规则:所有使用 API 的数据不会用于训练。

新增的函数调用功能的解释:我理解的是,ChatGPT 的 API 现在可以根据你给出的函数描述,理解你的函数输入输出格式要求,把用户的自然语言转化成本地 / {/} /第三方函数的输入参数。然后开发者需要拿着这个参数自己执行一下,得到一个结果再还给 ChatGPT,ChatGPT 最后会根据这个结果回答用户的问题,输出最终内容。

函数调用的官方示例:

在这里插入图片描述

自从 ChatGPT 插件的 alpha 版本发布以来,我们已经学到了很多关于如何安全地使工具和语言模型协同工作的知识。然而,仍有一些未解决的研究问题。例如,一个概念验证漏洞说明了不受信任的数据可以指示模型执行意外操作。我们正在努力减轻这些和其他风险。开发人员可以通过只消费来自可信工具的信息并在执行具有现实影响(例如发送电子邮件、在线发布或购买)的操作之前包含用户确认步骤来保护其应用程序。

下面我们自己写个实例来实践和感受一下,以查询国内城市今天的天气情况为例:

API 使用的是国家气象局的接口,完全免费的:http://t.weather.sojson.com/api/weather/city/101010100

城市到代码的转化是参考这篇博客:https://blog.csdn.net/qq_42855293/article/details/103864266。把他分享的内容粘贴到 Excel 并保存,方便后续使用。

完整代码如下:

import astimport jsonimport requestsimport pandas as pdimport openaifrom pprint import pprintdef get_current_weather(city):    code = city2code[city]    resp = requests.get(f"http://t.weather.sojson.com/api/weather/city/{code}")    data = resp.json()["data"]        date_info = data["forecast"][0]["ymd"] + " - " + data["forecast"][0]["week"]    wendu = data["wendu"]    shidu = data["shidu"]    pm25 = data["pm25"]    pm10 = data["pm10"]    tianqi_type = data["forecast"][0]["type"]    air_quality = data["quality"]    zhuyi = data["forecast"][0]["notice"]    low = data["forecast"][0]["low"]    high = data["forecast"][0]["high"]    aqi = data["forecast"][0]["aqi"]        return {"时间": date_info, "温度": wendu, "最高温度": high, "最低温度": low,            "湿度": shidu, "天气类型": tianqi_type, "空气质量": air_quality,            "注意": zhuyi, "PM2.5": pm25, "PM10": pm10, "AQI": aqi}openai.api_key = "请注意:替换为你的 API KEY"      # 配置自己的 API Keyopenai.api_base = 'https://你的反向代理域名-如果有的话/v1'   # 请注意后面 /v1 不可省略# 如果没有自己的反向代理   你还需要设置你挂的魔法# proxies = {'http': "http://127.0.0.1:7890", 'https': "https://127.0.0.1:7890"}# openai.proxy = proxiesdf = pd.read_excel("./citycode/city.xlsx")city2code = {k: v for k, v in zip(df["区域"], df["区域编号"])}             prompt = "今天北京的天气怎么样?"print("Prompt:")print(prompt)my_function = [{"name": "get_current_weather",                "description": "获取给定位置的当前天气",                "parameters": {"type": "object",   "properties": {"location": {"type": "string", "description": "城市,例如北京"},                  "unit": {"type": "string", "enum": ["celsius", "fahrenheit"]}                },   "required": ["location"]   }                }               ]# LLMs as Controller# 据你给出的函数描述,理解你的函数输入输出格式要求,把用户的自然语言转化成本地${/}$第三方函数的输入参数和确定调用那个函数。然后开发者需要拿着这个参数自己执行一下,得到一个结果再还给 ChatGPT,ChatGPT 最后会根据这个结果回答用户的问题,输出最终内容。resp1 = openai.ChatCompletion.create(model="gpt-3.5-turbo-0613",         messages=[{"role": "user", "content": prompt}],         temperature=0.0,         max_tokens=3072,         functions=my_function,         )params = ast.literal_eval(resp1.choices[0].message.function_call["arguments"])call_fuction = resp1.choices[0].message.function_call["name"]if call_fuction == "get_current_weather":    weather_data = get_current_weather(params["location"])resp2 = openai.ChatCompletion.create(model="gpt-3.5-turbo-0613",         messages=[{"role": "user", "content": prompt},                   {"role": "assistant", "content": "null", "function_call": resp1.choices[0].message.function_call},                   {"role": "function", "name": "call_fuction", "content": str(weather_data)}                   ],            temperature=0.0,            max_tokens=3072,            functions=my_function,         )print("-" * 99)print(resp2.choices[0].message.content)

这段代码主要实现了以下功能:

  • 引入了需要用到的库,包括 ast、json、requests、pandas、openai,以及 pprint 模块的 pprint 函数。
  • 定义了 get_current_weather 函数,该函数接受一个参数 city,并返回一个字典对象,包含当地的天气信息。
  • 配置了 OpenAI 的 API Key 和 API Base。
  • 从 Excel 文件中读取了城市数据,并将城市和编号映射为一个字典 city2code
  • 定义了一个字符串变量 prompt,表示用户的对话询问。
  • 定义了一个名为 my_function 的列表,其中包含一个名为 get_current_weather 的字典对象,描述了返回值的数据结构和输入参数的类型等信息。
  • 调用 OpenAI 的 ChatCompletion.create 函数,传入一些参数,返回一个 OpenAI 对话的响应结果 resp1,其中包含对话的输出及调用的函数名称和参数。
  • 解析 resp1 响应结果中的参数信息,判断调用的函数名称是否为 get_current_weather,如果是则调用该函数获取当地天气信息。
  • 再次调用 OpenAI 的 ChatCompletion.create 函数,不同的是带入了调用的函数名称和返回的天气信息,返回 OpenAI 对话的响应结果 resp2
  • 打印出 resp2 响应结果中的内容,即机器人回复的信息。

结果如下示意:

在这里插入图片描述


所谓的「函数调用」功能,并不是说 GPT API 会帮你执行某些第三方的功能或接口,而是说,通过提交给 GPT 函数的名称、描述和输入参数,它能够在语义中理解应该调用哪一个函数去满足用户功能,如果此时的语境中缺少函数必需的参数,GPT 会进一步与用户对话要求补全信息;当满足函数调用条件时,GPT 会返回一个结果,告诉开发者此时需要调用的函数名和相应的参数;然后开发者自行执行本地/第三方函数,并将结果再次输入给 GPT API,GPT API 则会根据返回值告诉用户结果。

我们必须先理解了这个过程,至于具体的代码很容易实现。从上面这段话抽取一下工作流程

  • GPT 根据开发者给出的函数描述,理解函数功能和输入参数要求;
  • GPT 理解用户的自然语言,决定此时是否需要调用某函数,并从对话中抽取信息转化成本地/第三方函数的输入参数;
  • 如果此时缺少必要信息,GPT 会继续与用户对话询问补全;
  • 开发者拿到函数名和参数后,自己本地执行,得到一个结果再还给GPT;
  • GPT 最后会根据这个结果回答用户的问题。

示意图如下所示(图片来自知乎@段小草):
在这里插入图片描述

GPT API 是介于开发者和用户直接的「翻译官」,干两件事:

  • 把「用户」的自然语言 → 合适的函数功能和参数 → 返回给「开发者」
  • 把「开发者」接口返回的数据(一般是 JSON)→ 自然语言 → 返回给「用户」


📚️ 参考链接:

来源地址:https://blog.csdn.net/fyfugoyfa/article/details/131216745

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python ChatGPT API 新增的函数调用功能演示

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

ChatGPT重磅更新!新增API函数调用,上下文飙升4倍,价格打“骨折”

在这次更新中,OpenAI 重点介绍了函数调用:开发者不用手动选择函数,只需要模型描述需要用到的函数,何时调用哪个函数都是模型根据提示词自己决定的,与GPT-4调用插件的机制一样。
OpenAIChatGPT2024-11-30

Python函数介绍:len函数的功能和使用示例

Python函数介绍:len函数的功能和使用示例在Python编程中,len()是一个常用的内置函数,它用来返回传入对象的长度或元素个数。这个函数可以用于字符串、列表、元组、字典和集合等不同类型的数据结构。len()函数非常简单易用,本文将
Python函数介绍:len函数的功能和使用示例
2023-11-03

Python函数介绍:float函数的功能和使用示例

Python函数介绍:float函数的功能和使用示例Python是一种广泛应用于多个领域的高级编程语言,它提供了丰富的内置函数,以便开发者能够更加方便地开发和处理数据。其中之一就是float函数,它用于将字符串或者数字转换为浮点数类型。在本
Python函数介绍:float函数的功能和使用示例
2023-11-03

Python函数介绍:compile函数的功能和使用示例

Python函数介绍:compile函数的功能和使用示例在Python编程中,compile()函数是一个内置函数,它的作用是将字符串形式的Python代码编译为字节码或AST对象。编译之后,可以通过执行该字节码或AST对象来实现代码的运行
Python函数介绍:compile函数的功能和使用示例
2023-11-04

Python函数介绍:locals函数的功能和使用示例

Python函数介绍:locals函数的功能和使用示例Python是一种广泛应用于各个领域的编程语言,其强大的函数特性帮助程序员有效地组织和管理代码。在Python中,有许多内置的函数可以帮助我们更好地完成编程任务。其中一个非常有用的函数是
Python函数介绍:locals函数的功能和使用示例
2023-11-03

Python函数介绍:print函数的功能和使用示例

Python是一种流行的编程语言,旨在使计算机编程变得更加简单和易于理解。在Python中,用print函数向控制台输出文本是一个基本的任务。在本文中,我们将介绍Python的print函数,探索其功能和使用示例,并提供代码示例来帮助您更好
Python函数介绍:print函数的功能和使用示例
2023-11-03

Python函数介绍:globals函数的功能和使用示例

Python函数介绍:globals函数的功能和使用示例Python是一种功能强大的编程语言,提供了许多内置函数,其中globals()函数就是其中之一。本文将介绍globals()函数的功能和使用示例,并附带具体的代码示例。一、globa
Python函数介绍:globals函数的功能和使用示例
2023-11-04

Python函数介绍:vars函数的功能和使用示例

Python函数介绍:vars函数的功能和使用示例在Python编程中,vars()是一个非常有用的内置函数,它返回一个对象的属性和值的字典。这个函数可以用于获取一个对象的所有属性和对应的值,包括变量、函数、类以及模块等。vars()函数可
Python函数介绍:vars函数的功能和使用示例
2023-11-04

Python函数介绍:any函数的功能和使用示例

Python函数介绍:any函数的功能和使用示例概述:在Python中,any()是一个内置函数,它用于判断一个可迭代对象中的元素是否有至少有一个为真。如果迭代对象中的任何一个元素为真,则返回True;否则,返回False。使用语法:any
Python函数介绍:any函数的功能和使用示例
2023-11-04

Python函数介绍:range函数的功能和使用示例

Python函数介绍:range函数的功能和使用示例Python是一种优美、易读、易写的面向对象编程语言,拥有丰富而强大的函数库。其中,range()函数是Python内置函数之一,常用于生成一系列数字,常用形式为:range(start,
Python函数介绍:range函数的功能和使用示例
2023-11-03

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录