ChatGPT 更新:大杀器!函数调用示范

news2024/11/25 6:28:30

自ChatGPT 3.5/4 双双升级:更长,更便宜,更开放,更可控发出去之后,有朋友问怎么接入 API。‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍

什么是函数调用?

函数调用指 Chat-GPT 模型会自动逻辑判断后,调用在代码中预先定义好的某个或者多个函数,获得返回的信息后,再用自然语言形式回复用户。

以官方的回答天气情况时,调用天气网站的提供的API来回答用户问题举例。‍‍‍‍‍

d2586e8cf646247382e2acf55fd15c2b.png

调用过程两部分:

一、定义函数,

functions = [
        {
            "name": "get_current_weather",
            "description": "获取指定地点的当前天气",
            "parameters": {
                "type": "object",
                "properties": {
                    "location": {
                        "type": "string",
                        "description": "城市和州,例如:San Francisco, CA",
                    },
                    "unit": {"type": "string", "enum": ["washington", "boston"]},
                },
                "required": ["location"],
            },
        }
    ]

二、发消息给ChatGPT,模型决定要不要调用,调用则把外部API返回信息再发给模型,模型把包括函数返回信息的完整回复返回给用户。‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍

全部完整代码如下:

import openai
import json
Import os
openai.api_key = os.getenv("OPENAI_API_KEY")


// 此函数为固定返回相同天气的示例的函数,实际应用中替换成你需要调用的外部API
def get_current_weather(location, unit="boston"):
    """获取指定地点的当前天气"""
    weather_info = {
        "location": location,
        "temperature": "72",
        "unit": unit,
        "forecast": ["sunny", "windy"],
    }
    return json.dumps(weather_info)


def chat(content):
    content = "What's the weather like in Boston?"
    # 1:将用户的提问和函数定义发送给GPT
    messages = [{"role": "user", "content": content}]
    functions = [
        {
            "name": "get_current_weather",
            "description": "获取指定地点的当前天气",
            "parameters": {
                "type": "object",
                "properties": {
                    "location": {
                        "type": "string",
                        "description": "城市和州,例如:San Francisco, CA",
                    },
                    "unit": {"type": "string", "enum": ["washington", "boston"]},
                },
                "required": ["location"],
            },
        }
    ]
  
    # 2:获取 GPT 的返回
    response = openai.ChatCompletion.create(
        model="gpt-3.5-turbo-0613",
        messages=messages,
        functions=functions,
        function_call="auto",  # 是否调用函数,auto是默认值,可以不指定
    )
    response_message = response["choices"][0]["message"]


    # 3:GPT会判断是否需要调用函数,是则返回调用标记为真。
    if response_message.get("function_call"):
        # 4:调用函数
        available_functions = {
            # 此处可以多个函数
            "get_current_weather": get_current_weather,
        }  
        function_name = response_message["function_call"]["name"]
        fuction_to_call = available_functions[function_name]
        function_args = json.loads(response_message["function_call"]["arguments"])
        # 5:获得函数返回信息
        function_response = fuction_to_call(
            location=function_args.get("location"),
            unit=function_args.get("unit"),
        )


        # 6:用返回信息封装助手信息结构体
        messages.append(response_message)  # 将助手的回复加入对话
        messages.append(
            {
                "role": "function",
                "name": function_name,
                "content": function_response,
            }
        )  
        # 7: 将封装好,包含函数返回信息再发送给GPT,并获得GPT自然语言形式的回答
        second_response = openai.ChatCompletion.create(
            model="gpt-3.5-turbo-0613",
            messages=messages,
        )  # 从GPT获取一个新的响应,这个响应可以看到函数的响应
        return second_response


# 输出应答
print(run_conversation())

整个用户交互及程序的流程如下:

  1. 用户问一个问题,例如“波士顿现在的天气怎么样?”

  2. 这个问题被发送给GPT模型,并告知其有一个可以调用的函数get_current_weather。

  3. GPT模型确定它需要调用这个函数来回答用户的问题,所以它返回一个“函数调用”的请求,指定要调用的函数名称和参数。

  4. 代码中的运行会查找对应的函数(在这个例子中是get_current_weather),并用GPT模型指定的参数调用它。

  5. 函数返回天气信息,这个信息被发送回GPT模型。

  6. GPT模型使用这个天气信息来生成一个回答,例如“波士顿现在的天气是晴朗的,温度是72度”。

也有朋友问:它实际应用场景是什么样的?

问了一下 ChatGPT:‍‍‍‍‍‍

填充模板:可以将特定的信息填充到预定义的模板中,生成个性化的文本,如生成定制化的邮件、通知或报告。  

