OpenAI ChatGPT-4开发笔记2024-04:Chat之Tool之2:multiple functions
从程序员到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,然后一起喂给chatgptif tool_calls:ai_prompt.append(first_response) # 第一轮chat completions的结果加入prompt,# 将所有函数调用的结果拼接到消息列表里for tool_call in tool_calls:function_name = tool_call.function.namefunction_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 参考资料
- OpenAI的多函数调用(Multiple Function Calling)简介
- OpenAI API
相关文章:
OpenAI ChatGPT-4开发笔记2024-04:Chat之Tool之2:multiple functions
从程序员到ai Expert 1 定义参数和函数2 第一轮chatgpt3 第一轮结果和function定义全部加入prompt再喂给chatgpt4 大结局7 参考资料 上一篇解决了调用一个函数的问题。这一篇扩展为调用3个。n个自行脑补。 1 定义参数和函数 #1.设定目标 import json import openai#1.定义para…...
14:00面试,14:07就出来了,问的问题有点变态。。。
前言 刚从小厂出来,没想到网盘我在另一家公司又寄了。 在这家公司上班,每天都要加班,但看在钱给的比较多的份上,也就不太计较了。但万万没想到一纸通知,所有人不准加班了,不仅加班费没有了,薪…...
206. 反转链表(Java)
题目描述: 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 输入: head [1,2,3,4,5] 输出: [5,4,3,2,1] 代码实现: 1.根据题意创建一个结点类: public class ListNode {int val…...
LeetCode 2807. 在链表中插入最大公约数【链表,迭代,递归】1279
本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…...
Hive之set参数大全-3
D 是否启用本地任务调试模式 hive.debug.localtask 是 Apache Hive 中的一个配置参数,用于控制是否启用本地任务调试模式。在调试模式下,Hive 将尝试在本地模式下运行一些任务,以便更容易调试和分析问题。 具体来说,当 hive.de…...
Golang拼接字符串性能对比
g o l a n g golang golang的 s t r i n g string string类型是不可修改的,对于拼接字符串来说,本质上还是创建一个新的对象将数据放进去。主要有以下几种拼接方式 拼接方式介绍 1.使用 s t r i n g string string自带的运算符 ans ans s2. 使用…...
【问题解决】web页面html锚点定位后内容被遮挡问题解决【暗锚】
正常的锚点跳转 a标签的href填写目标元素的id即可 <a href"#my_target">to div1</a> <div id"my_target">div1</div> 内容被顶栏遮挡示例 但是当id所在元素被嵌套多层flex和relative布局之后,跳转后部分内容会被遮挡…...
easyui datagrid无数据时显示无数据
这里写自定义目录标题 需求解决办法 需求 使用datagrid显示记录时,结果查询记录数为0,此时需要显示无数据。 示例代码 <table id"dg"></table>$(#dg).datagrid({url:datagrid_data.json,columns:[[{field:code,title:Code,widt…...
动态规划python简单例子-斐波那契数列
def fibonacci(n):dp [0, 1] [0] * (n - 1) # 初始化动态规划数组for i in range(2, n 1):dp[i] dp[i - 1] dp[i - 2] # 计算斐波那契数列的第 i 项print(dp)return dp[n] # 返回斐波那契数列的第 n 项# 示例用法 n 10 # 计算斐波那契数列的第 10 项 result fibonac…...
免 费 搭 建 多模式商城:b2b2c、o2o、直播带货一网打尽
鸿鹄云商 b2b2c产品概述 【b2b2c平台】,以传统电商行业为基石,鸿鹄云商支持“商家入驻平台自营”多运营模式,积极打造“全新市场,全新 模式”企业级b2b2c电商平台,致力干助力各行/互联网创业腾飞并获取更多的收益。从消…...
Python AttributeError: ‘NoneType‘ object has no attribute ‘shape‘如何解决
Python AttributeError: ‘NoneType‘ object has no attribute ‘shape‘ 运行出现上述错误,这个错误表示某个图像对象为 NoneType ,没有 shape 属性。通常情况下,这是因为 OpenCV 没有能够正确地加载图像,导致无法访问图像数据。…...
vue3自定义确认密码匹配验证规则
// 自定义确认密码匹配验证规则 const matchPassword (rules:any, value:any, callback:any) > {if (value ! addData.payPwd) {callback(new Error(两次密码输入不一致!))} else {callback()} }const rules reactive({payPwd: [{ required: true, message: &q…...
岗位所处定位,岗位职责
电子产品所需岗位:pcb设计电路板,fpga,嵌入式,应用层(前后端,移动端)。 PCB 岗位职责:1.负责器件.工程或者项目与技术验证类的PCB板设计工作;2.协助项目中部分模块的PCB(…...
2024阿里云服务器配置推荐方案
阿里云服务器配置怎么选择合适?CPU内存、公网带宽和ECS实例规格怎么选择合适?阿里云服务器网aliyunfuwuqi.com建议根据实际使用场景选择,例如企业网站后台、自建数据库、企业OA、ERP等办公系统、线下IDC直接映射、高性能计算和大游戏并发&…...
OceanBase原生分布式数据库
1.历史背景 在Java Web项目中,常常使用免费开源的MySQL数据库存储业务数据,按业界经验MySQL单库超过多大数据体量,或单表超过几百万条数据后就会出现查询变慢的情况,单实例数据库只能扩展物理资源(CPU、内存),来提升查…...
首次使用go-admin
go-admin 1.1 拉取 拉去后端代码 git clone https://github.com/go-admin-team/go-admin.git拉取前端代码 git clone gitgithub.com:go-admin-team/go-admin-ui.git 1.2 编译 cd ./go-admingo mod tidygo build1.3 配置文件的修改 这里可以可以根据自己的需要进行自定义两…...
软件工程概论---内聚性和耦合性
目录 一.耦合性 1.内容耦合 2.公共耦合 4.控制耦合 5.标记耦合(特征耦合) 6.数据耦合 7.非直接耦合 二.内聚性 1.偶然内聚 2.逻辑内聚 3.时间内聚 4.过程内聚 5.通信内聚 6.顺序内聚 7.功能内聚 一.耦合性 耦合性是指软件结构中模块相互…...
纯血鸿蒙「扩圈」100天,酝酿已久的突围
坦白讲,去年参加华为开发者大会看到HarmonyOS NEXT(仅运行鸿蒙原生应用,所以也称作「纯血鸿蒙」)的时候,小雷也没料想到鸿蒙原生应用生态的发展速度会如此之快。 9月25日,华为正式对外宣布启动HarmonyOS NE…...
UICollection Compositional Layout全详解
本文字数:8325字 预计阅读时间:45分钟 01 Collection View Layout全详解 UICollectionView在iOS中是构建复杂布局的强大工具。iOS13中引入的 UICollectionViewCompositionalLayout为创建自定义布局提供了全新的可能性。本文将深入探讨Compositional Lay…...
单例模式的模板
参考了网上的一些单例模式,自己也写一个模板。 要点: 线程安全性单例对象的唯一性 #include <mutex> //在模板类 Singleton 中,可以定义单例模式的实现细节 template <typename T> class Singleton { public://通过删除拷贝构造…...
Chatmark:Slack聊天记录自动化转Markdown文档的利器
1. 项目概述:从“聊天记录”到“结构化文档”的桥梁如果你和我一样,经常需要从各种即时通讯工具(比如Slack、Teams,甚至是微信工作群)的聊天记录里,整理会议纪要、提取待办事项,或者把一次技术讨…...
蜡笔变蜡烛:DIY分层香薰蜡烛的材料原理与制作实践
1. 项目概述:当蜡笔遇见蜡烛,一次关于气味与色彩的记忆重塑不知道你有没有过这样的体验:打开一盒崭新的蜡笔,那股混合着油脂、黏土与淡淡皂感的独特气味扑面而来,瞬间就能将你拉回铺满画纸的童年午后。Crayola蜡笔的官…...
开源项目如何从“用爱发电”变成可持续收入?
一、为什么测试领域的开源项目更需要可持续收入?在测试领域,开源工具早已成为基础设施。从UI自动化的Selenium、移动端的Appium,到性能压测的JMeter、新一代端到端框架Playwright,几乎每个测试工程师的日常工作都构建在开源软件之…...
基于Pomerium构建零信任网关:统一内部服务访问的实践指南
1. 项目概述与核心价值 最近在折腾一个内部应用,想把几个不同技术栈的服务(比如一个Go写的API、一个Python的Web界面、一个Java的管理后台)统一到一个入口,并且能安全地访问。直接暴露到公网肯定不行,用传统的反向代理…...
别再硬编码IP了!深入Nacos 2.x源码,看它如何‘智能’又‘犯错’地选择服务端地址
Nacos 2.x服务端IP地址选择机制深度解析与实战调优 在分布式系统架构中,服务注册与发现是微服务架构的核心基础设施。作为阿里巴巴开源的服务发现和配置管理平台,Nacos凭借其简单易用、功能强大等特点,已成为众多企业微服务架构的首选组件。…...
监听bean在容器中注入情况
直接上代码,原理就是 通过环境监听器/*** 调试监听器* author shadow*/ public class DebugListener {Autowiredprivate ApplicationContext applicationContext;EventListener(ApplicationReadyEvent.class)public void onApplicationReady() {System.out.println(…...
可编程投币器集成指南:从硬件连接到游戏积分映射
1. 项目概述:从“投币”到“积分”的硬件魔法“Insert Coin”——对于任何一个经历过街机黄金年代的玩家来说,这三个字背后所承载的,远不止是启动游戏的指令,更是一种充满仪式感的期待。如今,我们大多通过模拟器上的一…...
树莓派AI智能体进化框架:轻量级边缘持续学习实践
1. 项目概述:一个面向树莓派的AI智能体进化框架最近在折腾树莓派上的AI应用时,发现了一个挺有意思的项目,叫pk-pi-hermes-evolve。光看这个名字,就能拆出不少信息量:“pk”可能指代项目作者或一个特定系列,…...
从系统光标到个性化指针:动漫主题鼠标指针的完整实现指南
1. 项目概述:从“二次元”到“生产力”的鼠标指针革命如果你和我一样,每天有超过8小时的时间与电脑为伴,那么鼠标指针就是你最亲密的“数字伙伴”。它可能是一个单调的白色箭头,也可能是一个乏味的沙漏。但你想过吗?这…...
DPDK 教程(四):Offload、Flow、NUMA、IOVA 与性能剖析
DPDK 教程(四):Offload、Flow、NUMA、IOVA 与性能剖析 本文对应学习路径第四步:在已能跑通 多队列转发 后,把系统从“能跑”推到“可解释、可优化”。重点放在:硬件卸载的正确语义、Flow 与 RSS 的分工、NU…...
