一个用聊天的方式让ChatGPT写的线程安全的环形List

1. 背景

最近在基于ChatGPT接口写一个聊天机器人,由于官方API未提供直接进行会话上下文关联的方法,因此只能把用户近期的会话信息一股脑的传给过去,并且策略定为:用户最近5分钟的中最多10条对话。为了实现这个要求,考虑用一个环形List去存储用户近期对话信息,由于嫌弃github上看到的写的太复杂,也不想花时间到处找了索性直接让chatGPT帮我去写。通过几次来回的与ChatGPT的聊天,最终的代码如下,由于觉得ChatGPT写的挺好,因此贴出来给大家分享一下。
另外,之所以需要几次的来回的聊天是因为:
1、chatGPT写的代码不一定对(可能会有Bug),需要自己Review、测试后再让ChatGPT自己去改进或者修改。
2、需要不断的给它提需求,比如,这个线程安全的环形List,首先写的不保障线程安全,然后不支持使用Iterable循环迭代。

ConcurrentCircularList最终代码如下:

import java.util.Iterator;
import java.util.NoSuchElementException;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;public class ConcurrentCircularList<T> implements Iterable<T> {private Object[] elements;private int size;private int headIndex;private int tailIndex;private Lock lock = new ReentrantLock();public ConcurrentCircularList(int capacity) {if (capacity < 1) {throw new IllegalArgumentException("Capacity must be at least 1");}this.elements = new Object[capacity];this.size = 0;this.headIndex = 0;this.tailIndex = 0;}/*** add** @param element*/public void add(T element) {this.lock.lock();try {this.elements[this.tailIndex] = element;if (this.size == this.elements.length) {this.headIndex = (this.headIndex + 1) % this.elements.length;} else {this.size++;}this.tailIndex = (this.tailIndex + 1) % this.elements.length;} finally {this.lock.unlock();}}/*** get** @param index* @return*/public T get(int index) {this.lock.lock();try {if (index < 0 || index >= this.size) {throw new IndexOutOfBoundsException("Index " + index + " is out of bounds");}int i = (this.headIndex + index) % this.elements.length;return (T) this.elements[i];} finally {this.lock.unlock();}}/*** size** @return*/public int size() {this.lock.lock();try {return this.size;} finally {this.lock.unlock();}}/*** isEmpty** @return*/public boolean isEmpty() {this.lock.lock();try {return this.size == 0;} finally {this.lock.unlock();}}@Overridepublic Iterator<T> iterator() {return new CircularListIterator();}private class CircularListIterator implements Iterator<T> {private int current;private boolean removable;private int remaining;public CircularListIterator() {this.current = ConcurrentCircularList.this.headIndex;this.removable = false;this.remaining = ConcurrentCircularList.this.size;}@Overridepublic boolean hasNext() {return this.remaining > 0;}@Overridepublic T next() {if (!this.hasNext()) {throw new NoSuchElementException();}T element = (T) ConcurrentCircularList.this.elements[this.current];this.removable = true;this.current = (this.current + 1) % ConcurrentCircularList.this.elements.length;this.remaining--;return element;}@Overridepublic void remove() {if (!this.removable) {throw new IllegalStateException();}int deleteIndex = (this.current - 1 + ConcurrentCircularList.this.elements.length) % ConcurrentCircularList.this.elements.length;this.current = (this.current - 1 + ConcurrentCircularList.this.elements.length) % ConcurrentCircularList.this.elements.length;ConcurrentCircularList.this.elements[deleteIndex] = null;ConcurrentCircularList.this.headIndex = this.current;ConcurrentCircularList.this.size--;this.remaining--;this.removable = false;}}public static void main(String[] args) {ConcurrentCircularList<String> list = new ConcurrentCircularList<>(10);for (int i = 0; i < 20; i++) {list.add("item" + i);}System.out.println("list.size() = " + list.size);for (String item : list) {System.out.println(item);}}
}

2. 聊天记录简述

2.1 首次交流

在这里插入图片描述

2.2 有Bug让其自己修改

在这里插入图片描述

3. 聊天机器人设计要点

  • 由于关联会话需要根据用户近期对话信息,而用户近期对话属于高读高写数据,且对数据高可用性不高(聊着聊着后面新的会话信息就会把老的覆盖),因此考虑使用本地缓存。之前在《本地缓存代码实例及常见缓存淘汰策略简介》博文中对常用的本地缓存相关进行过介绍,从介绍中可以看出,使用W-TinyLFU淘汰策略的Caffeine比较合适,因此本地缓存可以直接选型为它。
  • 考虑实现一个猴版的Akka邮箱机制,目的为:1)解耦上游消息服务 -> 聊天机器人服务 -> OpenAI;2)为将来可能需要实现的双向流控(上游消息服务 -> 聊天机器人服务流控;聊天机器人服务 -> OpenAI流控)留一个统一处理的口子。3)由于使用了本地缓存,那么就一定需要保障RPC路由落点的一致性,在这个邮箱机制下可以实现本节点RPC路由不走网络(虽然AKKA本身并未实现这个能力,不过大家可以参考我之前的博客:《【JAVA版Akka】一个使用JAVA基于Actor模型现实的RPC》,我的实现中具备了同节点RPC不走网络的能力)。

