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 ast
import json
import requests
import pandas as pd
import openai
from 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 Key
openai.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)→ 自然语言 → 返回给「用户」


📚️ 参考链接:

  • OpenAI 重磅更新 变得更强啦 | 包括更多可控的 API 模型、函数调用能力、更长的上下文和更低的价格
  • OpenAI API 0613 更新:GPT-3.5-turbo-16k 模型、函数调用能力、更低的调用价格
  • 知乎 | OpenAI 重磅更新,API 添加新函数调用能力,能处理更长上下文,价格又降了 75%,有哪些影响?
  • Python 实现天气查询功能(外加 Excel 技巧)
  • 免费的天气 API 相关编码(中国城市代码检索)
  • 沈向洋:致 AI 时代的我们 —— 请不要忽视写作的魅力

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/6677.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3 天,入门 TAURI 并开发一个跨平台 ChatGPT 客户端

TAURI 是什么 TAURI 是一个使用 Rust 编写的程序框架,它允许我们使用 Web 技术和 Rust 语言构建跨端应用。它提供了大量特性,例如系统通知、网络请求、全局快捷键、本地文件处理等,它们都可以在前端通过 JavaScript 便捷的调用。 TAURI 应用…

chatgpt|安装及示例|聊天|嵌入|微调|适度|图像|音频|异步|API 错误代码-OpenAI Python库简介

文章目录 OpenAI Python库安装可选依赖项 用法参数微软 Azure 端点微软 Azure 活动目录身份验证命令行界面 示例代码聊天嵌入微调适度 图像生成 (DALLE)音频转录(Whisper)异步API要求信用TIPS:OpenAI API 错误代码API 错误状态码 概述详细解释 OpenAI Python库 项目git地址 O…

Python和ChatGPT在一起了

👉 Python练手必备👉 Python毕设实战项目👉 Python爬虫实战必备👉 30款Python小游戏附源码👉 Python清理微信单向好友神器

chatgpt赋能python:Python支持跨平台软件开发

Python支持跨平台软件开发 作为一种高级编程语言,Python 以其丰富的库和跨平台支持而备受开发人员欢迎。Python 通过将应用程序的可移植性最大化,使得开发人员可以轻松地在不同的操作系统平台上构建和部署软件。 跨平台支持 Python 支持各种不同的操作…

ChatGPT今日正式开放API服务中小企业

开放隐私计算 开放隐私计算 开放隐私计算OpenMPC是国内第一个且影响力最大的隐私计算开放社区。社区秉承开放共享的精神,专注于隐私计算行业的研究与布道。社区致力于隐私计算技术的传播,愿成为中国 “隐私计算最后一公里的服务区”。 183篇原创内容 公…

chatGPT python API

import requests import os # 设置代理服务器地址和端口号 proxies { "https": "http://127.0.0.1:9910", "http": "http://127.0.0.1:9910" } # 设置API密钥和API请求 API_KEY "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"…

[语音信号处理] 说话人转换 voice conversion .CycleGANVC .StarGANVC .

语音信号处理的总体结构 从这个总体结构可以看出:无论是语音识别,还是语音编码与合成,输入的语音信号首先要进行预处理。 预处理 对信号进行适当放大和增益控制,并进行反混叠滤波来消除工频信号的干扰。 数字化 将模拟信号转…

【Google语音转文字】Speech to Text 超级好用的语音转文本API

前面有一篇博客说到了讯飞输入法,支持语音输入,也支持电脑内部音源输入,详细参考:【实时语音转文本】PC端实时语音转文本(麦克风外音&系统内部音源) 但是它只是作为一个工具来使用,如果我们想自己做一些好玩的东西…

Stable Diffusion +ChatGPT+文本转语音+剪映制作视频

目录 chatgpt免费体验入口网址 模型下载 huggingface.co civitai.com 使用Deliberate模型案例 StableDeffusion做的图片,chatGPT出的文案,微软文本转语音配的音,使用剪映做的视频 chatgpt免费体验入口网址 http://chat.xutongbao.top …

语音怎么转换成文字?分享两种语音转文字的方法

