如何给openai的assistant添加Functions

我的chatgpt网站:

https://chat.xutongbao.top/

{"name": "get_current_datetime","description": "获取北京时间,当前时间,当前日期","parameters": {"type": "object","properties": {"city": {"type": "string","description": "城市,例如:北京"}},"required": ["city"]}
}
const assistantsAddMessageOnAzure = async (req, res) => {let {message = { role: 'user', content: '你好' },apiKey = 'sk-xxx',assistantId = 'asst_xxx',threadId = '',} = req.bodyif (apiKey === apiKeyOnServer) {let errorData = {}let count = 0let isSuccess = truelet resultMessages = []let thread = {}try {if (threadId) {let oldThread = {}try {oldThread = await openai.beta.threads.retrieve(threadId) //update retrieve} catch (error) {console.log(error)}if (oldThread.id) {thread = oldThread} else {thread = await openai.beta.threads.create()console.log('thread', thread)}} else {thread = await openai.beta.threads.create()console.log('thread', thread)}const messageRes = await openai.beta.threads.messages.create(thread.id,message)console.log('messageRes', messageRes)const run = await openai.beta.threads.runs.create(thread.id, {assistant_id: assistantId,})const handleProcessing = async () => {await openai.beta.threads.runs.retrieve(thread.id, run.id).then(async (processRes) => {if (processRes.status === 'completed') {resultMessages = await openai.beta.threads.messages.list(thread.id)} else if (processRes.status === 'requires_action') {let toolCalls =processRes.required_action.submit_tool_outputs.tool_callsif (Array.isArray(toolCalls) && toolCalls.length > 0) {let tool_outputs = []for (const toolCall of toolCalls) {let functionName = toolCall.function.nameif (functionName === 'get_current_datetime') {let myArguments = toolCall.function.argumentsmyArguments = myArguments ? JSON.parse(myArguments) : {}let currentTimeInChina = getCurrentTimeForChina()let content = moment(currentTimeInChina).format('YYYY-MM-DD HH:mm:ss')tool_outputs.push({tool_call_id: toolCall.id,output: content,})}}await openai.beta.threads.runs.submitToolOutputs(thread.id,run.id,{tool_outputs,})await handleProcessing()}} else {console.log('progress', Date(), count, processRes)count++//2分钟还在等待if (count > 12 * 2) {let runCancel = await openai.beta.threads.runs.cancel(thread.id,run.id)console.log('runCancel', runCancel)isSuccess = falseres.send({code: 400,data: {},message: `请求超时,自动取消`,})return}await sleep(5000)await handleProcessing()}})}await sleep(1000)await handleProcessing()// const response = await openai.beta.threads.del(thread.id)// console.log('response', response)} catch (error) {res.send({code: 400,data: {errorData,},message: `失败-机器人无应答【3】,${error}`,})return}if (isSuccess) {console.log('resultMessages', resultMessages)res.send({code: 200,data: {thread,errorData,resultMessages,},message: '成功',})} else {res.send({code: 400,data: {isSuccess,errorData,},message: '失败,机器人无应答【7】',})}} else {res.send({code: 400,message: '失败:参数apiKey',})}
}

在美国的服务器上获取北京的当前时间:

function getCurrentTimeForChina() {// 获取当前的日期和时间const now = new Date()// 转换为UTC时间const nowUtc = new Date(now.getTime() + now.getTimezoneOffset() * 60000)// 中国时区(北京时间)是 UTC+8,所以加上8小时的毫秒数const chinaTime = new Date(nowUtc.getTime() + 8 * 60 * 60 * 1000)return chinaTime
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《GreenPlum系列》GreenPlum初级教程-GreenPlum详细入门教程

文章目录 GreenPlum详细入门教程第一章 GreenPlum介绍1.MPP架构介绍2.GreenPlum介绍3.GreenPlum数据库架构4.GreenPlum数据库优缺点 第二章 GreenPlum单节点安装1.Docker创建centos容器1.1 拉取centos7镜像1.2 创建容器1.3 进入容器1.4 容器和服务器免密操作1.4.1 生成密钥1.4.…

1.8 万 Star!这款 Nginx 可视化配置工具太强了

NginxConfig简介 Nginx Config 是一个强大的 Nginx 配置文件生成器,号称配置 Nginx 服务器所需的唯一工具。 正因为 Nginx 功能强大,所以针对其各个功能的配置项会显得特别多,对于我们来说要记住那么多配置是一件十分头疼的事,甚…

仰暮计划|“去咱们那的小坝上吹吹风,看看黄河的水势有没有上涨…”

从来不觉得时间过得有多快,只是日月不断的更替。到了今天,我才不得不承认时间已经过去了很久很久,我的爷爷也已不再年轻。我是爷爷奶奶带大的,自从我记事起,他们就一直陪伴着我了。那时候爸爸妈妈外出打工,…

spring-framework6.x版本源码构建

6.x.修改gradle仓库构建 IDEA版本及gradle构建设置 在gradle指定仓库地址/wrapper/dists/找到与gradle wrapper相对应的gradle版本,在gradle的init.d/目录下新建init.gradle文件,内容如下: allprojects{repositories {mavenLocal()maven { …

41.while语句

目录 一.什么是while语句 二.语法 三.执行流程图 四.举例 五.视频教程 一.什么是while语句 只要条件为真,while循环中的语句会一直重复执行。 二.语法 while(表达式){//代码块 } 三.执行流程图 从流程图可以看出,while循环…

【技术】SpringBoot 接口怎么加密解密

1. 介绍 在我们日常的Java开发中,免不了和其他系统的业务交互,或者微服务之间的接口调用 如果我们想保证数据传输的安全,对接口出参加密,入参解密。 但是不想写重复代码,我们可以提供一个通用starter,提…

MySQL基础(一)

学习数据库的目的: 实现数据持久化到本地。使用完整的管理系统统一管理,可以实现结构化查询,方便管理。 一、数据库概述 数据库(DataBase) 为了方便数据的存储和管理,它将数据按照特定的 规则存储在磁盘…

Redis面试

1.说说什么事redis Redis是一种基于键值对的NoSql数据库。 Redis中的value支持string(字符串)、hahs(哈希)、list、set、zset(有序集合)、bitmaps(位图),HyperLoglog等数…

基于机会网络编码(COPE)的卫星网络路由算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1机会网络编码(COPE)概述 4.2COPE算法原理 4.2.1 编码机会预测 4.2.2 编码决策 4.2.3 数据包编码 4.2.4 数据包传输 4.2.5 数据包解码 5.完整程序 1.程序功能…

【前端web入门第一天】02 HTML图片标签 超链接标签

文章目录: 1.HTML图片标签 1.1 图像标签-基本使用1.2 图像标签-属性1.3 路径 1.3.1 相对路径 1.3.2 绝对路径 2.超链接标签 3.音频标签 4.视频标签 1.HTML图片标签 1.1 图像标签-基本使用 作用:在网页中插入图片。 <img src"图片的URL">src用于指定图像…

山体滑坡监测预警系统-gnss位移监测站

GNSS山体滑坡位移监测站是一种利用全球导航卫星系统&#xff08;GNSS&#xff09;进行山体滑坡位移监测的设备。它通过接收和处理GNSS卫星信号&#xff0c;能够实时监测山体的位移变化&#xff0c;并将数据传输到后端系统进行分析和处理。 GNSS山体滑坡位移监测站具有高精度、…

Maven项目install时,报java版本错误

maven项目执行了很多次&#xff0c;突然就install失败了&#xff0c;抛出异常信息&#xff1a; org/springframework/boot/maven/repackagemojo has been compiled by a more recent version of the java Runtime&#xff08;class file version 61.0&#xff09;,this of the…