4. 总结

个人认为ChatGPT目前还不具备替代程序猿的能力,因为代码检查、提出完善意见、系统设计这些工作做还是需要人去完成,把ChatGPT当成工具还是其目前真正的定位。

最后附上聊天机器人服务实现的完整介绍与源码成品:

《一个艺术成分很高的ChatGPT聊天机器人服务的设计与实现》https://blog.csdn.net/camelials/article/details/130064321

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

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

相关文章

基于 ChatGPT API 的划词翻译浏览器插件

OpenAI Translator 需要填入ChatGPT API 浏览器支持划词翻译 参考 openai-translator

和ChatGPT的初次对话

ChatGPT是人工智能研究实验室OpenAI新推出的一种人工智能技术驱动的自然语言处理工具&#xff0c;使用了Transformer神经网络架构&#xff0c;也是GPT-3.5架构&#xff0c;这是一种用于处理序列数据的模型&#xff0c;拥有语言理解和文本生成能力&#xff0c;尤其是它会通过连接…

openai翻译器-chatgpt批量翻译

openai翻译器 OpenAI翻译器是一款高效的自然语言处理工具&#xff0c;可以将大量的文本快速翻译成多种语言。它基于最先进的神经网络技术&#xff0c;能够把不同语言之间的交流变得更加容易和无缝。 如果你需要翻译大量的文件或文章&#xff0c;OpenAI翻译器是您的最佳选择。…

程序员面试、算法研究、编程艺术、机器学习、AIGC/ChatGPT等6大系列集锦

作者&#xff1a;July&#xff0c;七月在线创始人兼CEO、结构之法算法之道blog之博主 时间&#xff1a;2010年10月-2023年7月&#xff0c;一直在不断更新中.. 出处&#xff1a;http://blog.csdn.net/v_JULY_v 前言 开博10年有余&#xff0c;回首这10余年&#xff0c;自己一开始…

使用ChatGPT API创建Python文档,竟然如此简单

如何用 ChatGPT OpenAPI 生成 Python 文档字符串 微信搜索关注《Python学研大本营》&#xff0c;加入读者群&#xff0c;分享更多精彩 为Python代码编写文档是一项耗时且繁琐的任务&#xff0c;但它是开发可维护和可重用代码的重要部分。程序员中流传着一个笑话&#xff1a;程序…

新书推荐:《AIGC未来已来——迈向通用人工智能时代》

新书推荐&#xff1a;《AIGC未来已来——迈向通用人工智能时代》 导言 AIGC为何引发关注&#xff1f; ChatGPT会成为人工智能的拐点吗&#xff1f; GPT-4未来已来&#xff0c;奇点时刻该如何面对&#xff1f; 人类的创新能力会被AIGC替代吗&#xff1f; 当下有哪些典型的AIGC变…

借助ChatGPT,我写了个“用户故事地图”

概要&#xff1a;本文从Kent Beck的上周的推文谈起&#xff0c;介绍了一次使用ChatGPT构建React应用的实际经历和体验&#xff0c;展示了ChatGPT在编程框架和语言细节、通用业务领域的常识、按要求处理编程细节、代码理解和缺陷定位方面的能力&#xff0c;并在此基础上&#xf…

提示工程玩转 ChatGPT

Prompt engineering is the skill of the future. 目录&#xff1a; 1. 简介 (Introduction) 2. 提示指南 (Prompt Guidelines) 2.1 指令要清晰明确 2.2 给模型时间思考 3. 迭代提示 (Iterative Prompt) 3.1 迭代过程 3.2 案例展示 4. 文本概括 (Text Summarization) 4.1 单文本…

【PPT】《21.ChatGPT三分钟搞定PPT制作(ChatGPT + MindShow)》- 知识点目录

《21.ChatGPT三分钟搞定PPT制作(ChatGPT MindShow)》 1. 获取PPT内容 整理一份PPT大纲&#xff0c;主题是如何高效阅读一本书&#xff0c;请注意&#xff0c;回答的内容采用markdown形式呈现。# 如何高效阅读一本书## 1. 确定阅读目标- 提升知识水平- 学习新技能- 了解某个领…

ChatGPT教你如何用Python和Matplotlib绘图(上)

