目錄
一、技術介紹
二、專案介紹
三、項目搭建
四、專案展示
首頁 Java java教程 怎麼使用springboot+chatgpt+chatUI Pro開發智慧聊天工具

怎麼使用springboot+chatgpt+chatUI Pro開發智慧聊天工具

May 16, 2023 pm 09:04 PM
chatgpt springboot

一、技術介紹

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的依賴

<?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;
    @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
 */
@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相關檔案

<!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: &#39;滴答小爱&#39;
        // },
        robot: {
            avatar: &#39;images/chat.png&#39;
        },
        // 用户头像
        user: {
            avatar: &#39;images/user.png&#39;,
        },
        // 首屏消息
        messages: [
            {
                type: &#39;text&#39;,
                content: {
                    text: &#39;您好,小爱为您服务,请问有什么可以帮您的?&#39;
                }
            }
        ],
        // 快捷短语
        // quickReplies: [
        //     { name: &#39;健康码颜色&#39;,isHighlight:true },
        //     { name: &#39;入浙通行申报&#39; },
        //     { name: &#39;健康码是否可截图使用&#39; },
        //     { name: &#39;健康通行码适用范围&#39; },
        // ],
        // 输入框占位符
        placeholder: &#39;输入任何您想询问的问题&#39;,
    },
    requests: {
        send: function (msg) {
            if (msg.type === &#39;text&#39;) {
                return {
                    url: &#39;/ask&#39;,
                    data: {
                        question: msg.content.text
                    }
                };
            }
        }
    },
    handlers: {
        /**
         *
         * 解析请求返回的数据
         * @param {object} res - 请求返回的数据
         * @param {object} requestType - 请求类型
         * @return {array}
         */
        parseResponse: function (res, requestType) {
            // 根据 requestType 处理数据
            if (requestType === &#39;send&#39; && 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中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

ChatGPT 現在允許免費用戶使用 DALL-E 3 產生每日限制的圖像 ChatGPT 現在允許免費用戶使用 DALL-E 3 產生每日限制的圖像 Aug 09, 2024 pm 09:37 PM

DALL-E 3 於 2023 年 9 月正式推出,是比其前身大幅改進的車型。它被認為是迄今為止最好的人工智慧圖像生成器之一,能夠創建具有複雜細節的圖像。然而,在推出時,它不包括

手機怎麼安裝chatgpt 手機怎麼安裝chatgpt Mar 05, 2024 pm 02:31 PM

安裝步驟:1、在ChatGTP官網或手機商店下載ChatGTP軟體;2、開啟後在設定介面中,選擇語言為中文;3、在對局介面中,選擇人機對局並設定中文相譜;4 、開始後在聊天視窗中輸入指令,即可與軟體互動。

ChatGPT與Python的完美結合:打造智慧客服聊天機器人 ChatGPT與Python的完美結合:打造智慧客服聊天機器人 Oct 27, 2023 pm 06:00 PM

ChatGPT與Python的完美結合:打造智慧客服聊天機器人引言:在當今資訊時代,智慧客服系統已成為企業與客戶之間重要的溝通工具。而為了提供更好的客戶服務體驗,許多企業開始轉向採用聊天機器人的方式來完成客戶諮詢、問題解答等任務。在這篇文章中,我們將介紹如何使用OpenAI的強大模型ChatGPT和Python語言結合,來打造一個智慧客服聊天機器人,以提高

SpringBoot與SpringMVC的比較及差別分析 SpringBoot與SpringMVC的比較及差別分析 Dec 29, 2023 am 11:02 AM

SpringBoot和SpringMVC都是Java開發中常用的框架,但它們之間有一些明顯的差異。本文將探究這兩個框架的特點和用途,並對它們的差異進行比較。首先,我們來了解一下SpringBoot。 SpringBoot是由Pivotal團隊開發的,它旨在簡化基於Spring框架的應用程式的建立和部署。它提供了一種快速、輕量級的方式來建立獨立的、可執行

如何使用ChatGPT和Java開發智慧聊天機器人 如何使用ChatGPT和Java開發智慧聊天機器人 Oct 28, 2023 am 08:54 AM

在這篇文章中,我們將介紹如何使用ChatGPT和Java開發智慧聊天機器人,並提供一些具體的程式碼範例。 ChatGPT是由OpenAI開發的困境預測轉換(GenerativePre-trainingTransformer)的最新版本,它是一種基於神經網路的人工智慧技術,可以理解自然語言並產生人類類似的文本。使用ChatGPT,我們可以輕鬆地創建自適應的聊天

如何使用ChatGPT PHP建構智慧客服機器人 如何使用ChatGPT PHP建構智慧客服機器人 Oct 28, 2023 am 09:34 AM

如何使用ChatGPTPHP建構智慧客服機器人引言:隨著人工智慧技術的發展,機器人在客服領域的應用越來越廣泛。使用ChatGPTPHP建構智慧客服機器人,可以幫助企業提供更有效率、更個人化的客戶服務。本文將介紹如何使用ChatGPTPHP建構智慧客服機器人,並提供具體的程式碼範例。一、安裝ChatGPTPHP要使用ChatGPTPHP建構智慧客服機器人

ChatGPT和Python的完美結合:打造即時聊天機器人 ChatGPT和Python的完美結合:打造即時聊天機器人 Oct 28, 2023 am 08:37 AM

ChatGPT與Python的完美結合:打造即時聊天機器人導言:隨著人工智慧技術的快速發展,聊天機器人在各個領域中扮演著越來越重要的角色。聊天機器人可以幫助用戶提供即時且個人化的協助,同時也為企業提供高效率的客戶服務。本文將介紹如何使用OpenAI的ChatGPT模型和Python語言結合,打造一個即時聊天機器人,並提供具體的程式碼範例。一、ChatGPT

chatgpt國內可以使用嗎 chatgpt國內可以使用嗎 Mar 05, 2024 pm 03:05 PM

chatgpt在國內可以使用,但不能註冊,港澳也不行,用戶想要註冊的話,可以使用國外的手機號碼進行註冊,注意註冊過程中要將網路環境切換成國外ip。

See all articles