一文教你使用 ChatGPT API function calling

news2024/11/18 14:53:47

一文教你使用 ChatGPT API function calling

  • Function call
    • 如何理解Function call
    • 如何调用?

Function call

在这里插入图片描述

如何理解Function call

函式呼叫(function calling) 可说是这次ChatGPT API 更新的杀手级更新。所谓函式呼叫,就是让你把外部函式的形状写入ChatGPT API,这样ChatGPT API 就能输出对的格式来呼叫你的函式。让我们透过官方发布的例子来了解:

例子
假如你现在问ChatGPT 「波士顿目前天气如何」,ChatGPT 会吐给你乱回答的内容,因为它的训练资料只到2021 年。假如要有最新的资料,会需要呼叫外部的API,例如有个天气API,呼叫后可以拿到最新的天气资讯。

假设今天这个天气API 的输入格式要两个参数,一个是地点,需要是字串;第二个是单位,需要是摄氏或华氏。过去的作法是,你要在指令(prompt) 里面跟ChatGPT 说,请输出一个JSON 字串,里面要包含地点与单位,这两个栏位。但这时就有个问题,即使你有下这个指令,ChatGPT 的输出仍可能会不如你预期。最常见的状况是,它会回「好的没问题,以下是JSON 字串的输出」这个开头的回复

💣 然后这时候就炸掉了,因为当你把「好的没问题,以下是JSON 字串的输出」输入到天气API,天气API 会没办法处理。这是过去要做ChatGPT 应用程式会遇到的一个痛点。要能有效整合,就需要有对的格式。格式错误将可能让程式运行出问题,弄不好整组炸掉就悲剧了。

函式呼叫这功能就是让ChatGPT API 能用对的格式跟外部工具互动。今天改成用函式呼叫的功能,ChatGPT API 会依据你定义好的格式,给出对的输出。以这边为例,它不会再用「好的没问题,以下是JSON 字串的输出」开头。而是会直接输出一个JSON 字串。这时你可以拿去打天气API。

如何调用?

API调用

import requests
import os
import json

url = "https://api.openai.com/v1/chat/completions"

auth = ('', os.getenv('OPENAI_API_KEY'))

headers = {
  "Content-Type": "application/json",
}

data = {
  "model": "gpt-3.5-turbo-0613",
  "messages": [
    {"role": "user", "content": "What is the weather like in Boston?"}
  ],
  "functions": [
    {
      "name": "get_current_weather",
      "description": "Get the current weather in a given location",
      "parameters": {
        "type": "object",
        "properties": {
          "location": {
            "type": "string",
            "description": "The city and state, e.g. San Francisco, CA"
          },
          "unit": {
            "type": "string",
            "enum": ["celsius", "fahrenheit"]
          }
        },
        "required": ["location"]
      }
    }
  ]
}

response = requests.post(url, auth=auth, headers=headers, data=json.dumps(data))

print(response.text)

这时会拿到

{
  "id": "chatcmpl-123",
  ...
  "choices": [{
    "index": 0,
    "message": {
      "role": "assistant",
      "content": null,
      "function_call": {
        "name": "get_current_weather",
        "arguments": "{ \"location\": \"Boston, MA\"}"
      }
    },
    "finish_reason": "function_call"
  }]
}
打完天气API,你拿到波士顿:22 度、单位:摄氏,接着再喂回去给ChatGPT API,这时ChatGPT API 就能精准回覆「波士顿现在的天气是摄氏22 度」

把上面的结果拿去呼叫天气API,会拿到

import requests
import os
import json

url = "https://api.openai.com/v1/chat/completions"

auth = ('', os.getenv('OPENAI_API_KEY'))

headers = {
  "Content-Type": "application/json",
}

data = {
  "model": "gpt-3.5-turbo-0613",
  "messages": [
    {"role": "user", "content": "What is the weather like in Boston?"},
    {"role": "assistant", "content": None, "function_call": {"name": "get_current_weather", "arguments": "{ \"location\": \"Boston, MA\"}"}},
    {"role": "function", "name": "get_current_weather", "content": "{\"temperature\": \"22\", \"unit\": \"celsius\", \"description\": \"Sunny\"}"}
  ],
  "functions": [
    {
      "name": "get_current_weather",
      "description": "Get the current weather in a given location",
      "parameters": {
        "type": "object",
        "properties": {
          "location": {
            "type": "string",
            "description": "The city and state, e.g. San Francisco, CA"
          },
          "unit": {
            "type": "string",
            "enum": ["celsius", "fahrenheit"]
          }
        },
        "required": ["location"]
      }
    }
  ]
}

response = requests.post(url, auth=auth, headers=headers, data=json.dumps(data))

print(response.text)
最后拿到的就是正确的资料,同时又是自然语言

{
  "id": "chatcmpl-123",
  ...
  "choices": [{
    "index": 0,
    "message": {
      "role": "assistant",
      "content": "The weather in Boston is currently sunny with a temperature of 22 degrees Celsius.",
    },
    "finish_reason": "stop"
  }]
}

