【goframe】(2)实现上下文原理,在chatgpt中,经过折腾研究,要做好上下文需要把之前的信息都存储上,再一起发送过去就可以了

目录

  • 前言
    • 1,关于chatgpt api 接口
    • 2,增加上下文方法
    • 3,总结

前言


本文的原文连接是:
https://blog.csdn.net/freewebsys/article/details/129846766

未经博主允许不得转载。
博主CSDN地址是:https://blog.csdn.net/freewebsys
博主掘金地址是:https://juejin.cn/user/585379920479288
博主知乎地址是:https://www.zhihu.com/people/freewebsystem

1,关于chatgpt api 接口


上回已经研究明白使用 goframe做接口调用chatgtp的api。
但是不能保存上下文信息。
要是保存上下文信息需要保存之前存储的信息。
这个时候需要存储信息到mysql当中了。

只要设计好数据库表,就可使用工具生成一个Dao了。

2,增加上下文方法


只要把上次的内容再传递就可以了。

{max_tokens: 1000,model: 'gpt-3.5-turbo',temperature: 0.8,top_p: 1,presence_penalty: 1,messages: [{ role: 'user', content: '大众汽车介绍,', name: undefined },{role: 'assistant',content: '大众汽车是一家德国汽车制造商,成立于1937年。其总部位于沃尔夫斯堡,是全球最大的汽车制造商之一,旗下品牌包括大众、奥迪、保时捷、斯柯达等。大众汽车以高品质、稳定性和安全性著称,并在全球范围内销售汽车、商用车和摩托车等产品。',name: undefined},{ role: 'user', content: '再详细点', name: undefined },{role: 'assistant',content: '好的,以下是更详细的大众汽车介绍:\n' +'\n' +'大众汽车集团(Volkswagen Group)成立于1937年,总部位于德国沃尔夫斯堡,是一家全球领先的汽车制造商。旗下品牌包括大众、奥迪、保时捷、斯柯达、西雅特、兰博基尼、曼恩等,拥有全球超过100个生产工厂和销售网点。\n' +'\n' +'大众汽车以高品质、创新、环保和安全性能著称,并在全球范围内销售汽车、商用车和摩托车等产品。其主要产品系列包括小型车、紧凑型车、中型车、豪华车、SUV等,满足不同客户群体的需求。\n' +'\n' +'大众汽车一直致力于技术研发和创新,开发了一系列具有领先地位的技术和系统,如TSI引擎、DSG变速箱、模块化平台技术等。同时,大众汽车也积极推进电动汽车和智能出行领域的发展,投入大量资金和人力资源,为未来的可持续发展做出贡献。\n' +'\n' +'作为世界上最大的汽车制造商之一,大众汽车一直致力于社会责任和可持续发展,推行“向零排放”和“向零事故”等目标,为环保和交通安全做出贡献。',name: undefined},{ role: 'user', content: '加上销量', name: undefined }]
}

这样就可以保存对话session了。特别注意下,每次对会都有 parentMessageId 。
类似这样的id信息。记录父对话是杀。所以数据库表设计就是:

CREATE TABLE `user_session_message` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',`user_id` bigint(20) DEFAULT NULL COMMENT '用户id',`session_id` varchar(255) NOT NULL COMMENT '对话id',`answer_message_id` varchar(255) DEFAULT NULL COMMENT '回答id',`parent_message_id` varchar(255) DEFAULT NULL COMMENT '父对话id',`role` varchar(200) NOT NULL COMMENT '角色',`content` text DEFAULT NULL COMMENT '内容',`create_time` datetime NOT NULL COMMENT '创建时间',`update_time` datetime NOT NULL COMMENT '更新时间',`del_flag` bigint(20) DEFAULT '0' COMMENT '删除标记0:正常,id:删除',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1000001 DEFAULT CHARSET=utf8 COMMENT='用户聊天信息表';

说明逻辑:
把相关信息都存储到数据库中,并且都是按照顺序父节点一个一个存储的。
在查询的只要找到父节点对应的 session_id 然后再按照 Id 倒叙查询出 6条信息即可。

这个必须是偶数条信息,然后再拼接上当前的信息。
要是删除的时候直接删除问题和回答。一对删除。

role: ‘user’ 代表用户的提问信息。
role: ‘assistant’ 代表chatgpt 回答的信息。

然后就而可以进行开发了。把信息存储上。
使用工具生成代码:

使用goframe 创建dao
配置好文件,hack/config.yaml :


# CLI tool, only in development environment.
# https://goframe.org/pages/viewpage.action?pageId=3673173
gfcli:gen:dao:- link:     "mysql:root:root@tcp(127.0.0.1:3306)/chatgpt"tables:   "user_session_message"jsonCase: "CamelLower"

然后创建数据库和表:

