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

这篇具有很好参考价值的文章主要介绍了Python ChatGPT API 新增的函数调用功能演示。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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


一、前言

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

Python ChatGPT 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 最后会根据这个结果回答用户的问题,输出最终内容。

函数调用的官方示例:

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

自从 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 pprint


def 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 = proxies

df = 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 响应结果中的内容,即机器人回复的信息。

结果如下示意:

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


三、总结

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

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

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

示意图如下所示(图片来自知乎@段小草):
Python ChatGPT API 新增的函数调用功能演示

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

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

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


📚️ 参考链接:文章来源地址https://www.toymoban.com/news/detail-494820.html

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

到了这里,关于Python ChatGPT API 新增的函数调用功能演示的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python调用chatGPT的API

    最近一直在研究GPT,LLM,把其他东西都荒废了,随便更新一个,凑个字数。 1.python标准接口使用 python接入chatGPT,用flask封装成API接口,这样你就可以自己把他接入到微信,小程序,公众号或者各种地方了。 先上代码: 里面有几个点需要注意。 1.是APIkey的获取。 首先登陆Op

    2024年02月08日
    浏览(42)
  • 使用python调用ChatGPT API 简单示例

    如果你已经获得了 OpenAI的API密钥 ,并且想要使用Python发起ChatGPT对话,你可以使用OpenAI的Python SDK来实现。下面是一个简单的示例代码: 首先,你需要确保已安装OpenAI的Python SDK。你可以使用pip来安装: 然后,你可以使用以下代码来发起对话: 确保将 \\\'YOUR_API_KEY\\\' 替换为你的实

    2024年02月12日
    浏览(44)
  • 若依cloud(RuoYi-Cloud)新增业务模块和功能模块增删改查演示

    前言 看了几篇文章感觉都不太满意,索性自己来写一篇。 一、后端 后端新建业务模块流程大致如下: 看一下目录结构, business 就是我们自己的业务模块: 1.0 新建业务模块 就是在 ruoyi-module模块 下新建一个 springboot 工程模块,大家既然都学到cloud了,我相信这一步也不用多

    2024年02月17日
    浏览(57)
  • 一文学会python调用ChatGPT3.5的API

    📕作者简介:热编程的贝贝,致力于C/C++、Java、Python等多编程语言,热爱跑步健身,喜爱音乐的一位博主。 📗本文收录于贝贝的日常汇报系列,大家有兴趣的可以看一看 📘相关专栏深度学习、目标检测系列等,大家有兴趣的可以看一看 📙C++零基础入门系列,Web入门篇系列

    2024年01月17日
    浏览(46)
  • 【课件】Python调用OpenAI API实现ChatGPT多轮对话

    如何实现多轮对话? gpt-3.5-turbo 模型调用方法 openai.ChatCompletion.create 里传入的 message 是一个列表,列表里每个元素是字典,包含了角色和内容,我们只需将每轮对话都存储起来,然后每次提问都带上之前的问题和回答即可。 代码解析: ChatGPT 类,包含三个函数: __init__ 初始

    2024年02月03日
    浏览(50)
  • chatgpt赋能python:Python调用主函数语句

    Python是一种高级编程语言,语法简单,易于学习和使用。在Python程序中,主函数是程序的入口,是程序的核心。本文将介绍Python调用主函数语句的相关知识。 在Python程序中,主函数也称为程序入口函数,是整个程序的核心。主函数通常包含程序的主要逻辑和功能,用于执行程

    2024年02月11日
    浏览(44)
  • 自动化API测试工具ReadyAPI新增业务历史记录功能

    解锁无缝软件开发:探索ReadyAPI虚拟化 的力量 在快速发展的软件开发环境中,创建稳健且反应灵敏的应用程序已然成为重中之重。 让我们一起来看看ReadyAPI虚拟化。这个解决方案让开发人员能够在受控的环境中模拟和测试其应用程序的性能,从而确保无缝的用户体验。 随着

    2024年02月06日
    浏览(44)
  • React Dva项目创建Model,并演示数据管理与函数调用

    本文的话 我们讲一下定义Model 也就是Dva中redux的部分 我们打开一个刚创建的Dva项目 看到 src下的models 下 就是Model部分 这里 他给我们了一个案例 如果用 react-redux 管理 模块多了之后会看着比较乱 或 很麻烦 但是 大家会发现 在Model中 他将这些都放在一起了 只需要创建一个这样

    2024年02月15日
    浏览(39)
  • LLMs:OpenAI官方重磅更新——新增GPT-3.5Turbo调和API更新功能

    LLMs:OpenAI官方重磅更新——新增GPT-3.5Turbo调和API更新功能 导读 :2023年8月22日,OpenAI官方发布,开发者现在可以 使用自己的数据 来 定制 适用于其用例的 GPT-3.5 Turbo模型 。GPT-3.5 Turbo的微调现在已经可用,GPT-4的微调将在今年秋季推出。此更新使开发者 能够定制模型 ,以便为

    2024年02月10日
    浏览(46)
  • LLM大语言模型(三):使用ChatGLM3-6B的函数调用功能前先学会Python的装饰器

    目录 ChatGLM3-6B的函数调用模式示例 本地启动ChatGLM3-6B工具模式 如何在ChatGLM3-6B里新增一个自定义函数呢? get_weather基于Python的装饰器实现 函数注解@register_tool 现在我们来自定义一个kuakuawo()函数 ChatGLM3-6B目前有三种使用模式: 对话模式 工具模式(也就是本文要介绍的函数调用

    2024年01月25日
    浏览(77)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包