打印完天气API,你拿到波士顿:22 度、单位:摄氏,接着再喂回去给ChatGPT API,这时ChatGPT API 就能精准回覆「波士顿现在的天气是摄氏22 度」

把上面的结果拿去呼叫天气API,会拿到


import requests
import os
import json

url = "https://api.openai.com/v1/chat/completions"

auth = ('', os.getenv('OPENAI_API_KEY'))

headers = {
  "Content-Type": "application/json",
}

data = {
  "model": "gpt-3.5-turbo-0613",
  "messages": [
    {"role": "user", "content": "What is the weather like in Boston?"},
    {"role": "assistant", "content": None, "function_call": {"name": "get_current_weather", "arguments": "{ \"location\": \"Boston, MA\"}"}},
    {"role": "function", "name": "get_current_weather", "content": "{\"temperature\": \"22\", \"unit\": \"celsius\", \"description\": \"Sunny\"}"}
  ],
  "functions": [
    {
      "name": "get_current_weather",
      "description": "Get the current weather in a given location",
      "parameters": {
        "type": "object",
        "properties": {
          "location": {
            "type": "string",
            "description": "The city and state, e.g. San Francisco, CA"
          },
          "unit": {
            "type": "string",
            "enum": ["celsius", "fahrenheit"]
          }
        },
        "required": ["location"]
      }
    }
  ]
}

response = requests.post(url, auth=auth, headers=headers, data=json.dumps(data))

print(response.text)

最后拿到的就是正确的资料,同时又是自然语言


{
  "id": "chatcmpl-123",
  ...
  "choices": [{
    "index": 0,
    "message": {
      "role": "assistant",
      "content": "The weather in Boston is currently sunny with a temperature of 22 degrees Celsius.",
    },
    "finish_reason": "stop"
  }]
}

在了解完函式呼叫功能后,大概可以更理解OpenAI 的未来策略,如同执行长Sam Altman 先前提到的,不会是再去做ChatGPT 这种应用;而是会以平台的角度出发。函式呼叫能让外部工具更好与ChatGPT API 整合,这会让ChatGPT 这个平台变得更有价值。

以上就是今天的全部内容,希望对大家有所帮助,也希望大家多多留言、点赞、在看、转发四连爱❤️ 支持。 咱们下篇文章见,Bye~👋

微信公众号搜索【一个正经的测试】,专注于AI与软件测试技术和宝藏干货分享,每天准时更新原创技术文章,每月不定期赠送技术书籍,让我们在测试会所在测试社区这个大家庭一起学习交流。喜欢记得星标⭐我,每天及时获得最新推送,
在这里插入图片描述

后台回复“软件测试基础”、“AI与大模型“,简历与面试”等领取测试资源,回复“微信交流群”、“内推群”一起进群吹水摸鱼。
个人微信llwfancymyself添加请注明来意 😃

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Java IO分类】从传输方式和数据操作上理解 Java IO分类

Java IO - 分类 IO理解分类 - 从传输方式上字节流字符流字节流和字符流的区别字节转字符Input/OutputStreamReader/Writer IO理解分类 - 从数据操作上文件(file)数组([])管道操作基本数据类型缓冲操作打印对象序列化反序列化转换 IO理解分类 - 从传输方式上 从数据传输方式或者…

CSS3十大滤镜效果详解

滤镜效果 类似于美颜相机、美图秀秀这样的美颜工具,能够让我们轻松地应用多种特效,例如转换为黑白照片、复古风格化、调整亮度等。在之前仅凭CSS几乎很难做到这些效果。 但在CSS3的语法中,所有的这些视觉特效都是通过“filter”属性来快速实…

最全 chrome driver

超全chrome和driver的对应链接 https://raw.githubusercontent.com/GoogleChromeLabs/chrome-for-testing/main/data/latest-patch-versions-per-build-with-downloads.json 从这个链接中直接找对应的chrome和driver 复制链接下载。 注意最新版的在一些文章里的链接是找不到的…

论文笔记(四十)Goal-Auxiliary Actor-Critic for 6D Robotic Grasping with Point Clouds

Goal-Auxiliary Actor-Critic for 6D Robotic Grasping with Point Clouds 文章概括摘要1. 介绍2. 相关工作3. 学习 6D 抓握政策3.1 背景3.2 从点云抓取 6D 策略3.3 联合运动和抓握规划器的演示3.4 行为克隆和 DAGGER3.5 目标--辅助 DDPG3.6 对未知物体进行微调的后视目标 4. 实…

深度学习记录--偏差/方差(bias/variance)

误差问题 拟合神经网络函数过程中会出现两种误差:偏差(bias)和方差(variance) 偏差和误差的区别 欠拟合(underfitting) 当偏差(bias)过大时,如左图,拟合图像存在部分不符合值,称为欠拟合(underfitting) 过拟合(overfitting) …

软件测试|使用Python生成PDF文件

