位置: IT常识 - 正文

springboot+chatgpt+chatUI Pro开发智能聊天工具

编辑:rootadmin
springboot+chatgpt+chatUI Pro开发智能聊天工具

推荐整理分享springboot+chatgpt+chatUI Pro开发智能聊天工具,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

应广大网友要求,也为了节约大家的时间现为大家奉献上源码下载地址:https://download.csdn.net/download/xiangyuanhong08/87708197源码下载后在IDEA导入项目后自己修改配置文件中apiKey运行即可。

一、技术介绍

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 基础组件的基础上,结合阿里小蜜的最佳实践,沉淀和总结出来的一个开箱即用的,可快速搭建智能对话机器人的框架。它简单易上手,通过简单的配置就能搭建出对话机器人;同时它强大易扩展,通过丰富的接口和自定义卡片满足各种定制化需求。

二、项目介绍

springboot+chatgpt+chatUI Pro开发智能聊天工具

本项目采用了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的依赖

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.5.12</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.xyh</groupId><artifactId>mychatgpt</artifactId><version>0.0.1-SNAPSHOT</version><name>mychatgpt</name><description>Demo project for Spring Boot</description><properties><java.version>8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><exclusions><exclusion><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-api</artifactId></exclusion><exclusion><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-to-slf4j</artifactId></exclusion></exclusions><scope>test</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpcore</artifactId></dependency><dependency><groupId>com.theokanning.openai-gpt3-java</groupId><artifactId>api</artifactId><version>0.10.0</version></dependency><dependency><groupId>com.theokanning.openai-gpt3-java</groupId><artifactId>service</artifactId><version>0.10.0</version></dependency><dependency><groupId>com.theokanning.openai-gpt3-java</groupId><artifactId>client</artifactId><version>0.10.0</version></dependency><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.12</version></dependency><dependency><groupId>com.unfbx</groupId><artifactId>chatgpt-java</artifactId><version>1.0.5</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.17</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.8</version></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.2</version><exclusions><exclusion><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId></exclusion></exclusions></dependency><dependency><groupId>com.github.yulichang</groupId><artifactId>mybatis-plus-join</artifactId><version>1.4.2</version></dependency><!--集成随机生成数据包 --><dependency><groupId>com.apifan.common</groupId><artifactId>common-random</artifactId><version>1.0.19</version></dependency><!--集成随机生成数据包 --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration></plugin></plugins></build></project>

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*/@Componentpublic class ChatGPTUtils {@Value("${xyh.openai.key}")private String token;@Autowiredprivate 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();List<ChatChoice> resultList = 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-003Completion 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*/@RestControllerpublic class IndexController {@Autowiredprivate RedisUtils redisUtils;@Autowiredprivate 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相关文件

<!DOCTYPE html><html lang="zh-CN"><head><meta name="renderer" content="webkit" /><meta name="force-rendering" content="webkit" /><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=0, minimum-scale=1.0, maximum-scale=1.0, viewport-fit=cover" /><title>滴答小爱</title><link rel="stylesheet" href="//g.alicdn.com/chatui/sdk-v2/0.2.4/sdk.css"></head><body><div id="root"></div><script src="//g.alicdn.com/chatui/sdk-v2/0.2.4/sdk.js"></script><script src="//g.alicdn.com/chatui/extensions/0.0.7/isv-parser.js"></script><script src="js/setup.js"></script><script src="js/jquery-3.6.3.min.js"></script><script src="//g.alicdn.com/chatui/icons/0.3.0/index.js" async></script></body></html>

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/

四、项目展示

本文链接地址:https://www.jiuchutong.com/zhishi/300277.html 转载请保留说明!

上一篇:详细解读:MIT经典的语义分割数据集ADE20K,附下载链接(mit?)

下一篇:ajax请求携带自定义请求头header(跨域和同域)($ajax请求)

  • 小米呼叫限制怎么解除(小米呼叫限制怎么解除?)

    小米呼叫限制怎么解除(小米呼叫限制怎么解除?)

  • iphone常去地点怎么查看(苹果常去地点会出错吗)

    iphone常去地点怎么查看(苹果常去地点会出错吗)

  • 循环录像3分钟什么意思(循环录像一分钟好吗)

    循环录像3分钟什么意思(循环录像一分钟好吗)

  • 老是投屏投到邻居家怎么办(投屏到邻居)

    老是投屏投到邻居家怎么办(投屏到邻居)

  • 苹果官网购买几天到货(苹果官网购买几天无理由)

    苹果官网购买几天到货(苹果官网购买几天无理由)

  • 戴尔开机nobootdevice(戴尔开机nobootabledevicesfound)

    戴尔开机nobootdevice(戴尔开机nobootabledevicesfound)

  • 手机报废能导出资料吗(手机报废里面的数据怎么办)

    手机报废能导出资料吗(手机报废里面的数据怎么办)

  • 硬件设备是什么意思(硬件设备是什么的总称)

    硬件设备是什么意思(硬件设备是什么的总称)

  • 腾讯视频音画不同步怎么解决(腾讯视频不能音频播放)

    腾讯视频音画不同步怎么解决(腾讯视频不能音频播放)

  • 华为mate30可以用4g卡吗(华为mate30可以用6A充电线吗)

    华为mate30可以用4g卡吗(华为mate30可以用6A充电线吗)

  • v1938ct是什么手机(v1818ct什么手机)

    v1938ct是什么手机(v1818ct什么手机)

  • 虚拟光驱怎么安装(虚拟光驱怎么安装vs2015)

    虚拟光驱怎么安装(虚拟光驱怎么安装vs2015)

  • 苹果8p为什么一照就亮屏(苹果8p为什么一会儿开机一会儿又关机了)

    苹果8p为什么一照就亮屏(苹果8p为什么一会儿开机一会儿又关机了)

  • 手机qq群文件怎么删除(手机qq群文件怎么移动到文件夹里)

    手机qq群文件怎么删除(手机qq群文件怎么移动到文件夹里)

  • 苹果怎么设置视频壁纸(苹果怎么设置视频循环播放)

    苹果怎么设置视频壁纸(苹果怎么设置视频循环播放)

  • iPhone11多重(iphone13多重)

    iPhone11多重(iphone13多重)

  • 苹果mt742ch/a是什么型号(苹果型号mt772ch)

    苹果mt742ch/a是什么型号(苹果型号mt772ch)

  • lex620是什么手机(lex626是什么手机)

    lex620是什么手机(lex626是什么手机)

  • 华为桌面图标怎么恢复原状(华为桌面图标怎么移动位置)

    华为桌面图标怎么恢复原状(华为桌面图标怎么移动位置)

  • 拼多多怎么删除签到好友(拼多多怎么删除自己发的评论)

    拼多多怎么删除签到好友(拼多多怎么删除自己发的评论)

  • error和exception的区别

    error和exception的区别

  • 特拉凯城堡博物馆,立陶宛特拉凯 (© Andrius Aleksandravicius/Alamy)(特拉凯城堡是哪个国家)

    特拉凯城堡博物馆,立陶宛特拉凯 (© Andrius Aleksandravicius/Alamy)(特拉凯城堡是哪个国家)

  • 白霜覆盖下的山毛榉林,英格兰多塞特郡 (© Guy Edwardes/Minden Pictures)(山上覆盖着皑皑白雪)

    白霜覆盖下的山毛榉林,英格兰多塞特郡 (© Guy Edwardes/Minden Pictures)(山上覆盖着皑皑白雪)

  • 迪纳利国家公园里的白大角羊,阿拉斯加 (© Patrick J. Endres/Getty Images)(迪纳利国家公园在哪个国家)

    迪纳利国家公园里的白大角羊,阿拉斯加 (© Patrick J. Endres/Getty Images)(迪纳利国家公园在哪个国家)

  • 小规模增值税会计处理流程
  • 简易计税方法是什么意思
  • 记账凭证核算形式需要设置的凭证有
  • 增值税发票的品名与报关单不一致
  • 报销用专票
  • 银行结构性存款是理财吗
  • 未担保余值列报
  • 投资性房地产收入属于什么收入
  • 审计费用需要计什么科目
  • 员工生育期间社保
  • 没有把发票开给客户公司注销了怎么办
  • 什么发票 既可以抵扣又可以退税
  • 委托研发受托方怎么做账
  • 企业所得税年报和增值税收入不一致
  • 华硕主板如何刷系统
  • 待认证进项税额借方余额表示什么
  • linux命令df -h结果详解
  • 腾讯手游助手如何隐藏键位
  • windows 10月更新
  • 个人出差借款会计分录
  • 政府补助开票怎么申报增值税
  • 在建工程进项税额转出
  • assoc.exe=exefile什么意思
  • 公司并购的税务处理办法
  • 固定资产财产损失的账务处理
  • ieview.exe 是什么
  • 不跳槽怎么形容
  • pyqt5如何安装
  • 一文速学-XGBoost模型算法原理以及实现+Python项目实战
  • 固定成本又称什么成本
  • 企业实际发生的与取得收入有关的支出
  • 赔付支出计算公式
  • 循环表是线性表吗
  • 邀请客户参加会议
  • spring boot dao
  • mysql内存使用详解
  • 月末库存商品成本计算
  • 企业所得税上个季度没报
  • 企业营业外收入要交所得税吗
  • 临时工工资应计入什么科目
  • 地补缴费额是什么
  • 财务软件是有哪些软件
  • 什么叫做固定资本
  • 固定资产投资入库申报材料
  • 暂估固定资产的账务处理
  • 预收账款转收入的条件
  • 增值税抵扣比例是多少
  • 收到一笔财政局的付款
  • 残保金怎么办理
  • mysql中自定义函数属于那个
  • ubuntu安装软件教程
  • windows的实验步骤
  • win8系统怎么设置投屏
  • 安装硬盘视频教程
  • win10系统预览版
  • winxp系统界面图片
  • windows xp
  • win7复制过的内容在哪
  • win7系统纯净版64位无法修改窗口颜色怎么办?Win7窗口颜色修改详细步骤
  • shell source不起作用
  • cocos2d面试题
  • python数据结构与算法分析 第2版(图灵出品)
  • 清除垃圾的系统
  • html中的表格
  • javascript中的函数如何理解
  • nodejs搭建个人博客网站
  • windows node.js
  • bootstrap入门教程
  • angularjs2
  • jquery easyui插件
  • document.write与writeln的输出内容区别说明
  • android源码下载地址
  • 使用灭火器人要站在上风口还是下风口
  • jquery22
  • 广东省国家税务总局稽查局局长
  • 建筑行业增值税税收优惠政策
  • 中国银行手机银行app官方下载
  • 新疆碧桂园三期最新消息
  • 四川省成都市地图高清版大图
  • 长沙房产税如何征收
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设