怎么把语音文件中的内容转换成文字呢?大家在日常的学习和办公过程中,在遇到一些重要内容或者是讲话,是不是会有将它录成语音的经历?因为这样会方便我们及时记录一些重要的内容,但当我们整理语音时,还要一句…

OpenAI-ChatGPT最新官方接口《语音智能转文本》全网最详细中英文实用指南和教程,助你零基础快速轻松掌握全新技术(六)(附源码)

Speech to text 语音智能转文本 Introduction 导言Quickstart 快速开始Transcriptions 转录python代码cURL代码 Translations 翻译python代码cURL代码 Supported languages 支持的语言Longer inputs 长文件输入Prompting 提示其它资料下载 Speech to text 语音转文本 Learn how…

学术界的期刊编辑如何识别通过 ChatGPT 编写出来的论文?

最近 ChatGPT 风靡全球,国外也有不少大学生使用 ChatGPT 来撰写论文,这给学术出版界的期刊编辑识别以 ChatGPT 为代表的人工智能写作出来的文章带来了很大的挑战。 咱们国内有一句古话:道高一尺,魔高一丈。 学术出版界的期刊编辑…

ChatGPT原理解释

写了一本介绍ChatGPT原理的课程 结构如下 01、介绍ChatGPT及其原理 1.1 ChatGPT的概述 1.2 什么是自然语言处理(NLP) 1.3 深度学习与NLP的关系 1.4 GPT模型的介绍 02、GPT原理探讨 2.1 GPT模型的输入与输出 2.2 GPT模型的结构 2.3 GPT模型的预训练方法…

什么?ChatGPT这么火,你没搞过实战?只用来口嗨侃大山了?

导语:AI技术在各个领域的应用越来越广泛,ChatGPT作为一款强大的自然语言处理模型,能帮助企业和个人提高工作效率和客户满意度。本文将详细介绍如何将ChatGPT集成到微信公众号上,帮助您实现自动化的客户服务和信息发布,…

ChatGPT这么火,我们能怎么办?

今天打开百度,看到这样一条热搜高居榜二:B站UP主发起停更潮,然后点进去了解一看,大体是因为最近AI创作太火,对高质量原创形成了巨大冲击! 记得之前看过一位UP主的分享,说B站UP主的年收入大体约等…

GPT-3.5(ChatGPT)训练和部署成本估算

因为ChatGPT(GPT-3.5)未正式公布参数量,暂时按照1750亿参数计算。 后续其他模型公布参数量后,可按参数量线性比例估算相关数值。 以下数值仅为理论估算,可能和实际数值相差很大,敬请谅解。 一、GPT-3.5磁…

使用ChatGPT写一篇文章

一、MyBatis中一对一关联查询概述 MyBatis是一个Java持久层框架,它提供了简单而强大的数据访问方式。在实际的开发中,我们经常需要查询两个表之间的关联数据,这就需要用到MyBatis的一对一关联查询。本文将介绍如何在MyBatis中实现一对一关联…

使用tailwindcss实现文章的快速排版

Tailwind CSS 是一个功能类优先的 CSS 框架,它集成了诸如 flex, pt-4, text-center 和 rotate-90 这样的类,它们能直接在脚本标记语言中组合起来,构建出任何设计。tailwindcss生产环境非常小,并且一切皆是响应式的。 首先来看一个…

微信公众号文章如何排版?

记得小编在刚开始接触制作公众号文章的时候,最头疼的就是文章的排版了。因为刚开始不懂也不知道该怎么设置字号,字间距,段落格式。也是狠心好好研究了很久才慢慢摸索出来一些经验,这边给大家简单的分享一下文章排班的基本设置吧 首…

ChatGPT专业应用:基于原有文章改写新文章

正文共 611 字,阅读大约需要 2 分钟 市场运营/SEO投放必备技巧,您将在2分钟后获得以下超能力: 自动改写SEO文章 Beezy评级 :B级 *经过简单的寻找, 大部分人能立刻掌握。主要节省时间。 推荐人 | Alice 编辑者 | Lind…