简介 PDF(Portable Document Format)是一种常用的文档格式,具有跨平台兼容性、保真性、安全性和交互性等特点。我们日常生活工作中的合同、报告、论文等通常都采用PDF格式,以确保文档在不同的操作系统(例如 Windows、…

鸿蒙开发工程师会不会有很好的就业前景?

一,鸿蒙带动IT开发和应用整体结构的变革 1月11日,以鸿蒙为首的华为概念股大幅走强,创业板创识科技拉升封板,传智教育、智度股份、高新发展、立达信、吉大正元等多股涨停,华亚电子、九联科技、软通动力、辰奕智能、芯海…

正则化方法介绍

在深度学习中,正则化是一种用于防止模型过拟合的技术。过拟合是指模型在训练数据上表现良好,呆在未见过的测试数据集上表现效果较差的情况。正则化的目标是通过对模型性的参数或层的约束,使其在训练数据上表现的不那么复杂,从而提…

【RTOS】快速体验FreeRTOS所有常用API(10)资源管理

目录 十、资源管理10.1 基本概念10.2 关任务调度器10.3 关中断10.4 实例 十、资源管理 该部分在上份代码基础上修改得来,代码下载链接: https://wwzr.lanzout.com/iqBYJ1lauxof 密码:9adb 该代码尽量做到最简,不添加多余的、不规范的代码。 内…

开源云真机平台-Sonic平台-python自定义脚本-批量导出monkey测试日志并抓取logcat日志

【主要功能】 开源云真机平台-Sonic平台-python自定义脚本: 1、批量导出monkey测试日志 2、抓取logcat日志 3、将导出的日志批量复制到局域网内的制定电脑上进行收集整理; 4、每一台设备的monkey日志、logcat日志单独存储,并以日期设备序…

【CSDN年度征文】关于三掌柜2023全年回顾和总结

目录 前言 顺利转正 被任命为项目经理 印象深刻的实战经历:项目重大版本上线 系统学习新技术的心得体会 获得腾讯云开发者社区优秀作者奖 想要安利给所有人的开发工具 技术大会招募 线下沙龙圆桌主持 新书发布上市 受邀直播探会 接受采访 组织1024程序…

css mask使用,背景透明,图片裁切

1 语法 mask: url(image.png); 使用位图来做遮罩mask: url(image.svg#star); 使用SVG图形中的形状来做遮罩mask: linear-gradient(#000 , transparent) 接受类似背景参数的渐变来做遮罩2 示例 2.1 背景透明 {background: url(im…

算法第二十天-丑数Ⅱ

丑数Ⅱ 题目要求 解题思路 题目的要求是让我们生成第n个丑数。如果考虑逐个遍历自然数是否为丑数,一定会超时。这里推荐使用生成的办法。 要生成第n个丑数,我们必须从第一个丑数1开始,向后逐渐的寻找。丑数只包含2,3&#xff0c…

Tensorflow2.0笔记 - Broadcasting和Tile

关于broadcasting的介绍,参考这篇文章。 https://blog.csdn.net/python_LC_nohtyp/article/details/104097417 import tensorflow as tf import numpy as nptf.__version__#关于broadcasting的介绍,参考这篇文章 #https://blog.csdn.net/python_LC_noht…

【Vue3】3-3 : 组件之间是如何进行互相通信的

本书目录:点击进入 一、组件之间为什么要做通信 二、组件之间通信方式 2.1、父传子:由传递属性实现 stage 1:申明 (即定义) stage 2:注册 stage 3:使用 【示例】:父组件将 tit…

前端动画特效分享(附在线预览)

分享几款不错的动画特效源码 其中有CSS动画、canvas动画、js小游戏等等 下面我会给出特效样式图或演示效果图 但你也可以点击在线预览查看源码的最终展示效果及下载源码资源 canvas爱心代码动画 爱心代码动画特效 由里向外不断的产生的小爱心形成一个巨大的爱心动画 以下图片…

【前端转安卓】-Java基础知识笔记

常量定义:final public class HelloWorld {// 静态常量public static final double PI 3.14;// 声明成员常量final int y 10;public static void main(String[] args) {// 声明局部常量final double x 3.3;} }变量声明、赋值 String username,address,phone,te…

C for Graphic:Sliced Circle Image

不做UI不知道,没想到时至今日,ugui居然没有sliced filled image模式,用circle做filled,不能用sliced九宫格图,导致每次使用这个效果必须一张新图,何其浪费资源。 原始功能如下: 我…

特征工程-特征处理(三)

特征处理 连续型变量处理(二) 多特征 降维 PCA PCA是一种常见的数据分析方式,通过数据分解,将高维数据降低为低维数据,同时最大程度保持数据中保存的信息。 from sklearn.decomposition import PCA A np.array([[84…

运维体系中的那些Ops们

目录 前言 DevOps DevSecOps GitOps 1、缺少一致性 2、使用成本高 3、鉴权分散 4、审核审计困难 5、不可变基础设施扩展难 DataOps AIOps 总结 前言 提到运维,自然而然会联想到DevOps,大家应该还听说过DataOps、GitOps、DevSecOps、AIOps等…