怎么使用springboot+chatgpt+chatUI Pro开发智能聊天工具
哈喽!大家好,很高兴又见面了,我是golang学习网的一名作者,今天由我给大家带来一篇《怎么使用springboot+chatgpt+chatUI Pro开发智能聊天工具》,本文主要会讲到等等知识点,希望大家一起学习进步,也欢迎大家关注、点赞、收藏、转发! 下面就一起来看看吧!
一、技术介绍
1.chatgpt-java是一个OpenAI的Java版SDK,支持开箱即用。目前以支持官网全部Api。支持最新版本GPT-3.5-Turbo模型以及whisper-1模型。
2.Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。
3.ChatUI Pro 是在ChatUI 基础组件的基础上,结合阿里小蜜的最佳实践,沉淀和总结出来的一个开箱即用的,可快速搭建智能对话机器人的框架。它简单易上手,通过简单的配置就能搭建出对话机器人;同时它强大易扩展,通过丰富的接口和自定义卡片满足各种定制化需求。
二、项目介绍
本项目采用了GPT-3.5-Turb模型作为基础,通过springboot结合redis、chat-java以及chatUI Pro实现简单的人工智能机器人。因为访问openAI的API返回结果比较慢,项目中当前端将问题请求发送到后端后,后端会将生成一个UUID,返回前端,同时后端也会重新开启一个线程去访问openAI,当openAI返回结果后,后端将UUID做为key,openAI返回的结果做为value存储到redis中。前端会根据后端第一次请求的结果中UUID做为参数每个5s请求一次后端的answer接口,answer接口会根据UUID查询redis是否有值,直到后端answer接口返回结果后前端将结果输出给用户
三、项目搭建
1.创建springboot项目,项目命名mychatgpt。
2.导入项目pom的依赖
4.0.0 org.springframework.boot spring-boot-starter-parent 2.5.12 com.xyh mychatgpt 0.0.1-SNAPSHOT mychatgpt Demo project for Spring Boot 8 org.springframework.boot spring-boot-starter-data-redis org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-aop org.springframework.boot spring-boot-starter-test org.apache.logging.log4j log4j-api org.apache.logging.log4j log4j-to-slf4j test org.projectlombok lombok true org.apache.httpcomponents httpcore com.theokanning.openai-gpt3-java api 0.10.0 com.theokanning.openai-gpt3-java service 0.10.0 com.theokanning.openai-gpt3-java client 0.10.0 cn.hutool hutool-all 5.8.12 com.unfbx chatgpt-java 1.0.5 mysql mysql-connector-java 8.0.17 com.alibaba druid-spring-boot-starter 1.2.8 com.baomidou mybatis-plus-boot-starter 3.5.2 com.baomidou mybatis-plus-generator com.github.yulichang mybatis-plus-join 1.4.2 com.apifan.common common-random 1.0.19 junit junit test org.springframework.boot spring-boot-maven-plugin org.projectlombok lombok
3.编写chatGPT实现工具类
package com.xyh.mychatgpt.utils; import com.unfbx.chatgpt.OpenAiClient; import com.unfbx.chatgpt.entity.chat.ChatChoice; import com.unfbx.chatgpt.entity.chat.ChatCompletion; import com.unfbx.chatgpt.entity.chat.Message; import com.unfbx.chatgpt.entity.common.Choice; import com.unfbx.chatgpt.entity.completions.Completion; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import java.util.Arrays; import java.util.List; /** * @author xiangyuanhong * @description: TODO * @date 2023/3/21上午9:28 */ @Component public class ChatGPTUtils { @Value("${xyh.openai.key}") private String token; @Autowired private RedisUtils redisUtils; public void ask(String model,String question,String uuid){ StringBuffer result=new StringBuffer(); try { OpenAiClient openAiClient = new OpenAiClient(token, 3000, 300, 300, null); if("GPT-3.5-Turb".equals(model)){ // GPT-3.5-Turb模型 Message message=Message.builder().role(Message.Role.USER).content(question).build(); ChatCompletion chatCompletion = ChatCompletion.builder().messages(Arrays.asList(message)).build(); ListresultList = openAiClient.chatCompletion(chatCompletion).getChoices(); for (int i = 0; i < resultList.size(); i++) { result.append(resultList.get(i).getMessage().getContent()); } }else{ //text-davinci-003/text-ada-003 Completion completion = Completion.builder() .prompt(question) .model(model) .maxTokens(2000) .temperature(0) .echo(false) .build(); Choice[] resultList = openAiClient.completions(completion).getChoices(); for (Choice choice : resultList) { result.append(choice.getText()); } } }catch (Exception e) { System.out.println(e.getMessage()); result.append("小爱还不太懂,回去一定努力学习补充知识"); } redisUtils.set(uuid,result.toString()); } }
4.开发项目Controller类,用来与前端进行交互
package com.xyh.mychatgpt.controller; import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.StrUtil; import com.xyh.mychatgpt.utils.ChatGPTUtils; import com.xyh.mychatgpt.utils.R; import com.xyh.mychatgpt.utils.RedisUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletRequest; /** * @author xiangyuanhong * @description: TODO * @date 2023/2/28下午4:57 */ @RestController public class IndexController { @Autowired private RedisUtils redisUtils; @Autowired private ChatGPTUtils chatGPTUtils; @GetMapping("/ask") public R ask(String question,HttpServletRequest request) { String uuid=IdUtil.simpleUUID(); if (StrUtil.isBlank(question)) { question = "今天天气怎么样?"; } String finalQuestion = question; ThreadUtil.execAsync(()->{ chatGPTUtils.ask("GPT-3.5-Turb", finalQuestion,uuid); }); return R.ok().put("data",uuid); } @GetMapping("/answer") public R answer(String uuid){ String result=redisUtils.get(uuid); return R.ok().put("data",result); } }
5.前端页面开发,在项目templates目录创建index.html页面,并引入chatUI pro相关文件
滴答小爱
6.创建setup.js实现chatUI Pro与后端通信交换。
var bot = new ChatSDK({ config: { // navbar: { // title: '滴答小爱' // }, robot: { avatar: 'images/chat.png' }, // 用户头像 user: { avatar: 'images/user.png', }, // 首屏消息 messages: [ { type: 'text', content: { text: '您好,小爱为您服务,请问有什么可以帮您的?' } } ], // 快捷短语 // quickReplies: [ // { name: '健康码颜色',isHighlight:true }, // { name: '入浙通行申报' }, // { name: '健康码是否可截图使用' }, // { name: '健康通行码适用范围' }, // ], // 输入框占位符 placeholder: '输入任何您想询问的问题', }, requests: { send: function (msg) { if (msg.type === 'text') { return { url: '/ask', data: { question: msg.content.text } }; } } }, handlers: { /** * * 解析请求返回的数据 * @param {object} res - 请求返回的数据 * @param {object} requestType - 请求类型 * @return {array} */ parseResponse: function (res, requestType) { // 根据 requestType 处理数据 if (requestType === 'send' && res.code==0) { // 用 isv 消息解析器处理数据 $.ajaxSettings.async=false; var answer=""; var isOK=false; while(!isOK){ $.get("/answer",{uuid:res.data},function(result){ console.log(result.data) if(null != result.data){ isOK=true; answer=result.data; } },"json"); if(!isOK){ sleep(5000); } } $.ajaxSettings.async=true; return [{"_id":res.data,type:"text",content:{text:answer},position:"left"}]; } }, }, }); function sleep(n) { //n表示的毫秒数 var start = new Date().getTime(); while (true) { if (new Date().getTime() - start > n) { break; } } } bot.run();
7.项目搭建完成后启动springboot项目然后访问http://ip:端口就可以。项目最终效果:http://hyrun.vip/
四、项目展示
理论要掌握,实操不能落!以上关于《怎么使用springboot+chatgpt+chatUI Pro开发智能聊天工具》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

- 上一篇
- 在 Go 中通过字段符号查找标签

- 下一篇
- 2024年人工智能加速品牌营销转型的 9 大重点
-
- 文章 · java教程 | 1小时前 |
- Java类详解:定义与程序中的作用
- 246浏览 收藏
-
- 文章 · java教程 | 2小时前 |
- Java中DAO是什么?在MVC架构中的作用
- 309浏览 收藏
-
- 文章 · java教程 | 6小时前 | 字符编码 UTF-8 GBK InputStreamReader OutputStreamWriter
- Java中文乱码处理:多编码解决方案
- 144浏览 收藏
-
- 文章 · java教程 | 6小时前 |
- Java不是C语言开发,Java语言实现技术揭秘
- 124浏览 收藏
-
- 文章 · java教程 | 6小时前 |
- Java、Python、C三种语言区别深度解析
- 339浏览 收藏
-
- 文章 · java教程 | 8小时前 | java Vue.js SpringBoot 前后端分离 RESTfulAPI
- Vue.js与Java项目整合实战指南
- 137浏览 收藏
-
- 文章 · java教程 | 9小时前 |
- Java非C语言开发,揭秘Java技术实现
- 440浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 542次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 508次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 497次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 484次学习
-
- 美图AI抠图
- 美图AI抠图,依托CVPR 2024竞赛亚军技术,提供顶尖的图像处理解决方案。适用于证件照、商品、毛发等多场景,支持批量处理,3秒出图,零PS基础也能轻松操作,满足个人与商业需求。
- 13次使用
-
- PetGPT
- SEO摘要PetGPT 是一款基于 Python 和 PyQt 开发的智能桌面宠物程序,集成了 OpenAI 的 GPT 模型,提供上下文感知对话和主动聊天功能。用户可高度自定义宠物的外观和行为,支持插件热更新和二次开发。适用于需要陪伴和效率辅助的办公族、学生及 AI 技术爱好者。
- 15次使用
-
- 可图AI图片生成
- 探索快手旗下可灵AI2.0发布的可图AI2.0图像生成大模型,体验从文本生成图像、图像编辑到风格转绘的全链路创作。了解其技术突破、功能创新及在广告、影视、非遗等领域的应用,领先于Midjourney、DALL-E等竞品。
- 43次使用
-
- MeowTalk喵说
- MeowTalk喵说是一款由Akvelon公司开发的AI应用,通过分析猫咪的叫声,帮助主人理解猫咪的需求和情感。支持iOS和Android平台,提供个性化翻译、情感互动、趣味对话等功能,增进人猫之间的情感联系。
- 40次使用
-
- Traini
- SEO摘要Traini是一家专注于宠物健康教育的创新科技公司,利用先进的人工智能技术,提供宠物行为解读、个性化训练计划、在线课程、医疗辅助和个性化服务推荐等多功能服务。通过PEBI系统,Traini能够精准识别宠物狗的12种情绪状态,推动宠物与人类的智能互动,提升宠物生活质量。
- 38次使用
-
- 提升Java功能开发效率的有力工具:微服务架构
- 2023-10-06 501浏览
-
- 掌握Java海康SDK二次开发的必备技巧
- 2023-10-01 501浏览
-
- 如何使用java实现桶排序算法
- 2023-10-03 501浏览
-
- Java开发实战经验:如何优化开发逻辑
- 2023-10-31 501浏览
-
- 如何使用Java中的Math.max()方法比较两个数的大小?
- 2023-11-18 501浏览