想学习用 Python 绘图吗&#xff1f;ChatGPT 将为您提供帮助。 微信搜索关注《Python学研大本营》&#xff0c;加入读者群&#xff0c;分享更多精彩 该项目要求 ChatGPT 教您如何生成用于创建绘图和可视化的 Python 代码。只需简要描述您要创建的绘图&#xff0c;ChatGPT 就会…

ChatGPT专业应用:生成书籍推荐语

正文共 1078 字&#xff0c;阅读大约需要 7 分钟 书评人等必备技巧&#xff0c;您将在7分钟后获得以下超能力&#xff1a; 生成书籍推荐语 Beezy评级 &#xff1a;A级 *经过寻找和一段时间的学习&#xff0c;一部分人能掌握。主要提升效率并增强自身技能。 推荐人 | Kim 编辑…

如何用ChatGPT做书籍、报告、文件的读取与互动式问答?故事人物活起来

【ChatGPT】前些天发现了一个巨牛的人工智能学习电子书&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;无广告&#xff0c;忍不住分享一下给大家。&#xff08;点击查看学习资料&#xff09; 该场景对应的关键词库&#xff08;15个&#xff09;&#xff1a; 书籍、报告…

一周AIGC丨中国首份AIGC监管文件正式出台,美国AIGC独角兽开始裁员

无规矩不成方圆&#xff0c;继国家人工智能标准化总体组大模型专题组正式启动大模型测试国家标准制订后&#xff0c;中国首份AIGC监管文件正式出台。海外方面有冷有热&#xff0c;美国估值15亿美元的AIGC独角兽开启裁员&#xff0c;英伟达在大模型军备竞赛中躺赢&#xff0c; A…

男子用ChatGPT编假新闻被采取刑事强制措施;苹果M3芯片下半年量产;Safari超Edge,成第二大桌面浏览器|极客头条

「极客头条」—— 技术人员的新闻圈&#xff01; CSDN 的读者朋友们早上好哇&#xff0c;「极客头条」来啦&#xff0c;快来看今天都有哪些值得我们技术人关注的重要新闻吧。 整理 | 梦依丹 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 一分钟速览新闻点&…

​男子用ChatGPT编假新闻被采取刑事强制措施;苹果M3芯片下半年量产;Safari超Edge,成第二大桌面浏览器|极客头条...

「极客头条」—— 技术人员的新闻圈&#xff01; CSDN 的读者朋友们早上好哇&#xff0c;「极客头条」来啦&#xff0c;快来看今天都有哪些值得我们技术人关注的重要新闻吧。 整理 | 梦依丹 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 一分钟速览新闻点&#…

复刻ChatGPT语言模型系列-(一)基座模型选取

前言 今天开始我将会推出一系列关于复刻ChatGPT语言模型的博文。本系列将包括以下内容&#xff1a; 复刻ChatGPT语言模型系列-&#xff08;一&#xff09;基座模型选取复刻ChatGPT语言模型系列-&#xff08;二&#xff09;参数高效微调复刻ChatGPT语言模型系列-&#xff08;三…

AIGC 综述 2023:A History of Generative AI from GAN to ChatGPT

GAI&#xff1a;发展历史&#xff0c;核心技术&#xff0c;应用领域以及未来发展 摘要1、引言1.1、主要贡献1.2、组织结构 2、生成式AI的发展历史2.1、NLP领域的发展2.2、CV领域的发展2.3、CV与NLP的融合 3、AIGC的核心技术基础3.1、经典基础模型3.1.1、Transformer3.1.2、Pre-…

AIGC/ChatGPT这么火,相关的AI产品岗,真的有变多吗?_最新AI产品经理求职动态(28)...

‍最近咱们社群的“AI产品经理求职季”活动里&#xff0c;有些特别的发现和感触&#xff0c;近期求职的AI产品经理或AI企业需求方&#xff0c;值得看看—— 目录 一、最近AIGC/ChatGPT这么火&#xff0c;相关的AI产品岗&#xff0c;真的有变多吗&#xff1f; 二、还有哪些方向的…

ChatGPT吹响AIGC的竞赛“号角”,中国企业依然能“翻盘”

‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 “python的dataframe中如何基于某一条件对列数据做筛选”&#xff0c;刚学习python不久的数据猿一名记者通过ChatGPT问到&#xff0c;不到1s的时间内&#xff0c;ChatGPT给予了非常详细、准确的解答&#xff0c;如下图所示。…

ChatGPT与AIGC,新世界的创造者

AI的进步是惊人的&#xff0c;但随着 AI技术的发展&#xff0c;人们的创造性和创造性也受到了极大的质疑&#xff0c;很多人都开始利用 AI来进行自己的作品。所以&#xff0c;人工智能技术已经发展到了何种程度&#xff1f; 我们造了众神&#xff0c;他们的束缚也会解开。 你在…