java集成chatGpt完整案例代码(效果和官网一样逐字输出)

要集成chatGpt参考我上一篇文章即可。但是,如果要实现官网一样的效果,逐字输出,难度就提升了不少了。经过在官网的研究发现它应该是采用了SSE技术,这是一种最新的HTTP交互技术。SSE(Server-Sent Events):通俗解释起来就是一种基于HTTP的,以流的形式由服务端持续向客户端发送数据的技术。相比较WebSocket更加轻量了。有了SSE,我们就可以实现,一次HTTP请求,可以逐步获取后端内容并及时输出展示,也就可以实现ChatGpt官网的效果了。下面给出简单的实现代码

后端核心代码

@Controller
@RequestMapping("/chat")
public class ChatController {/*** 暂存消息(由于前端EventSource对象仅支持Get请求,故消息通过POST发送到后端后进行中转)*/Map<String, String> msgMap = new ConcurrentHashMap<>();@AutowiredChatService chatService;/*** 发送消息** @param msg 消息* @return 消息ID*/@ResponseBody@PostMapping("/sendMsg")public String sendMsg(String msg) {String msgId = IdUtil.simpleUUID();msgMap.put(msgId, msg);return msgId;}/*** 对话** @param msgId 消息ID* @return SseEmitter*/@GetMapping(value = "/conversation/{msgId}", produces = MediaType.TEXT_EVENT_STREAM_VALUE)public SseEmitter conversation(@PathVariable("msgId") String msgId) {SseEmitter sseEmitter = new SseEmitter();String msg = msgMap.remove(msgId);//调用流式会话服务chatService.streamChatCompletion(msg, sseEmitter);//及时返回SseEmitter对象return sseEmitter;}
}

前端核心代码

var eventSource = new EventSource('http://localhost:8080/chat/conversation/'+data)eventSource.addEventListener('open', function(e) {console.log("EventSource连接成功");});eventSource.addEventListener("message", function(evt){var data = evt.data;var json = JSON.parse(data);var content = json.content ? json.content : '';content = content.replaceAll('\n','<br/>');console.log(json)var outputBody = $('#outputTxt');outputBody.html(outputBody.html()+content);var outputCard = $('#outputCard');var scrollHeight = outputCard[0].scrollHeight;outputCard.scrollTop(scrollHeight);});eventSource.addEventListener('error', function (e) {console.log("EventSource异常:" + e)});

效果图

完整项目代码

https://github.com/hdwang123/GptTest

感想

在调研这个技术的时候,遇到很多挑战,虽然艰难好在最终都克服了。主要有以下几个方面的问题:

1. SSE技术仅支持GET请求,这个查了相关文章有第三方库可以实现POST,由于我这里只是做个简单的例子,所以不想再去弄什么第三方库。于是终于想到了办法,就是在后端进行消息暂存:先用POST请求将数据提交到后端,返回一个消息ID,然后再用使用SSE技术提交消息ID建立连接。

2. SSE向前端send的消息总是一把输出,并没有实现逐字输出效果。折腾了半天终于从SSE源码中看到了解决方案。那就是GetMapping控制器方法必须及时返回,要做到这一点,send消息方法的调用必须在新的线程中进行调用,我用@Async解决了

3.SSE向前端输出英文的时候丢失空格,所有英文单词挤在一起了,哎!这个我一开始是直接发送消息内容的,发现英文单词前面的空格丢失了。没办法,改成现在发送json对象字符串的方式,保证了空格不丢失。

4. 前端样式调整问题,主要遇到了滚动条自动滚动到div底部失效问题,scrollTop设置值始终为0。看了好多文章,也找不到解决方案。后来看到别人写的是两个div,灵感来了。我也用两个div,父div设置滚动,子div设置内容,这样就搞定了!

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

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

相关文章

【程序源代码】ChatGPT Java Api

“ 关键字: “ChatGPT AI 人工智能" 01 ———— 【总体介绍】 ChatGPT Java Api 使用 maven <dependency><groupId>com.github.plexpt</groupId><artifactId>chatgpt</artifactId><version>1.1.2</version> </dependency…

体验使用 InsCode AI 创作助手 来帮我完成一篇博客

&#x1f947; 版权: 本文由【墨理学AI】原创首发、各位读者大大、敬请查阅、感谢三连 &#x1f389; 声明: 作为全网 AI 领域 干货最多的博主之一&#xff0c;❤️ 不负光阴不负卿 ❤️ 文章目录 InsCode AI 创作助手 它来啦回答不满意可以要求重新生成在输入 prompt 时&#…

厉害了!北大3位硕博生搞出ChatGPT版Excel!动动嘴就能自动处理表格……免费用!...

来源&#xff1a;量子位 做Excel表&#xff0c;真就动动嘴就够了&#xff01; 看&#xff0c;输入想要干的事&#xff1a;给学生成绩排个名吧。 简单敲个回车&#xff0c;表格唰一下就列好了&#xff01; 检查一遍也没错。 还能跨表格处理。 比如标记出两张不同表格中排名都在前…

「原驼」炸场:跑分达ChatGPT的99%,人类难以分辨!

源 | 量子位 大家好&#xff0c;这里是 NewBeeNLP。羊驼家族又出新品&#xff0c;直接炸场&#xff01;自动测试分数达到ChatGPT的99.3%&#xff0c;人类难以分辨两者的回答…… 这是开源大模型最新成果&#xff0c;来自羊驼家族的又一重磅成员——华盛顿大学原驼&#xff08;G…

《用ChatGPT自学的正确打开方式》

丰色 发自 凹非寺量子位 | 公众号 QbitAI 这两天&#xff0c;一个用ChatGPT进行自学的免费工具火了&#xff1a; 它叫AIbus&#xff0c;主界面是一块白板&#xff0c;只需写下你想探索的任何主题&#xff0c;比如“傅立叶变换”&#xff0c;它就会在几秒之内给出n个建议。 然后…

「实战」将多种AI工具整合到游戏开发工作流;AI应用推荐writeout;ControlNet新手实操流程图;ChatGPT复现之路 | ShowMeAI日报

&#x1f440;日报&周刊合集 | &#x1f3a1;生产力工具与行业应用大全 | &#x1f9e1; 点赞关注评论拜托啦&#xff01; &#x1f916; 『Notion AI 这波大赚』一个月内&#xff0c; AI 为 Notion 带来至少1000万美金ARR 作为最早一批接入 ChatGPT 的产品&#xff0c;Not…

从ChatGPT到Auto-GPT,自主人工智能真的要来了吗?

随着ChatGPT的持续爆火&#xff0c;人们在使用ChatGPT的时也发现了它的局限性&#xff0c;就是需要使用者自己来给GPT提示&#xff08;prompt&#xff09;。 如果你想感受ChatGPT强大&#xff0c;又没有OpenAI账号&#xff0c;可以关注《可立AI科技》这个微信公众号&#xff0c…

编辑部已成羊村,这几天幸亏有ChatGPT(doge)

梦晨 羿阁 发自 凹非寺量子位 | 公众号 QbitAI 坏事了&#xff0c;AI真的来抢饭碗了。 还是我的饭碗&#xff01; 这两天你们看的推送&#xff0c;有些标题是AI帮忙取的&#xff0c;有些文章甚至由AI完成了主要工作。 我呢&#xff1f;我不过是打打下手&#xff0c;加些过渡句&…

我用 ChatGPT 学设计模式之访问者模式

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;蚂蚁集团高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《EffectiveJava》独家解析》专栏作者。 热门文章推荐…

Spring Cloud Gateway路由到Amazon S3签名失败处理

Spring Cloud Gateway路由到Amazon S3签名失败处理 背景 最近在预研统一存储网关&#xff0c;想到就是使用Spring Cloud Gateway作为网关的入口&#xff0c;再反向代理到S3对象存储服务器。 软件版本 网关&#xff1a;Spring Cloud Gateway 3.1.2 s3对象存储&#xff1a;m…

基于java(springboot)和go-cqhttp实现QQ机器人

目录 yh-qqrobot机器人简介go-cqhttp搭建1.下载应用2.生成bat文件3. 初始化项目4. 配置5. 运行项目 yh-qqrobot搭建搭建后端1. 导入sql文件2. 配置文件3. 导入到idea 搭建前端 yh-qqrobot机器人简介 yh-qqrobot是一个基于若依框和go-cqhttp集成的系统&#xff0c;一开始我只是揣…

【基于Flink的城市交通实时监控平台】需求一:卡口车辆超速情况检测

案例需求&#xff1a; 从kafka的topic-car中读取卡口数据&#xff0c;将超速车辆写入mysql的select * from t_speeding_info表&#xff0c;当通过卡口的车速超过60就认定为超速 卡口数据格式&#xff1a; action_time long --摄像头拍摄时间戳&#xff0c;精确到秒, monitor…

chatgpt赋能python:Python下载工具:提高工作效率的不二之选

Python下载工具&#xff1a;提高工作效率的不二之选 作为一名有10年Python编程经验的工程师&#xff0c;我深知一款好用的下载工具对于我们的工作效率有多么重要。因此&#xff0c;在众多Python工具中&#xff0c;我多次选用了一些好用的下载工具&#xff0c;并且对它们进行了…

将 ChatGLM2-6B 部署成 OpenAI API 服务

将 ChatGLM2-6B 部署成 OpenAI API 服务 0. 背景1. FastChat 部署使用 ChatGLM2-6B1-1. 创建虚拟环境1-2. 克隆代码1-3. 安装依赖库1-4. 使用 UI 进行推理1-5. 使用 OpenAI API 方式进行推理 0. 背景 最近一直在使用 OpenAI 的 API 做一些学习和调研。使用 OpenAI 的 API&…

chatgpt赋能Python-python_downloader

优秀Python下载器的重要性 在今天的数字化世界中&#xff0c;下载器是一个极其重要的工具。随着互联网速度的不断提升和存储设备的容量的增加&#xff0c;大量的数据和文件需要及时下载到本地计算机或存储设备中。许多编程语言都提供了相应的下载库&#xff0c;但Python是其中…

免费使用GPT-4的N种方法

很多朋友因为各种限制无法开通#ChatGPT Plus,而申请OpenAI的GPT-4 API也要慢慢排队(我的也还没下来)。于是在这里我搜集了X个可以免费使用的方法。 注:哪有什么真正免费,只不过有人在替你付钱。因此下述的方法都有限制,也有些可能会很快失效。新方法随时更新。 方法一: …

ChatGPT 拓展资料:ChatGPT插件系统上线 卷众生入局,燃天地斗气!

ChatGPT 拓展资料:ChatGPT插件系统上线 卷众生入局,燃天地斗气! ChatGPT 插件 我们已经在 ChatGPT 中实现了对插件的初步支持。插件是专门为以安全为核心原则的语言模型设计的工具,可帮助 ChatGPT 访问最新信息、运行计算或使用第三方服务。 根据我们的迭代部署理念,我们…

ChatGPT开始联网,最后的封印解除了

省时查报告-专业、及时、全面的行研报告库 省时查方案-专业、及时、全面的营销策划方案库 【免费下载】2023年2月份热门报告合集 最新亲测国内可用ChatGPT使用教程&#xff08;3分钟搞定&#xff09; 文心一言、GPT3.5及GPT4应用测评对比报告 ChatGPT团队背景研究报告 ChatGPT的…

chatgpt最大的竞争对手-claude

介绍 Claude是Anthropic公司开发的AI聊天机器人&#xff0c;与ChatGPT类似&#xff0c;由OpenAI前副总裁创办。和虽然比不上GPT4&#xff0c;但在连续对话能力、写小说、编写代码、解释概念等方面表现出色。 Claude是Anthropic公司开发的大语言模型(LLM)&#xff0c;主要特点…

巧用 ChatGPT,让开发者的学习和工作更轻松

引言 随着人工智能技术的快速发展和广泛应用&#xff0c;ChatGPT 作为一种新兴的自然语言处理模型&#xff0c;近期备受瞩目&#xff0c;引发了广泛讨论。 ChatGPT 具有多种应用场景&#xff0c;既可以用作聊天机器人&#xff0c;实现智能问答和自然语言交互&#xff0c;也可…