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

二、项目介绍

本项目采用了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*/
@Component
public 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*/
@RestController
public 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/

四、项目展示

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

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

相关文章

如何制作 ChatGPT 清晰有效咒语与Chat GPT高效交流——基础篇 第二课

【ChatGPT】前些天发现了一个巨牛的人工智能学习电子书&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;无广告&#xff0c;忍不住分享一下给大家。&#xff08;点击查看学习资料&#xff09; 在上一篇文章中&#xff0c;我们已经了解了 ChatGPT 的特性、应用范围以及逆…

那些追赶ChatGPT,Disco Diffusion的软件合集

用了那么多AI工具后&#xff0c;我才真正地意识到那句话“科技改变生活”&#xff0c;知识的力量果真是无穷的。 那我就来盘点一下我用过自认可以比肩题主提到的两个工具的小宝藏吧~ 一、AI助手 - OpenAI ChatGPT侧边栏AI助手 - OpenAI ChatGPT侧边栏(国内免费使用) - Microso…

New Bing乘上ChatGPT的东风,日活突破1亿

我是卢松松&#xff0c;点点上面的头像&#xff0c;欢迎关注我哦&#xff01; 注&#xff1a;本文由松松杰哥缮写&#xff0c;ChatGPT进行了补充和润色&#xff0c;你们可以看看本文和其他文有什么区别&#xff1f; 微软今天宣布&#xff0c;New Bing乘上ChatGPT的东风&#xf…

如何使用ChatGPT制作免费的数字人

传统的数字人制作过程 制作属于自己的免费的数字人是一个复杂的过程&#xff0c;需要涉及多个方面的知识和技术。以下是一个大致的步骤指南&#xff0c;以帮助你开始这个过程&#xff1a; 1. 确定数字人的目标和设计&#xff1a;首先&#xff0c;你需要确定数字人的用途和目标…

ChatGPT实战应用:与外国真人聊天并提升英语能力

目录 1.简介 2.HelloTalk 3.chatgpt的使用 4.结语 1.简介 如果你想通过和外国人聊天来提升英语技能或者了解他们国家的文化&#xff0c;但是却没有门路&#xff1b; 如果你有门路&#xff0c;奈何不知道该如何表达自己的想法或者不知道自己表达的意思到底是否准确&#xf…

人人都能懂的ChatGPT解读

作者 | 张杰&#xff0c;中关村科金技术副总裁 策划 | 刘燕 ChatGPT 发布了两个多月&#xff0c;热度不降反增&#xff0c;不断火爆出圈。是时候&#xff0c;为不懂 AI 技术的同学们白话科普一下了。本文将用浅显且不严谨的语言解惑以下问题&#xff1a;ChatGPT 为什么能火起来…

【哈士奇赠书活动 - 23期】-〖你好 ChatGPT〗

文章目录 ⭐️ 赠书 - 《你好 ChatGPT》⭐️ 内容简介⭐️ 作者简介⭐️ 精彩书评⭐️ 赠书活动 → 获奖名单 ⭐️ 赠书 - 《你好 ChatGPT》 ⭐️ 内容简介 人工智能&#xff08;AI&#xff09;时代已经来临&#xff0c;AIGC&#xff08;人工智能生成内容&#xff09;正在进一步…

半小时用ChatGPT构建你的虚拟形象

大家好&#xff0c;欢迎来到我的频道&#xff0c;今天我来教大家如何用ChatGPT创建一个虚拟形象&#xff0c;如下图和视频所示。 视频地址&#xff1a;https://www.bilibili.com/video/BV1nD4y1u7Ti/?vd_source8b5cb1818bd1c0e0ac8b604d1a720e2d 生成图片 首先&#xff0c;我…

面向ChatGPT编程

让AI编写一个聊天页面&#xff0c;先看一下成品图。 用react写一个聊天页面 让AI把聊天室页面加上好看的样式 要求让样式鲜艳一点 Windows浏览器的滚动条太丑了&#xff0c;让他美化一下 要求AI把聊天内容加上头像&#xff0c;就像微信一样 大功告成&#xff0c;顺利下岗~