# 使用docker启动mysql服务:
docker run --name mysql -itd -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 mysql:5.7# 创建数据库和表
create database chatgpt default character set utf8mb4 collate utf8mb4_unicode_ci;device_info, CREATE TABLE `user_session_message` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',`user_id` bigint(20) DEFAULT NULL COMMENT '用户id',`session_id` varchar(255) NOT NULL COMMENT '对话id',`parent_message_id` varchar(255) DEFAULT NULL COMMENT '父对话id',`role` varchar(200) NOT NULL COMMENT '角色',`content` text DEFAULT NULL COMMENT '内容',`create_time` datetime NOT NULL COMMENT '创建时间',`update_time` datetime NOT NULL COMMENT '更新时间',`del_flag` bigint(20) DEFAULT '0' COMMENT '删除标记0:正常,id:删除',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1000001 DEFAULT CHARSET=utf8 COMMENT='用户聊天信息表';

使用goframe 生成dao类:

$ make dao
generated: internal/dao/user_session_message.go
generated: internal/dao/internal/user_session_message.go
generated: internal/model/do/user_session_message.go
generated: internal/model/entity/user_session_message.go
done!

然后就可以开发程序了。不讲究,直接在controller 里面调用dao的方法插入数据库即可。

## 这里使用了 gtime 时间:"github.com/gogf/gf/v2/os/gtime"var (m = dao.UserSessionMessage.Ctx(ctx))userMsg := entity.UserSessionMessage{SessionId: parentMsgId,ParentMessageId: parentMsgId,Content: prompt,Role: "user",CreateTime: gtime.Now(),UpdateTime: gtime.Now(),DelFlag: 0,}lastId, err := m.Data(userMsg).InsertAndGetId()if err == nil {g.Log().Printf(ctx, "########## insertId %d #######", lastId)}else{g.Log().Printf(ctx, "########## insert error %s #######", err)}resId, outStr := getChatResult(ctx, prompt, parentMsgId)assistantMsg := entity.UserSessionMessage{SessionId: parentMsgId,ParentMessageId: resId,Content: outStr,Role: "assistant",CreateTime: gtime.Now(),UpdateTime: gtime.Now(),DelFlag: 0,}assistantLastId, err := m.Data(assistantMsg).InsertAndGetId()if err == nil {g.Log().Printf(ctx, "########## insertId %d #######", assistantLastId)}else{g.Log().Printf(ctx, "########## insert error %s #######", err)}

3,总结


chatgpt开发对话上下文,一定要把数据都存储上。
使用比较原始的方法,直接在controller 上面编写dao 方法。
可以把上下文信息都保存起来,这样在查询的时候非常的方便。

本文的原文连接是:
https://blog.csdn.net/freewebsys/article/details/129846766

在这里插入图片描述

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

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

相关文章

chatgpt赋能python:Python中的with语句:简化上下文管理器的使用

Python中的with语句:简化上下文管理器的使用 在Python中,上下文管理器(context managers)用于处理在程序执行中打开和关闭文件、线程锁、数据库连接等资源的操作。一个上下文管理器需要定义__enter__和__exit__两个方法&#xff…

chatgpt赋能python:Python爬虫获取商品数据的方法

Python爬虫获取商品数据的方法 在当今的电商时代,获取商品数据是非常重要的一项工作。而使用Python编写爬虫程序则是实现这一目标的有效手段之一。 什么是Python爬虫? 简而言之,Python爬虫是指利用Python编写程序,对特定网站进…

chatgpt赋能python:Python爬取聊天记录:如何轻松获取数据并进行分析?

Python爬取聊天记录:如何轻松获取数据并进行分析? 在当今数字化时代,人们越来越依赖于网络交流。社交媒体和通讯应用程序如今非常流行,它们让人们随时随地与家人、朋友和同事保持联系。这些应用程序产生了大量聊天记录数据&#…

最新53家央企数字化转型路线图发布

ChatGPT狂飙160天,世界已经不是之前的样子。 新建了人工智能中文站https://ai.weoknow.com 每天给大家更新可用的国内可用chatGPT资源 中央企业是我国经济高质量发展的主力军、实体经济的顶梁柱,在推进两化融合和数字化转型中发挥着战略性支撑作用。 信…

甲醇,中国新能源汽车的另一种可能

贾浩楠 发自 凹非寺量子位 | 公众号 QbitAI 滚滚浓烟、刺鼻气味…煤化工产业给你的印象是这样吗? 颠覆认知的是,如今煤化工企业,不但可以做到低排放,废气还能重新产出新的能源。 焦化炉出来的废气,直接送进这些设备&am…

英伟达,不止于GPU

光子盒研究院 2013年至2023年这十年,有一家公司的市值翻了115倍、一跃成为美国股市回报率最高的公司——这就是英伟达。 黄仁勋出生于中国台湾,四岁随父母移民美国。1984年大学毕业,获得俄勒冈州立大学和斯坦福大学工程学位。 1993年&#xf…

