一、技术介绍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 */@componentpublic 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<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-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 */@restcontrollerpublic 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相关文件
<!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" rel="external nofollow" ></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();
一旦完成项目搭建,启动 spring boot 项目并访问 http://ip:端口 即可。项目最终效果:http://hyrun.vip/
四、项目展示
以上就是怎么使用springboot+chatgpt+chatui pro开发智能聊天工具的详细内容。
   
 
   