怎么使用springboot+chatgpt+chatUI Pro开发智能聊天工具 您所在的位置:网站首页 陕西方言俗语来历 怎么使用springboot+chatgpt+chatUI Pro开发智能聊天工具

怎么使用springboot+chatgpt+chatUI Pro开发智能聊天工具

2023-05-25 20:46| 来源: 网络整理| 查看: 265

一、技术介绍

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。

怎么使用springboot+chatgpt+chatUI Pro开发智能聊天工具

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(); List 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-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();登录后复制

一旦完成项目搭建,启动 Spring Boot 项目并访问 http://ip:端口 即可。项目最终效果:http://hyrun.vip/

四、项目展示

怎么使用springboot+chatgpt+chatUI Pro开发智能聊天工具

以上就是怎么使用springboot+chatgpt+chatUI Pro开发智能聊天工具的详细内容,更多请关注php中文网其它相关文章!



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有