TCP/IP IP地址概念与应用

作者简介:一名在校云计算网络运维学生、每天分享网络运维的学习经验、和学习笔记。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​​ 目录 前言 一.什么是IP地址 二.IP地址的组成 三.IP地址分类 A类IP地址 …

精仿某信即时通讯聊天安卓苹果双端APP源码11月更新版

源码介绍: 此源码之前发布过,现在更新了很多细节。更新如下: 手机端使用uniapp实现,目前最新支持 端安卓、 iOS端和H5端, 后期会继续适配小程序端、桌面端(windows、mac)和web端。 前端使用…

IOS模型和TCP/IP参考模型

一、OSI参考模型---开放系统互连参考模式OSI/RM ISO---国际标准化组织 (1)产生背景 各大厂商之间的设备是不兼容的; 各大厂商都有自己的协议; 用户购买、维护设备的成本过高 应用层: 为应用程序提供网络服务 表示…

【IP Phone】网络杂谈(5)之什么是IP Phone?

涉及知识点 什么是 IP Phone,IP Phone简介,网络电话,IP电话的理解, IP Phone的基本原理。深入了解IP Phone关键技术。 原创于:CSDN博主-《拄杖盲学轻声码》,更多内容可去其主页关注下哈,不胜感…

IP数据包(详解版)

1.IP数据包详解图 2,使用Wireshark抓包 (1)版本——占4位,指IP协议的版本目前的IP协议版本号为4(即IPv4)。 (2)首部长度——占4位,这里的值为20Bytes。 (3&am…

即时通讯开发之TCP/IP基本概念

在世界上各地,各种各样的电脑运行着各自不同的操作系统为大家服务,这些电脑在表达同一种信息的时候所使用的方法是千差万别。就好像圣经中上帝打乱 了各地人的口音,让他们无法合作一样。计算机使用者意识到,计算机只是单兵作战并不…

zg-ipchat 点对点聊天工具 1.00.05 已发布

pchat 点对点聊天工具 1.00.05 已发布。 zg-ipchat 是一款聊天工具。可实现简单的文本信息传输,无加密。 点对点直接通讯,无需中间服务器,支持 Pv6/IPv4 网络。 基于已公开的 IP Messenger 协议。使用"朋友清单"来区分好友与陌生人…

文心一言和new bing chat哪个强

我用夸克网盘分享了「fiddler汉化」,点击链接即可保存。 链接:https://pan.quark.cn/s/115f1b81c029 【AIGC专栏】 https://fzqxk86ywz.feishu.cn/sheets/GugIsI9zKhNaEwtJscbcgKFCn6b 【测试资料1.0】 https://fzqxk86ywz.feishu.cn/share/base/view/…

一文谈谈文心一言对比ChatGPT4.0的差距

对于想体验文心一言的朋友,可以进行申请尝试,快速入口 如果想体验ChatGPT的朋友,可以自行fq注册;但是由于现在限制注册并且不稳定,对于不会用梯子不想注册的朋友可以使用这个进行访问,快速入口 关于ChatGPT对我们的帮助,可以参考我往期博客 看到一篇国金证券的研报,…

和ChatGPT关于Swing music的一场对话(上篇)

什么是 Swing Music ? Swing Music 是一款漂亮的自托管音乐播放器,适用于您的本地音频文件。就像一个更酷的 Spotify …但带上你自己的音乐。 第一次在 reddit 上看到 Swing Music,就被其 UI 吸引了 但源码站点的releases 中只有 windows 和 …

chatgpt赋能python:Python怎么搜索文献

Python怎么搜索文献 Python 是一种流行的编程语言,因其便捷易用、拥有丰富的自然语言处理工具、以及大量可靠的第三方包而闻名。Python不仅在数据分析、机器学习和Web开发等领域都具有广泛的应用,而且也在学术界和研究领域受到欢迎。本文将告诉你Python…

chatgpt赋能python:Introduction

Introduction 在机器学习中,模型的训练是非常重要的步骤之一。模型训练意味着为数据拟合合适的参数,以便能够准确地预测未来的值。Python是一种功能强大的编程语言,提供许多库和框架来训练机器学习模型。在本文中,我们将探讨如何…

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

自ChatGPT 3.5/4 双双升级:更长,更便宜,更开放,更可控发出去之后,有朋友问怎么接入 API。‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍ 什么是函数调用? 函数调用指 Chat-GPT 模型会自动逻辑判断后,调用在代…

OpenAI 突然发布了一个 ChatGPT 的大更新

2023.06.14 凌晨,OpenAI 突然发布了一个 ChatGPT 的大更新。我关注的更新内容是:在 Chat Completions API 新增函数调用(Function call)功能 什么是函数调用? 开发者现在可以向 GPT 模型描述函数,并让模型…