当前位置:

首页 > 编程开发 > 怎么使用springboot+chatgpt+chatUI Pro开发智能聊天工具

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

一、技术介绍1.chatgpt-java是一个OpenAI的Java版SDK,支持开箱即用。目前以支持官网全部Api。支持最新版本GPT-3.5-Turbo模型以及whisper-1模型。2.SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,SpringBoot致力于在蓬勃发展的快速应用开发领域(rapidapplicationdevelopment

本文目录

    一、技术介绍

    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。

    怎么使用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();

    7.项目搭建完成后启动springboot项目然后访问http://ip:端口就可以。项目最终效果:http://hyrun.vip/

    四、项目展示

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

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发
    上一篇: SpringBoot动态修改日志级别的操作是什么
    下一篇: SpringBoot自动配置如何实现
    相关文章 更多
    OpenAI 优化手机端 ChatGPT 提示词以预设 AI 响应级别
    OpenAI 优化手机端 ChatGPT 提示词以预设 AI 响应级别

    OpenAI在移动端ChatGPT中新增了智能等级选择器,用户长按发送箭头即可调出,并提供即时、思考、扩展三种推理模式;网页版则增加了长对话目录功能,当回复数达到五条时,用户可通过目录快速跳转;此外,GPT-5.5即时模型的更新,使得回答更加自然流畅。

    开源库 TanStack 被黑波及 OpenAI 官方敦促苹果 Mac 用户升级 ChatGPT 应用
    开源库 TanStack 被黑波及 OpenAI 官方敦促苹果 Mac 用户升级 ChatGPT 应用

    开源库TanStack遭网络攻击波及OpenAI内部设备。黑客窃取了可签署数字证书的凭证,但核心代码与用户数据未泄露。OpenAI已撤销相关证书,并要求Mac用户在6月12日前将ChatGPT应用更新至最新版本,否则旧版将无法使用。iOS与Windows版本不受影响。

    消息称苹果拆解谷歌 Gemini 模型,为 iPhone 17 等打造专属本地 AI
    消息称苹果拆解谷歌 Gemini 模型,为 iPhone 17 等打造专属本地 AI

    消息称苹果拆解谷歌 Gemini 模型,为 iPhone 17 等打造专属本地 AI 一则新动态,揭示了科技巨头在AI赛道的最新布局。根据科技媒体The Information于3月25日的报道,苹果公司正在采取一种相当深入的技术策略,为其未来的iPhone 17系列等设备打造更小巧、安全的端侧AI

    我熬秃头写的论文,你用ChatGPT一秒审完?这场学术丑闻,彻底激怒了科学家
    我熬秃头写的论文,你用ChatGPT一秒审完?这场学术丑闻,彻底激怒了科学家

    全球最顶尖的 AI 学术会议,正在被 AI “攻陷” 这事儿听起来像个地狱笑话,但很不幸,它正在成为现实。一组最新数据揭示了一个颇为讽刺的局面:在即将到来的 ICLR 2026 会议上,竟有超过1.5 万份审稿意见被判定完全由 AI 代写。 想象一下这个场景:你耗费心血完成的论文,审稿人或许压根没细

    涉嫌限制员工举报安全隐患,OpenAI 面临美国证券交易委员会调查
    涉嫌限制员工举报安全隐患,OpenAI 面临美国证券交易委员会调查

    本站7月14日消息,OpenAI因涉嫌使用限制性保密协议(NDA)限制员工发声而再次受到审查。据《华盛顿邮报》报道,举报人致信美国证券交易委员会,称OpenAI强迫员工签署“非法限制性”协议,阻止他们披露公司技术潜在的危害。该举报信指控OpenAI违反了美国证券交易委员会的规定,该规定旨在保护员工向联邦当局举报其疑虑的权利并防止报复行为。此前,举报人已于6月份正式向美国证券交易委员会提交了投诉。图源Pexels举报信中要求美国证券交易委员会“采取迅速果断的措施”来执行他们认为OpenAI已经违反的规定。涉

    springBoot项目常用目录有哪些
    springBoot项目常用目录有哪些

    springBoot项目常用目录springBoot项目的目录结构及名规范介绍基于SpringBoot开发时的目录结构及命名规范,通过介绍能够为你解决,在实际项目中如何规划目录结构?如何命名目录更规范?各个目录分别代表什么含义?等三个问题。目录说明servicex//项目名|-admin-ui//管理服务前端代码(一般将UI和SERVICE放到一个工程中,便于管理)|-servicex-auth//模块1|-servicex-common//模块2|-servicex-gateway//模块3|-serv

    怎么让ChatGPT解读Vue3源码
    怎么让ChatGPT解读Vue3源码

    实战setupsetup函数在什么位置呢,我们不知道他的实现函数名称,于是问一下ChatGPT:ChatGPT告诉我,setup函数在packages/runtime-core/src/component.ts文件中。众所周知,runtime-core是Vue3的运行时核心代码。我们进去看一眼。按照它所说的,我们找到了setupComponent和createComponentInstance函数,并没有找到setupRenderEffect函数,ChatGPT的只知道2021年以前的知识,Vue3代码经

    OpenAI 宣布成立安全与安保委员会,并启动下一代前沿模型训练
    OpenAI 宣布成立安全与安保委员会,并启动下一代前沿模型训练

    本网站5月29日消息,OpenAI宣布成立安全与安保委员会,负责就OpenAI项目和运营的关键安全与保障决策提出建议。该委员会目前首要任务是在未来90天内评估并进一步制定OpenAI的发展流程和保障措施。90天结束后,安全与保障委员会将与全体董事会分享其建议。据介绍,该委员会将由董事会BretTaylor(主席)、AdamD'Angelo、NicoleSeligman和OpenAI首席执行官SamAltman领导。除此之外,OpenAI技术和政策专家AleksanderMadry(准备工作主管)、Lili

    vue3如何实现chatgpt的打字机效果
    vue3如何实现chatgpt的打字机效果

    共识首先要明确一点,chatgpt返回的文本格式是markdown的,最基本的渲染方式就是把markdown文本转换为HTML文本,然后v-html渲染即可。这里的转换和代码高亮以及防XSS攻击用到了下面三个依赖库:marked将markdwon转为htmlhighlight处理代码高亮dompurify防止XSS攻击同时我们是可以在markdown中写html元素的,这意味着我们可以直接把光标元素放到最后!将markdown转为html并处理代码高亮先贴代码MarkdownRender.vueimpor

    ChatGPT 桌面版新增超 30 款应用支持 旨在提升任务执行和协作能力
    ChatGPT 桌面版新增超 30 款应用支持 旨在提升任务执行和协作能力

    12月20日,在OpenAI举办的"12DaysofOpenAI"活动进入尾声之际,公司重点展示了ChatGPT桌面版的重大功能改进。这一升级意味着ChatGPT从简单的聊天机器人向高效AI智能体工具的转型,旨在提升在桌面环境中的任务执行和协作能力。活动宣布,ChatGPT新增支持包括AppleNotes、Notion、Warp、Xcode在内的30多个应用程序。例如,在与Notion应用程序的协同演示中,ChatGPT展示了提取文档选定部分内容并生成相关内容的能力。此外,ChatGPT还展示了其在War

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。