OpenAI ChatGPT-4开发笔记2024-04:Chat之Tool之2:multiple functions

news2024/11/21 2:28:08

从程序员到ai Expert

  • 1 定义参数和函数
  • 2 第一轮chatgpt
  • 3 第一轮结果和function定义全部加入prompt再喂给chatgpt
  • 4 大结局
  • 7 参考资料

上一篇解决了调用一个函数的问题。这一篇扩展为调用3个。n个自行脑补。

1 定义参数和函数

#1.设定目标
import json
import openai

#1.定义parameters for text completion
ai_prompt = [
    {
        "role": "user", 
        "content": f"汇总3个function的aiXpert的结果"
    }
]

#2.定义self-function,3个
def search_baidu(keyword):
    return f"{keyword}是一个技术博主"

def search_google(keyword):
    return f"{keyword}很牛"

def search_bing(keyword):
    return f"{keyword}喜欢水鱼"

#3.设置参数
ai_function = [
    {
        "type": "function",
        "function": {
            "name": "search_baidu",
            "parameters": {
                "type": "object",
                "properties": {
                    "keyword": {
                        "type": "string",
                    }
                },
                "required": ["keyword"],
            },
        }
    },    
    {
        "type": "function",
        "function": {
            "name": "search_google",
            "parameters": {
                "type": "object",
                "properties": {
                    "keyword": {
                        "type": "string",
                    }
                },
                "required": ["keyword"],
            },
        }
    },        
    {
        "type": "function",
        "function": {
            "name": "search_bing",
            "parameters": {
                "type": "object",
                "properties": {
                    "keyword": {
                        "type": "string",
                    }
                },
                "required": ["keyword"],
            },
        }
    }
]

available_functions = { "search_baidu": search_baidu, "search_google": search_google, "search_bing": search_bing } 

#4.define function to call ChatGPT 
def chat_completions(parameter_message):
    response = openai.chat.completions.create(
        model   ="gpt-3.5-turbo-1106",
        messages=parameter_message,
        tools   =ai_function,
        tool_choice="auto", 
    )
    return response.choices[0].message

2 第一轮chatgpt

#5.发起首次请求,告诉gpt要做什么,已经有哪些函数可以调动
first_response = chat_completions(ai_prompt)
tool_calls = first_response.tool_calls

3 第一轮结果和function定义全部加入prompt再喂给chatgpt

# 第一轮chat completions的结果加入prompt,再把function参数加入prompt,然后一起喂给chatgpt

if tool_calls:
    ai_prompt.append(first_response)  # 第一轮chat completions的结果加入prompt,
    # 将所有函数调用的结果拼接到消息列表里
    for tool_call in tool_calls:
        function_name = tool_call.function.name
        function_to_call = available_functions[function_name]
        function_args = json.loads(tool_call.function.arguments)
        function_response = function_to_call(**function_args)
        ai_prompt.append(
            {
                "tool_call_id": tool_call.id,
                "role": "tool",
                "name": function_name,
                "content": function_response,
            }
        ) 
    print(chat_completions(ai_prompt))

4 大结局

ChatCompletionMessage(
	content='根据三个搜索引擎的结果,
	"AIxPert" 是一个技术博主,非常牛,也喜欢水鱼。', 
	role='assistant', 
	function_call=None, 
	tool_calls=None)

在这里插入图片描述

7 参考资料

  1. OpenAI的多函数调用(Multiple Function Calling)简介
  2. OpenAI API

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

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

相关文章

ADS仿真 之 瞬态仿真

瞬态仿真常用于低频模拟和数字电路的仿真,是用来模拟电压或者电流随时间的变化趋势, ADS在Simulation-transient面板中提供了与瞬态仿真相关的控件, 主要是瞬态仿真控件,一般的瞬态仿真主要关注时间的设置和时间的控制方式&#x…

理论U4 集成学习

文章目录 一、集成学习1、传统学习的问题2、集成学习1)背景2)概念3)注意 3、多样性度量4、多样性增强1)多样性增强:在学习过程引入随机性2) 输入属性扰动3) 输出表示扰动4) 算法参数…

利用 Vesta 软件绘制团簇构型 ICO多面体(二)

微信公众号:原子与分子模拟更新的快,欢迎大家关注。 -------------------------------------------------------------------- 进入网站下载 ICO 文件: http://www.pas.rochester.edu/~wangyt/algorithms/bop/ 利用 Vesta 软件进行绘制。 …

SpringIOC之support模块EmbeddedValueResolutionSupport

博主介绍:✌全网粉丝5W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验…

基于SELinux三权分立配置方法

1.系统安装 系统安装完成后,系统当前的SELinux配置为: # cat /etc/selinux/config SELINUX=enforcing SELINUXTYPE=targeted 2.SELinux环境准备 # yum install setools policycoreutils.x86_64 selinux-policy-mls.noarch setroubleshoot.x86_64 setools-console -y 3.SELin…

排序链表[中等]

一、题目 给你链表的头结点head,请将其按 升序 排列并返回 排序后的链表 。 示例 1: 输入:head [4,2,1,3] 输出:[1,2,3,4] 示例 2: 输入:head [-1,5,3,4,0] 输出:[-1,0,3,4,5] 示例 3&…