条件逻辑:用于在生成的文本中实现条件分支和逻辑判断,根据特定条件生成不同的文本输出,增强了文本的灵活性和可定制性。  

变量和状态管理:可以引入变量和状态管理,使得文本可以跟踪和操作特定的信息,实现更加复杂的任务和交互。  

上下文控制:可以在生成文本的过程中引入上下文信息,控制模型对上下文的理解和应答,提高文本的连贯性和一致性。  

多模态输入和输出:可以实现多模态数据(如文本、图像、视频等)的输入和输出,更加丰富和多样化的文本生成和理解任务。

ChatGPT

官方给了三个应用场景举例:

  1. 创建聊天机器人通过调用外部工具来回答问题

  2. 将自然语言转换为 API 调用或数据库查询

  3. 从文本中提取结构化数据

我的回答是:例子里只是列举了一个查询天气状况的情况。实际上它有很多场景可以扩展。‍‍‍‍‍

chatGPT 模型本质还是一个通用AI模型,它的能力大多数表现文字和图片方面。其次它的知识需要训练,无法做到实时更新数据。虽然它有接近人类的逻辑推理能力,可以根据已知信息来推导问题答案。‍‍‍‍‍‍‍

应用场景的落地可以往两个方面扩展:

一、实时性的信息获取和加工。例如新闻,天气,交通状况,售票情况,停车位情况,航班情况,考试分数查询等等;‍‍

二、垂直领域的能力。例如调用别的人工智能机器人:阿尔法围棋(AlphaGo) 来陪你下棋,调用运输机器人帮你把货物运到目的地,调用专门法律政策类型的智能助手(这类方面问题因为安全和政策的原因,GPT的输出被限制了)帮你查询和准备资料等等。‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍


关注我,领取九大类别,数百篇 AI 学习资源。

一起学习 ChatAI,掌握 AI 工具,不被时代淘汰。

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

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

相关文章

如何让程序在后台隐藏窗口运行 - 静默运行器

有的时候你可能会想让一个程序或多个在后台运行,并隐藏其窗口界面。你可以使用静默运行器这款软件。 静默运行器是一款小巧的Windows系统工具软件,它可以轻松的让你在后台静默运行多个程序,隐藏程序窗口和界面,并提高或降低后台进…

在 Debian 12 上安装 KubeSphere 实战入门

老 Z,运维架构师,云原生爱好者,目前专注于云原生运维,云原生领域技术栈涉及 Kubernetes、KubeSphere、DevOps、OpenStack、Ansible 等。 前言 知识点 定级:入门级KubeKey 安装部署 KubeSphere 和 KubernetesDebian 操…

【Python】函数进阶 ④ ( Lambda 匿名函数 | 具名函数与匿名函数 | Lambda 函数定义语法 )

文章目录 一、具名函数与匿名函数二、Lambda 函数定义语法三、代码示例 - Lambda 函数定义语法 一、具名函数与匿名函数 在 Python 中 , 使用 def 关键字定义的函数 是 " 具名函数 " , 也就是有名字的函数 ; 与 " 具名函数 " 相对应的是 " 匿名函数 …

DDR3引脚分配问题

前言 ddr3引脚分配基础知识ddr3引脚分配过程中遇到的问题一次作者在某项目设计时,应硬件同事要求,验证设计管脚摆放位置。出现的问题记录一下,以便以后避坑。 ddr3引脚分配基础知识 1.ddr3一个bank可以放置4个group。 2.每个group包括1对dqs差分信号,8个数据信号,1个dm信…

Nginx运维常用技术点总结

文章目录 一、简介:1、Nginx简介2、常用四大发行版 二、Nginx编译安装:1、Nginx编译安装2、Nginx目录结构3、Nginx 相关命令 三、Nginx配置文件解析1、最小配置2、虚拟主机3、匹配正则表达式 四、Nginx反向代理1、理论2、实践:Nginx反代代理T…

兼容性测试如何提高网站的安全性?

兼容性测试如何提高网站的安全性? 在今天的互联网时代,随着各种网络攻击和黑客活动的频繁发生,网站的安全性问题越来越引起人们的关注。而在提高网站安全性方面,兼容性测试是一个非常重要的环节。本文将从什么是兼容性测试、为什么兼容性测试…

【MySQL】数据库基础 ①

✍什么MYSQL是数据库? MySQL 是一个关系型数据库管理系统,它是基于关系模型的数据存储方式,以表格形式组织数据,并使用结构化查询语言 (SQL) 进行数据操作。MySQL 是一个流行的数据库管理系统,被广泛用于互联网应用和网…