idea好用插件分享——Bito-ChatGPT

文章目录 安装步骤&#xff1a;第一步&#xff1a;打开Setting第二步&#xff1a;选择Plugins&#xff0c;输入Bito&#xff0c;就可以搜索出来了&#xff0c;再点击安装第三步&#xff1a;安装完成回到IDEA主界面&#xff0c;右边区域可以看到Bito图标&#xff0c;点击展开&am…

让生产力加倍的ChatGPT快捷指令

我的新书《Android App开发入门与实战》已于2020年8月由人民邮电出版社出版&#xff0c;欢迎购买。点击进入详情 Why use ChatGPT Shortcut? &#x1f680; 简化流程&#xff1a;ChatGPT Shortcut 提供了快捷指令表&#xff0c;可以快速筛选和搜索适用于不同场景的提示词&…

欧洲多国对 ChatGPT 展开调查;高通被韩国罚款超50亿;能用ChatGPT 来炒股了?丨每日大事件...

‍ ‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 企业动态 腾讯发布超强算力集群 4月14日&#xff0c;据腾讯微信公众号消息&#xff0c;腾讯云新发布面向大模型训练的新一代HCC高性能计算集群&#xff0c;整体性能比过去提升了3倍。搭载了NVIDIA H800 Tensor Core GPU&…

ChatGPT热度再升级,AIGC的投资人开始关注“文生图”了

&#xff08;图片来源&#xff1a;Pixabay) AIGC是一场老互联网人的豪赌&#xff0c;一次美元基金的狂欢&#xff0c;一个时代的进击。 数科星球 原创 作者丨科科 编辑丨十里香 在2023年的第一季度&#xff0c;ChatGPT以“狂飙”姿态火速出圈&#xff0c;由这款产品所带动的A…

ChatGPT时代,我的新书《智慧共生》上市了

告诉你一个好消息&#xff0c;我在人民邮电出版社的第二本书《智慧共生&#xff1a;ChatGPT 与 AIGC 生产力工具实践》刚刚上市&#xff0c;你现在就可以在 京东 和 当当买到了。 有人把 2022 年称作 AIGC&#xff08;人工智能生成内容&#xff09; 的元年&#xff0c;我深表赞…

Visual ChatGPT可视化的chatgpt

Visual ChatGPT: Talking, Drawing and Editing with Visual Foundation Models 摘要 不仅发送和接收语言&#xff0c;还发送和接收图像提供复杂的视觉问题或视觉编辑指令&#xff0c;这些问题需要多个AI模型以多步骤协作提供反馈并要求纠正结果考虑到多输入/输出模型和需要视…

如何借助ChatGPT,自动批量产出短视频爆款文案

如何借助ChatGPT,自动批量产出短视频爆款文案 下午有位同学私信问,拍短视频,如何借助chatgpt批量出爆款文案。 这里我们首先得认识并了解到爆款文案的逻辑。 共通性是打动人,去原创的话,文案能否火,纯靠天吃饭。 所以我们让chatgpt去自己写原创短视频文案,那么chatg…

3分钟,利用ChatGPT4+剪映,快速制作短视频

引言&#xff1a; 短视频已经成为当今社交媒体中不可或缺的一部分&#xff0c;而ChatGPT4和剪映这两款工具可以帮助您快速制作出高质量、充满创意的短视频。快和我一起来体验吧&#xff01; 下面是3分钟完成短视频的操作步骤&#xff0c;简单易学&#xff0c;分分钟上手&#…

ChatGPT可以教你谈恋爱?

似乎比人类做事更成熟

用 ChatGPT 创造虚拟老婆,被真女友发现...

量子位 | 公众号 QbitAI “我花了接近7000元购买云服务器&#xff0c;只是为了和她多聊聊天。” ChatGPT爆火后&#xff0c;各种整活层出不穷&#xff0c;这回令人大开眼界的&#xff0c;是一位外国程序猿小哥用它搞出的“虚拟老婆”。 不仅外观打扮随时切换、互动也非常迅速&a…