Spring MVC MVC介绍和入门案例

1.SpringMVC概述 1.1.MVC介绍 MVC是一种设计模式,将软件按照模型、视图、控制器来划分: M:Model,模型层,指工程中的JavaBean,作用是处理数据 JavaBean分为两类: 一类称为数据承载Bean&#xf…

python_数据可视化_pandas_导入excel数据

目录 1.1导入库 1.2读取excel文件 1.3读取excel,指定sheet2工作表 1.4指定行索引 1.5指定列索引 1.6指定导入列 案例速览: 1.1导入库 import pandas as pd 1.2读取excel文件 pd.read_excel(文件路径) data pd.read_excel(D:/desktop/TestExcel…

基于图像合成和注意力的深度神经网络从计算机断层扫描灌注图像中自动分割缺血性脑卒中病变

Automatic ischemic stroke lesion segmentation from computed tomography perfusion images by image synthesis and attention-based deep neural networks 基于图像合成和注意力的深度神经网络从计算机断层扫描灌注图像中自动分割缺血性脑卒中病变背景贡献实验Comparison o…

SCT2A23STER:4.5V-100V Vin, 1.2A, DCDC降压转换器

• 4.5V-100V 输入电压范围 • 1.2A 连续输出电流 • 1.8A峰值电流限制 • 室温下1.2V 1% 反馈电压 • 集成 530mΩ 上管和 220mΩ 下管功率 MOSFETs • 带VCC二极管的静态电流为15uA 无VCC二极管的静态电流为160uA • 可选PFM、USM和FPWM轻载工作模式 • 4.3ms 内置软启动时…

第一次面试总结 - 迈瑞医疗 - 软件测试

🧸欢迎来到dream_ready的博客,📜相信您对专栏 “本人真实面经” 很感兴趣o (ˉ▽ˉ;) 专栏 —— 本人真实面经,更多真实面试经验,中大厂面试总结等您挖掘 注:此次面经全靠小嘴八八,没…

论文阅读:Making Large Language Models A Better Foundation For Dense Retrieval

论文链接 Abstract 密集检索需要学习区分性文本嵌入来表示查询和文档之间的语义关系。考虑到大型语言模型在语义理解方面的强大能力,它可能受益于大型语言模型的使用。然而,LLM是由文本生成任务预先训练的,其工作模式与将文本表示为嵌入完全…

【JVM 基础】 Java 类加载机制

JVM 基础 - Java 类加载机制 类的生命周期类的加载: 查找并加载类的二进制数据连接验证: 确保被加载的类的正确性准备: 为类的静态变量分配内存,并将其初始化为默认值解析: 把类中的符号引用转换为直接引用 初始化使用卸载 类加载器, JVM类加载机制类加载…

5分钟搭建开源运维监控工具Uptime Kuma并实现无公网IP远程访问

文章目录 **主要功能**一、前期准备本教程环境为:Centos7,可以跑Docker的系统都可以使用本教程安装。本教程使用Docker部署服务,如何安装Docker详见: 二、Docker部署Uptime Kuma三、实现公网查看网站监控四、使用固定公网地址访问…

6款实用的Git可视化管理工具

前言 俗话说得好“工欲善其事,必先利其器”,合理的选择和使用可视化的管理工具可以降低技术入门和使用门槛。我们在团队开发中统一某个开发工具能够降低沟通成本,提高协作效率。今天给大家分享6款实用的Git可视化管理工具。 Git是什么&…

中国IT产经新闻:新能源汽车发展前景与燃油车的利弊之争

随着科技的进步和环保意识的提高,新能源汽车在全球范围内逐渐受到重视。然而,在新能源汽车迅速发展的同时,燃油车仍然占据着主导地位。本文将从新能源与燃油车的利弊、新能源汽车的发展前景两个方面进行分析,以期为读者提供全面的…

【原生部署】SpringBoot+Vue前后端分离项目

本次主要讲解SpringBootVue前后端完全分离项目在CentOS云服务器上的环境搭建与部署过程,我们主要讲解原生部署。 一.原生部署概念 原生部署是指将应用程序(一般是指软件、应用或服务)在底层的操作系统环境中直接运行和部署,而不…

SAP CO11N报工批次分割(拆分)

CO11N做报工的时候,下阶料启用了批次,比如需要过账4166个,但是每一批次的库存都不满足4166个,所以需要拆分(分割)处理 这个时候我们就需要对这一行做分割处理 选中这一行,点击‘分割’按钮 弹…

认识Linux指令之 “ head tail ” 命令

01.head指令 head 与 tail 就像它的名字一样的浅显易懂,它是用来显示开头或结尾某个数量的文字区块,head 用来显示档案的开头至标准输出中,而 tail 想当然尔就是看档案的结尾。 语法: head [参数]... [文件]... 功能&#…

thinkphp学习06-连接数据库与模型初探

新建数据库 CREATE DATABASE tp6stu01 CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;创建表和数据 DROP TABLE IF EXISTS tp_user; CREATE TABLE tp_user (id mediumint(8) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 自动编号,username varchar(20) CHARACTER SET utf8 COLL…