Python基础(6)——Python输出

Python基础(6)——Python输出 文章目录 Python基础(6)——Python输出目标输出格式化输出1.1 格式化符号1.2 体验1.3 转义字符1.4 结束符 总结 目标 格式化输出 格式化符号f-字符串 print的结束符 输出 作用:程序输出…

【正点原子STM32连载】 第三十四章 PWM DAC实验摘自【正点原子】STM32F103 战舰开发指南V1.2

1)实验平台:正点原子stm32f103战舰开发板V4 2)平台购买地址:https://detail.tmall.com/item.htm?id609294757420 3)全套实验源码手册视频下载地址: http://www.openedv.com/thread-340252-1-1.html# 第三…

NSS刷web(1)

一点点做,简单的也不跳了,就当回忆知识了 [SWPUCTF 2021 新生赛]gift_F12 ctrlu [SWPUCTF 2021 新生赛]jicao [SWPUCTF 2021 新生赛]easy_md5 [SWPUCTF 2021 新生赛]easy_sql [SWPUCTF 2021 新生赛]include [SWPUCTF 2021 新生赛]easyrce [SWPUCTF 2021 新生赛]caidao [SWP…

PMP证书考下来要多少费用?

PMP考试形式分为:笔试、机考。PMP考试这里只着重介绍笔试(大陆地区目前都是笔试): PMP认证考试在大陆内的考试一般一年举行四次,分别在3、6、9、12月份。2023年考试时间是3、5、8、11月份。 考试方式是笔试。考试改版…

【云原生】初识Kubernetes的理论基础

1.k8s的由来及其技术运用 1.1 k8s的简介 Kubernetes,词根源于希腊语的 舵手、飞行员。在国内又称k8s(因为k和s之间有8个字母,所以得名。“国内程序员的幽默”)。用于自动部署、扩展和管理“容器化(containerized&…

面向锂电池行业实验室测试排配智能优化解决方案

获取更多资讯,赶快关注公众号(《智能制造与智能调度》和》《商简智能》)吧! 文章目录 1 何为排配问题2 排配特点3 排配现状和痛点4 智能排配解决方案4.1 整体架构4.2 总体思路4.3 智能排配约束4.4 智能算法助力智能排配4.5 智能交…

RFID课程要点总结_3 Wireless Communication Principle of RFID

3. Wireless Communication Principle of RFID Different work principles of different carrier frequency 不同频率载波也适用不同的工作原则。 前面已经有所涉及,比如LF HF适用于近距离,UHF SHF适合远距离。 前者适用 Inductively Coupled RF Mod…

使用华为云AstroZero,不用一行代码,制作端午节加班申请模板

前言 6月22号就要端午了,很多公司会想统计下端午节加班的人数。传统的做法是用社交软件,谁要加班谁反馈,然后逐级汇总上传。大一点的企业,可能用自己的内部办公系统来申请。 但对于小企业来说,没有定制化的办公系统&a…

文件夹提示《文件或目录损坏》怎么解决

在经常使用电脑的过程中,大家平常会遇见一些困难,其中最常见的就是文件夹了,许多人就反映说自己遇见过文件夹《文件或目录损坏》打不开,那么遇见这个困难该怎么办呢?不知道的朋友赶紧瞧瞧小编整理的文件夹《文件或目录…

【参考设计】2KW AC/DC数字电源方案

什么是数字电源? 数字电源即通过一颗通用的数字信号控制器,完成传统模拟电源控制IC所具备的PWM、保护、环路补偿等功能,同时具备通信监控功能。 数字电源的数字信号控制器取代了模拟电源的控制芯片、环路补偿的运放及相关器件。软件处理的灵…

软考A计划-系统集成项目管理工程师-信息化知识(一)

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列 👉关于作者 专注于Android/Unity和各种游戏开发技巧&#xff…

leetcode 225. 用队列实现栈

2023.6.19 这题使用队列来实现栈的功能&#xff0c;和栈实现队列稍有不同。pop操作的实现 需要将队列1的除队尾元素之外的所有元素移到队列2中&#xff0c;然后返回并移除队列1剩下的元素。 下面上代码&#xff1a; class MyStack {queue<int> que1;queue<int> qu…

How to Write and Publish a Scientific Paper-Approaching a Writing Project

contents Approaching a Writing ProjectESTABLISHING THE MINDSETPREPARING TO WRITEDOING THE WRITINGREVISING YOUR WORK Approaching a Writing Project ESTABLISHING THE MINDSET 也许最基本的是&#xff0c;请记住你的写作目的是为了传达信息&#xff0c;而不是为了给人…