溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringBoot如何整合chatGPT

發布時間:2023-05-17 09:23:20 來源:億速云 閱讀:154 作者:iii 欄目:編程語言

這篇文章主要講解了“SpringBoot如何整合chatGPT”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“SpringBoot如何整合chatGPT”吧!

    1 添加依賴

            <!-- 導入openai依賴 -->
            <dependency>
                <groupId>com.theokanning.openai-gpt3-java</groupId>
                <artifactId>client</artifactId>
                <version>0.8.1</version>
            </dependency>

    2 創建相關文件

    2.1 實體類:OpenAi.java
    package com.wkf.workrecord.tools.openai;
     
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
     
    /**
     * @author wuKeFan
     * @date 2023-02-10 15:40:22
     */
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public class OpenAi {
     
        String id;
     
        String name;
     
        String desc;
     
        String model;
     
        // 提示模板
        String prompt;
     
        // 創新采樣
        Double temperature;
     
        // 情緒采樣
        Double topP;
     
        // 結果條數
        Double n = 1d;
     
        // 頻率處罰系數
        Double frequencyPenalty;
     
        // 重復處罰系數
        Double presencePenalty;
     
        // 停用詞
        String stop;
     
    }
    2.2 配置類:OpenAiProperties.java
    package com.wkf.workrecord.tools.openai;
     
    import lombok.Data;
    import org.springframework.beans.factory.InitializingBean;
    import org.springframework.boot.context.properties.ConfigurationProperties;
     
    /**
     * @author wuKeFan
     * @date 2023-02-10 15:25:32
     */
     
    @Data
    @ConfigurationProperties(prefix = "openai")
    public class OpenAiProperties implements InitializingBean {
        // 秘鑰
        String token;
        // 超時時間
        Integer timeout;
     
        // 設置屬性時同時設置給OpenAiUtils
        @Override
        public void afterPropertiesSet() throws Exception {
            OpenAiUtils.OPENAPI_TOKEN = token;
            OpenAiUtils.TIMEOUT = timeout;
        }
    }
    2.3 核心業務邏輯OpenAiUtils.java
    package com.wkf.workrecord.tools.openai;
     
    import com.theokanning.openai.OpenAiService;
    import com.theokanning.openai.completion.CompletionChoice;
    import com.theokanning.openai.completion.CompletionRequest;
    import org.springframework.util.StringUtils;
    import java.util.*;
     
    /**
     * @author wuKeFan
     * @date 2023-02-10 15:32:18
     */
    public class OpenAiUtils {
        public static final Map<String, OpenAi> PARMS = new HashMap<>();
     
        static {
            PARMS.put("OpenAi01", new OpenAi("OpenAi01", "問&答", "依據現有知識庫問&答", "text-davinci-003", "Q: %s\nA:", 0.0, 1.0, 1.0, 0.0, 0.0, "\n"));
            PARMS.put("OpenAi02", new OpenAi("OpenAi02", "語法糾正", "將句子轉換成標準的英語,輸出結果始終是英文", "text-davinci-003", "%s", 0.0, 1.0, 1.0, 0.0, 0.0, ""));
            PARMS.put("OpenAi03", new OpenAi("OpenAi03", "內容概況", "將一段話,概況中心", "text-davinci-003", "Summarize this for a second-grade student:\n%s", 0.7, 1.0, 1.0, 0.0, 0.0, ""));
            PARMS.put("OpenAi04", new OpenAi("OpenAi04", "生成OpenAi的代碼", "一句話生成OpenAi的代碼", "code-davinci-002", "\"\"\"\nUtil exposes the following:\nutil.openai() -> authenticates & returns the openai module, which has the following functions:\nopenai.Completion.create(\n    prompt=\"<my prompt>\", # The prompt to start completing from\n    max_tokens=123, # The max number of tokens to generate\n    temperature=1.0 # A measure of randomness\n    echo=True, # Whether to return the prompt in addition to the generated completion\n)\n\"\"\"\nimport util\n\"\"\"\n%s\n\"\"\"\n\n", 0.0, 1.0, 1.0, 0.0, 0.0, "\"\"\""));
            PARMS.put("OpenAi05", new OpenAi("OpenAi05", "程序命令生成", "一句話生成程序的命令,目前支持操作系統指令比較多", "text-davinci-003", "Convert this text to a programmatic command:\n\nExample: Ask Constance if we need some bread\nOutput: send-msg `find constance` Do we need some bread?\n\n%s", 0.0, 1.0, 1.0, 0.2, 0.0, ""));
            PARMS.put("OpenAi06", new OpenAi("OpenAi06", "語言翻譯", "把一種語法翻譯成其它幾種語言", "text-davinci-003", "Translate this into %s:\n%s", 0.3, 1.0, 1.0, 0.0, 0.0, ""));
            PARMS.put("OpenAi07", new OpenAi("OpenAi07", "Stripe國際API生成", "一句話生成Stripe國際支付API", "code-davinci-002", "\"\"\"\nUtil exposes the following:\n\nutil.stripe() -> authenticates & returns the stripe module; usable as stripe.Charge.create etc\n\"\"\"\nimport util\n\"\"\"\n%s\n\"\"\"", 0.0, 1.0, 1.0, 0.0, 0.0, "\"\"\""));
            PARMS.put("OpenAi08", new OpenAi("OpenAi08", "SQL語句生成", "依據上下文中的表信息,生成SQL語句", "code-davinci-002", "### %s SQL tables, 表字段信息如下:\n%s\n#\n### %s\n %s", 0.0, 1.0, 1.0, 0.0, 0.0, "# ;"));
            PARMS.put("OpenAi09", new OpenAi("OpenAi09", "結構化生成", "對于非結構化的數據抽取其中的特征生成結構化的表格", "text-davinci-003", "A table summarizing, use Chinese:\n%s\n", 0.0, 1.0, 1.0, 0.0, 0.0, ""));
            PARMS.put("OpenAi10", new OpenAi("OpenAi10", "信息分類", "把一段信息繼續分類", "text-davinci-003", "%s\n分類:", 0.0, 1.0, 1.0, 0.0, 0.0, ""));
            PARMS.put("OpenAi11", new OpenAi("OpenAi11", "Python代碼解釋", "把代碼翻譯成文字,用來解釋程序的作用", "code-davinci-002", "# %s \n %s \n\n# 解釋代碼作用\n\n#", 0.0, 1.0, 1.0, 0.0, 0.0, ""));
            PARMS.put("OpenAi12", new OpenAi("OpenAi12", "文字轉表情符號", "將文本編碼成表情服務", "text-davinci-003", "轉換文字為表情。\n%s:", 0.8, 1.0, 1.0, 0.0, 0.0, "\n"));
            PARMS.put("OpenAi13", new OpenAi("OpenAi13", "時間復雜度計算", "求一段代碼的時間復雜度", "text-davinci-003", "%s\n\"\"\"\n函數的時間復雜度是", 0.0, 1.0, 1.0, 0.0, 0.0, "\n"));
            PARMS.put("OpenAi14", new OpenAi("OpenAi14", "程序代碼翻譯", "把一種語言的代碼翻譯成另外一種語言的代碼", "code-davinci-002", "##### 把這段代碼從%s翻譯成%s\n### %s\n    \n   %s\n    \n### %s", 0.0, 1.0, 1.0, 0.0, 0.0, "###"));
            PARMS.put("OpenAi15", new OpenAi("OpenAi15", "高級情緒評分", "支持批量列表的方式檢查情緒", "text-davinci-003", "對下面內容進行情感分類:\n%s\"\n情緒評級:", 0.0, 1.0, 1.0, 0.0, 0.0, ""));
            PARMS.put("OpenAi16", new OpenAi("OpenAi16", "代碼解釋", "對一段代碼進行解釋", "code-davinci-002", "代碼:\n%s\n\"\"\"\n上面的代碼在做什么:\n1. ", 0.0, 1.0, 1.0, 0.0, 0.0, "\"\"\""));
            PARMS.put("OpenAi17", new OpenAi("OpenAi17", "關鍵字提取", "提取一段文本中的關鍵字", "text-davinci-003", "抽取下面內容的關鍵字:\n%s", 0.5, 1.0, 1.0, 0.8, 0.0, ""));
            PARMS.put("OpenAi18", new OpenAi("OpenAi18", "問題解答", "類似解答題", "text-davinci-003", "Q: %s\nA: ?", 0.0, 1.0, 1.0, 0.0, 0.0, ""));
            PARMS.put("OpenAi19", new OpenAi("OpenAi19", "廣告設計", "給一個產品設計一個廣告", "text-davinci-003", "為下面的產品創作一個創業廣告,用于投放到抖音上:\n產品:%s.", 0.5, 1.0, 1.0, 0.0, 0.0, ""));
            PARMS.put("OpenAi20", new OpenAi("OpenAi20", "產品取名", "依據產品描述和種子詞語,給一個產品取一個好聽的名字", "text-davinci-003", "產品描述: %s.\n種子詞: %s.\n產品名稱: ", 0.8, 1.0, 1.0, 0.0, 0.0, ""));
            PARMS.put("OpenAi21", new OpenAi("OpenAi21", "句子簡化", "把一個長句子簡化成一個短句子", "text-davinci-003", "%s\nTl;dr: ", 0.7, 1.0, 1.0, 0.0, 1.0, ""));
            PARMS.put("OpenAi22", new OpenAi("OpenAi22", "修復代碼Bug", "自動修改代碼中的bug", "code-davinci-002", "##### 修復下面代碼的bug\n### %s\n %s\n###  %s\n", 0.0, 1.0, 1.0, 0.0, 0.0, "###"));
            PARMS.put("OpenAi23", new OpenAi("OpenAi23", "表格填充數據", "自動為一個表格生成數據", "text-davinci-003", "spreadsheet ,%s rows:\n%s\n", 0.5, 1.0, 1.0, 0.0, 0.0, ""));
            PARMS.put("OpenAi24", new OpenAi("OpenAi24", "語言聊天機器人", "各種開發語言的兩天機器人", "code-davinci-002", "You: %s\n%s機器人:", 0.0, 1.0, 1.0, 0.5, 0.0, "You: "));
            PARMS.put("OpenAi25", new OpenAi("OpenAi25", "機器學習機器人", "機器學習模型方面的機器人", "text-davinci-003", "You: %s\nML機器人:", 0.3, 1.0, 1.0, 0.5, 0.0, "You: "));
            PARMS.put("OpenAi26", new OpenAi("OpenAi26", "清單制作", "可以列出各方面的分類列表,比如歌單", "text-davinci-003", "列出10%s:", 0.5, 1.0, 1.0, 0.52, 0.5, "11.0"));
            PARMS.put("OpenAi27", new OpenAi("OpenAi27", "文本情緒分析", "對一段文字進行情緒分析", "text-davinci-003", "推斷下面文本的情緒是積極的, 中立的, 還是消極的.\n文本: \"%s\"\n觀點:", 0.0, 1.0, 1.0, 0.5, 0.0, ""));
            PARMS.put("OpenAi28", new OpenAi("OpenAi28", "航空代碼抽取", "抽取文本中的航空diam信息", "text-davinci-003", "抽取下面文本中的航空代碼:\n文本:\"%s\"\n航空代碼:", 0.0, 1.0, 1.0, 0.0, 0.0, "\n"));
            PARMS.put("OpenAi29", new OpenAi("OpenAi29", "生成SQL語句", "無上下文,語句描述生成SQL", "text-davinci-003", "%s", 0.3, 1.0, 1.0, 0.0, 0.0, ""));
            PARMS.put("OpenAi30", new OpenAi("OpenAi30", "抽取聯系信息", "從文本中抽取聯系方式", "text-davinci-003", "從下面文本中抽取%s:\n%s", 0.0, 1.0, 1.0, 0.0, 0.0, ""));
            PARMS.put("OpenAi31", new OpenAi("OpenAi31", "程序語言轉換", "把一種語言轉成另外一種語言", "code-davinci-002", "#%s to %s:\n%s:%s\n\n%s:", 0.0, 1.0, 1.0, 0.0, 0.0, ""));
            PARMS.put("OpenAi32", new OpenAi("OpenAi32", "好友聊天", "模仿好友聊天", "text-davinci-003", "You: %s\n好友:", 0.5, 1.0, 1.0, 0.5, 0.0, "You:"));
            PARMS.put("OpenAi33", new OpenAi("OpenAi33", "顏色生成", "依據描述生成對應顏色", "text-davinci-003", "%s:\nbackground-color: ", 0.0, 1.0, 1.0, 0.0, 0.0, ";"));
            PARMS.put("OpenAi34", new OpenAi("OpenAi34", "程序文檔生成", "自動為程序生成文檔", "code-davinci-002", "# %s\n \n%s\n# 上述代碼的詳細、高質量文檔字符串:\n\"\"\"", 0.0, 1.0, 1.0, 0.0, 0.0, "#\"\"\""));
            PARMS.put("OpenAi35", new OpenAi("OpenAi35", "段落創作", "依據短語生成相關文短", "text-davinci-003", "為下面短語創建一個中文段:\n%s:\n", 0.5, 1.0, 1.0, 0.0, 0.0, ""));
            PARMS.put("OpenAi36", new OpenAi("OpenAi36", "代碼壓縮", "把多行代碼簡單的壓縮成一行", "code-davinci-002", "將下面%s代碼轉成一行:\n%s\n%s一行版本:", 0.0, 1.0, 1.0, 0.0, 0.0, ";"));
            PARMS.put("OpenAi37", new OpenAi("OpenAi37", "故事創作", "依據一個主題創建一個故事", "text-davinci-003", "主題: %s\n故事創作:", 0.8, 1.0, 1.0, 0.5, 0.0, ""));
            PARMS.put("OpenAi38", new OpenAi("OpenAi38", "人稱轉換", "第一人稱轉第3人稱", "text-davinci-003", "把下面內容從第一人稱轉為第三人稱 (性別女):\n%s\n", 0.0, 1.0, 1.0, 0.0, 0.0, ""));
            PARMS.put("OpenAi39", new OpenAi("OpenAi39", "摘要說明", "依據筆記生成摘要說明", "text-davinci-003", "將下面內容轉換成將下%s摘要:\n%s", 0.0, 1.0, 1.0, 0.0, 0.0, ""));
            PARMS.put("OpenAi40", new OpenAi("OpenAi40", "頭腦風暴", "給定一個主題,讓其生成一些主題相關的想法", "text-davinci-003", "頭腦風暴一些關于%s的想法:", 0.6, 1.0, 1.0, 1.0, 1.0, ""));
            PARMS.put("OpenAi41", new OpenAi("OpenAi41", "ESRB文本分類", "按照ESRB進行文本分類", "text-davinci-003", "Provide an ESRB rating for the following text:\\n\\n\\\"%s\"\\n\\nESRB rating:", 0.3, 1.0, 1.0, 0.0, 0.0, "\n"));
            PARMS.put("OpenAi42", new OpenAi("OpenAi42", "提綱生成", "按照提示為相關內容生成提綱", "text-davinci-003", "為%s提綱:", 0.3, 1.0, 1.0, 0.0, 0.0, ""));
            PARMS.put("OpenAi43", new OpenAi("OpenAi43", "美食制作(后果自負)", "依據美食名稱和材料生成美食的制作步驟", "text-davinci-003", "依據下面成分和美食,生成制作方法:\n%s\n成分:\n%s\n制作方法:", 0.3, 1.0, 1.0, 0.0, 0.0, ""));
            PARMS.put("OpenAi44", new OpenAi("OpenAi44", "AI聊天", "與AI機器進行聊天", "text-davinci-003", "Human: %s", 0.9, 1.0, 1.0, 0.0, 0.6, "Human:AI:"));
            PARMS.put("OpenAi45", new OpenAi("OpenAi45", "擺爛聊天", "與諷刺機器進行聊天", "text-davinci-003", "Marv不情愿的回答問題.\nYou:%s\nMarv:", 0.5, 0.3, 1.0, 0.5, 0.0, ""));
            PARMS.put("OpenAi46", new OpenAi("OpenAi46", "分解步驟", "把一段文本分解成幾步來完成", "text-davinci-003", "為下面文本生成次序列表,并增加列表數子: \n%s\n", 0.3, 1.0, 1.0, 0.0, 0.0, ""));
            PARMS.put("OpenAi47", new OpenAi("OpenAi47", "點評生成", "依據文本內容自動生成點評", "text-davinci-003", "依據下面內容,進行點評:\n%s\n點評:", 0.5, 1.0, 1.0, 0.0, 0.0, ""));
            PARMS.put("OpenAi48", new OpenAi("OpenAi48", "知識學習", "可以為學習知識自動解答", "text-davinci-003", "%s", 0.3, 1.0, 1.0, 0.0, 0.0, ""));
            PARMS.put("OpenAi49", new OpenAi("OpenAi49", "面試", "生成面試題", "text-davinci-003", "創建10道%s相關的面試題(中文):\n", 0.5, 1.0, 10.0, 0.0, 0.0, ""));
        }
     
        public static String OPENAPI_TOKEN = "";
        public static Integer TIMEOUT = null;
     
        /**
         * 獲取ai
         *
         * @param openAi
         * @param prompt
         * @return
         */
        public static List<CompletionChoice> getAiResult(OpenAi openAi, String prompt) {
            if (TIMEOUT == null || TIMEOUT < 1000) {
                TIMEOUT = 3000;
            }
            OpenAiService service = new OpenAiService(OPENAPI_TOKEN, TIMEOUT);
            CompletionRequest.CompletionRequestBuilder builder = CompletionRequest.builder()
                    .model(openAi.getModel())
                    .prompt(prompt)
                    .temperature(openAi.getTemperature())
                    .maxTokens(1000)
                    .topP(openAi.getTopP())
                    .frequencyPenalty(openAi.getFrequencyPenalty())
                    .presencePenalty(openAi.getPresencePenalty());
            if (!StringUtils.isEmpty(openAi.getStop())) {
                builder.stop(Arrays.asList(openAi.getStop().split(",")));
            }
            CompletionRequest completionRequest = builder.build();
            return service.createCompletion(completionRequest).getChoices();
        }
     
        /**
         * 問答
         *
         * @param question
         * @return
         */
        public static List<CompletionChoice> getQuestionAnswer(String question) {
            OpenAi openAi = PARMS.get("OpenAi01");
            return getAiResult(openAi, String.format(openAi.getPrompt(), question));
        }
     
        /**
         * 語法糾錯
         *
         * @param text
         * @return
         */
        public static List<CompletionChoice> getGrammarCorrection(String text) {
            OpenAi openAi = PARMS.get("OpenAi02");
            return getAiResult(openAi, String.format(openAi.getPrompt(), text));
        }
     
        /**
         * 將一段話,概況中心
         *
         * @param text
         * @return
         */
        public static List<CompletionChoice> getSummarize(String text) {
            OpenAi openAi = PARMS.get("OpenAi03");
            return getAiResult(openAi, String.format(openAi.getPrompt(), text));
        }
     
        /**
         * 一句話生成OpenAi的代碼
         *
         * @param text
         * @return
         */
        public static List<CompletionChoice> getOpenAiApi(String text) {
            OpenAi openAi = PARMS.get("OpenAi04");
            return getAiResult(openAi, String.format(openAi.getPrompt(), text));
        }
     
        /**
         * 一句話生成程序的命令,目前支持操作系統指令比較多
         *
         * @param text
         * @return
         */
        public static List<CompletionChoice> getTextToCommand(String text) {
            OpenAi openAi = PARMS.get("OpenAi05");
            return getAiResult(openAi, String.format(openAi.getPrompt(), text));
        }
     
        /**
         * 把一種語法翻譯成其它幾種語言
         *
         * @param text
         * @return
         */
        public static List<CompletionChoice> getTranslatesLanguages(String text, String translatesLanguages) {
            if (StringUtils.isEmpty(translatesLanguages)) {
                translatesLanguages = "  1. French, 2. Spanish and 3. English";
            }
            OpenAi openAi = PARMS.get("OpenAi06");
            return getAiResult(openAi, String.format(openAi.getPrompt(), translatesLanguages, text));
        }
     
        /**
         * 一句話生成Stripe國際支付API
         *
         * @param text
         * @return
         */
        public static List<CompletionChoice> getStripeApi(String text) {
            OpenAi openAi = PARMS.get("OpenAi07");
            return getAiResult(openAi, String.format(openAi.getPrompt(), text));
        }
     
     
        /**
         * 依據上下文中的表信息,生成SQL語句
         *
         * @param databaseType 數據庫類型
         * @param tables       上午依賴的表和字段 Employee(id, name, department_id)
         * @param text         SQL描述
         * @param sqlType      sql類型,比如SELECT
         * @return
         */
        public static List<CompletionChoice> getStripeApi(String databaseType, List<String> tables, String text, String sqlType) {
            OpenAi openAi = PARMS.get("OpenAi08");
            StringJoiner joiner = new StringJoiner("\n");
            for (int i = 0; i < tables.size(); i++) {
                joiner.add("# " + tables);
            }
            return getAiResult(openAi, String.format(openAi.getPrompt(), databaseType, joiner.toString(), text, sqlType));
        }
     
        /**
         * 對于非結構化的數據抽取其中的特征生成結構化的表格
         *
         * @param text 非結構化的數據
         * @return
         */
        public static List<CompletionChoice> getUnstructuredData(String text) {
            OpenAi openAi = PARMS.get("OpenAi09");
            return getAiResult(openAi, String.format(openAi.getPrompt(), text));
        }
     
        /**
         * 把一段信息繼續分類
         *
         * @param text 要分類的文本
         * @return
         */
        public static List<CompletionChoice> getTextCategory(String text) {
            OpenAi openAi = PARMS.get("OpenAi10");
            return getAiResult(openAi, String.format(openAi.getPrompt(), text));
        }
     
        /**
         * 把一段信息繼續分類
         *
         * @param codeType 代碼類型,比如Python
         * @param code     要解釋的代碼
         * @return
         */
        public static List<CompletionChoice> getCodeExplain(String codeType, String code) {
            OpenAi openAi = PARMS.get("OpenAi11");
            return getAiResult(openAi, String.format(openAi.getPrompt(), codeType, code));
        }
     
        /**
         * 將文本編碼成表情服務
         *
         * @param text 文本
         * @return
         */
        public static List<CompletionChoice> getTextEmoji(String text) {
            OpenAi openAi = PARMS.get("OpenAi12");
            return getAiResult(openAi, String.format(openAi.getPrompt(), text));
        }
     
        /**
         * 求一段代碼的時間復雜度
         *
         * @param code 代碼
         * @return
         */
        public static List<CompletionChoice> getTimeComplexity(String code) {
            OpenAi openAi = PARMS.get("OpenAi13");
            return getAiResult(openAi, String.format(openAi.getPrompt(), code));
        }
     
     
        /**
         * 把一種語言的代碼翻譯成另外一種語言的代碼
         *
         * @param fromLanguage 要翻譯的代碼語言
         * @param toLanguage   要翻譯成的代碼語言
         * @param code         代碼
         * @return
         */
        public static List<CompletionChoice> getTranslateProgramming(String fromLanguage, String toLanguage, String code) {
            OpenAi openAi = PARMS.get("OpenAi14");
            return getAiResult(openAi, String.format(openAi.getPrompt(), fromLanguage, toLanguage, fromLanguage, code, toLanguage));
        }
     
        /**
         * 支持批量列表的方式檢查情緒
         *
         * @param texts 文本
         * @return
         */
        public static List<CompletionChoice> getBatchTweetClassifier(List<String> texts) {
            OpenAi openAi = PARMS.get("OpenAi15");
            StringJoiner stringJoiner = new StringJoiner("\n");
            for (int i = 0; i < texts.size(); i++) {
                stringJoiner.add((i + 1) + ". " + texts.get(i));
            }
            return getAiResult(openAi, String.format(openAi.getPrompt(), stringJoiner.toString()));
        }
     
        /**
         * 對一段代碼進行解釋
         *
         * @param code 文本
         * @return
         */
        public static List<CompletionChoice> getExplainCOde(String code) {
            OpenAi openAi = PARMS.get("OpenAi16");
            return getAiResult(openAi, String.format(openAi.getPrompt(), code));
        }
     
        /**
         * 提取一段文本中的關鍵字
         *
         * @param text 文本
         * @return
         */
        public static List<CompletionChoice> getTextKeywords(String text) {
            OpenAi openAi = PARMS.get("OpenAi17");
            return getAiResult(openAi, String.format(openAi.getPrompt(), text));
        }
     
        /**
         * 事實回答答題
         *
         * @param text 文本
         * @return
         */
        public static List<CompletionChoice> getFactualAnswering(String text) {
            OpenAi openAi = PARMS.get("OpenAi18");
            return getAiResult(openAi, String.format(openAi.getPrompt(), text));
        }
     
        /**
         * 給一個產品設計一個廣告
         *
         * @param text 文本
         * @return
         */
        public static List<CompletionChoice> getAd(String text) {
            OpenAi openAi = PARMS.get("OpenAi19");
            return getAiResult(openAi, String.format(openAi.getPrompt(), text));
        }
     
        /**
         * 依據產品描述和種子詞語,給一個產品取一個好聽的名字
         *
         * @param productDescription 產品描述
         * @param seedWords          種子詞語
         * @return
         */
        public static List<CompletionChoice> getProductName(String productDescription, String seedWords) {
            OpenAi openAi = PARMS.get("OpenAi20");
            return getAiResult(openAi, String.format(openAi.getPrompt(), productDescription, seedWords));
        }
     
        /**
         * 把一個長句子簡化成一個短句子
         *
         * @param text 長句子
         * @return
         */
        public static List<CompletionChoice> getProductName(String text) {
            OpenAi openAi = PARMS.get("OpenAi21");
            return getAiResult(openAi, String.format(openAi.getPrompt(), text));
        }
     
        /**
         * 自動修改代碼中的bug
         *
         * @param codeType 語言類型
         * @param code     代碼
         * @return
         */
        public static List<CompletionChoice> getBugFixer(String codeType, String code) {
            OpenAi openAi = PARMS.get("OpenAi22");
            return getAiResult(openAi, String.format(openAi.getPrompt(), codeType, code, codeType));
        }
     
        /**
         * 自動為一個表格生成數據
         *
         * @param rows    生成的行數
         * @param headers 數據表頭,格式如:姓名| 年齡|性別|生日
         * @return
         */
        public static List<CompletionChoice> getFillData(int rows, String headers) {
            OpenAi openAi = PARMS.get("OpenAi23");
            return getAiResult(openAi, String.format(openAi.getPrompt(), rows, headers));
        }
     
        /**
         * 各種開發語言的兩天機器人
         *
         * @param question             你的問題
         * @param programmingLanguages 語言 比如Java JavaScript
         * @return
         */
        public static List<CompletionChoice> getProgrammingLanguageChatbot(String question, String programmingLanguages) {
            OpenAi openAi = PARMS.get("OpenAi24");
            return getAiResult(openAi, String.format(openAi.getPrompt(), question, programmingLanguages));
        }
     
        /**
         * 機器學習模型方面的機器人
         *
         * @param question 你的問題
         * @return
         */
        public static List<CompletionChoice> getMLChatbot(String question) {
            OpenAi openAi = PARMS.get("OpenAi25");
            return getAiResult(openAi, String.format(openAi.getPrompt(), question));
        }
     
        /**
         * 可以列出各方面的分類列表,比如歌單
         *
         * @param text 清單描述
         * @return
         */
        public static List<CompletionChoice> getListMaker(String text) {
            OpenAi openAi = PARMS.get("OpenAi26");
            return getAiResult(openAi, String.format(openAi.getPrompt(), text));
        }
     
        /**
         * 對一段文字進行情緒分析
         *
         * @param text
         * @return
         */
        public static List<CompletionChoice> getTweetClassifier(String text) {
            OpenAi openAi = PARMS.get("OpenAi27");
            return getAiResult(openAi, String.format(openAi.getPrompt(), text));
        }
     
        /**
         * 抽取文本中的航空代碼信息
         *
         * @param text
         * @return
         */
        public static List<CompletionChoice> getAirportCodeExtractor(String text) {
            OpenAi openAi = PARMS.get("OpenAi28");
            return getAiResult(openAi, String.format(openAi.getPrompt(), text));
        }
     
        /**
         * 無上下文,語句描述生成SQL
         *
         * @param text
         * @return
         */
        public static List<CompletionChoice> getSQL(String text) {
            OpenAi openAi = PARMS.get("OpenAi29");
            return getAiResult(openAi, String.format(openAi.getPrompt(), text));
        }
     
        /**
         * 從文本中抽取聯系方式
         *
         * @param extractContent 抽取內容描述
         * @param text
         * @return 從下面文本中抽取郵箱和電話:\n教育行業A股IPO第一股(股票代碼 003032)\n全國咨詢/投訴熱線:400-618-4000    舉報郵箱:mc@itcast.cn
         */
        public static List<CompletionChoice> getExtractContactInformation(String extractContent, String text) {
            OpenAi openAi = PARMS.get("OpenAi30");
            return getAiResult(openAi, String.format(openAi.getPrompt(), extractContent, text));
        }
     
        /**
         * 把一種語言轉成另外一種語言代碼
         *
         * @param fromCodeType 當前代碼類型
         * @param toCodeType   轉換的代碼類型
         * @param code
         * @return
         */
        public static List<CompletionChoice> getTransformationCode(String fromCodeType, String toCodeType, String code) {
            OpenAi openAi = PARMS.get("OpenAi31");
            return getAiResult(openAi, String.format(openAi.getPrompt(), fromCodeType, toCodeType, fromCodeType, code, toCodeType));
        }
     
        /**
         * 模仿好友聊天
         *
         * @param question
         * @return
         */
        public static List<CompletionChoice> getFriendChat(String question) {
            OpenAi openAi = PARMS.get("OpenAi32");
            return getAiResult(openAi, String.format(openAi.getPrompt(), question));
        }
     
        /**
         * 依據描述生成對應顏色
         *
         * @param text
         * @return
         */
        public static List<CompletionChoice> getMoodToColor(String text) {
            OpenAi openAi = PARMS.get("OpenAi33");
            return getAiResult(openAi, String.format(openAi.getPrompt(), text));
        }
     
        /**
         * 自動為程序生成文檔
         *
         * @param codeType 語言
         * @param code
         * @return
         */
        public static List<CompletionChoice> getCodeDocument(String codeType, String code) {
            OpenAi openAi = PARMS.get("OpenAi34");
            return getAiResult(openAi, String.format(openAi.getPrompt(), codeType, code));
        }
     
        /**
         * 依據短語生成相關文短
         *
         * @param text 短語
         * @return
         */
        public static List<CompletionChoice> getCreateAnalogies(String text) {
            OpenAi openAi = PARMS.get("OpenAi35");
            return getAiResult(openAi, String.format(openAi.getPrompt(), text));
        }
     
        /**
         * 把多行代碼簡單的壓縮成一行
         *
         * @param codeType 語言
         * @param code
         * @return
         */
        public static List<CompletionChoice> getCodeLine(String codeType, String code) {
            OpenAi openAi = PARMS.get("OpenAi36");
            return getAiResult(openAi, String.format(openAi.getPrompt(), codeType, code, codeType));
        }
     
        /**
         * 依據一個主題創建一個故事
         *
         * @param topic 創作主題
         * @return
         */
        public static List<CompletionChoice> getStory(String topic) {
            OpenAi openAi = PARMS.get("OpenAi37");
            return getAiResult(openAi, String.format(openAi.getPrompt(), topic));
        }
     
        /**
         * 第一人稱轉第3人稱
         *
         * @param text
         * @return
         */
        public static List<CompletionChoice> getStoryCreator(String text) {
            OpenAi openAi = PARMS.get("OpenAi38");
            return getAiResult(openAi, String.format(openAi.getPrompt(), text));
        }
     
        /**
         * 依據筆記生成摘要說明
         *
         * @param scene 生成的摘要場景
         * @param note  記錄的筆記
         * @return
         */
        public static List<CompletionChoice> getNotesToSummary(String scene, String note) {
            OpenAi openAi = PARMS.get("OpenAi39");
            return getAiResult(openAi, String.format(openAi.getPrompt(), note));
        }
     
        /**
         * 給定一個主題,讓其生成一些主題相關的想法
         *
         * @param topic 頭腦風暴關鍵詞
         * @return
         */
        public static List<CompletionChoice> getIdeaGenerator(String topic) {
            OpenAi openAi = PARMS.get("OpenAi40");
            return getAiResult(openAi, String.format(openAi.getPrompt(), topic));
        }
     
        /**
         * 按照ESRB進行文本分類
         *
         * @param text 文本
         * @return
         */
        public static List<CompletionChoice> getESRBRating(String text) {
            OpenAi openAi = PARMS.get("OpenAi41");
            return getAiResult(openAi, String.format(openAi.getPrompt(), text));
        }
     
        /**
         * 按照提示為相關內容生成提綱
         *
         * @param text 場景,比如 數據庫軟件生成大學畢業論文
         * @return
         */
        public static List<CompletionChoice> getEssayOutline(String text) {
            OpenAi openAi = PARMS.get("OpenAi42");
            return getAiResult(openAi, String.format(openAi.getPrompt(), text));
        }
     
        /**
         * 依據美食名稱和材料生成美食的制作步驟
         *
         * @param name        美食名稱
         * @param ingredients 美食食材
         * @return
         */
        public static List<CompletionChoice> getRecipeCreator(String name, List<String> ingredients) {
            OpenAi openAi = PARMS.get("OpenAi43");
            StringJoiner joiner = new StringJoiner("\n");
            for (String ingredient : ingredients) {
                joiner.add(ingredient);
            }
            return getAiResult(openAi, String.format(openAi.getPrompt(), name, joiner.toString()));
        }
     
        /**
         * 與AI機器進行聊天
         *
         * @param question
         * @return
         */
        public static List<CompletionChoice> getAiChatbot(String question) {
            OpenAi openAi = PARMS.get("OpenAi44");
            return getAiResult(openAi, String.format(openAi.getPrompt(), question));
        }
     
        /**
         * 與諷刺機器進行聊天,聊天的機器人是一種消極情緒
         *
         * @param question
         * @return
         */
        public static List<CompletionChoice> getMarvChatbot(String question) {
            OpenAi openAi = PARMS.get("OpenAi45");
            return getAiResult(openAi, String.format(openAi.getPrompt(), question));
        }
     
        /**
         * 把一段文本分解成幾步來完成
         *
         * @param text
         * @return
         */
        public static List<CompletionChoice> getTurnDirection(String text) {
            OpenAi openAi = PARMS.get("OpenAi46");
            return getAiResult(openAi, String.format(openAi.getPrompt(), text));
        }
     
        /**
         * 依據文本內容自動生成點評
         *
         * @param text
         * @return
         */
        public static List<CompletionChoice> getReviewCreator(String text) {
            OpenAi openAi = PARMS.get("OpenAi47");
            return getAiResult(openAi, String.format(openAi.getPrompt(), text));
        }
     
        /**
         * 可以為學習知識自動解答
         *
         * @param text
         * @return
         */
        public static List<CompletionChoice> getStudyNote(String text) {
            OpenAi openAi = PARMS.get("OpenAi48");
            return getAiResult(openAi, String.format(openAi.getPrompt(), text));
        }
     
        /**
         * 生成面試題
         *
         * @param text
         * @return
         */
        public static List<CompletionChoice> getInterviewQuestion(String text) {
            OpenAi openAi = PARMS.get("OpenAi49");
            System.out.println(String.format(openAi.getPrompt(), text));
            return getAiResult(openAi, String.format(openAi.getPrompt(), text));
        }
     
    }
    2.4 自動配置類OpenAiAutoConfiguration.java
    package com.wkf.workrecord.tools.openai;
     
    import org.springframework.boot.context.properties.EnableConfigurationProperties;
    import org.springframework.context.annotation.Configuration;
     
    /**
     * 自動配置類
     * @author wuKeFan
     * @date 2023-02-10 15:34:01
     */
    @Configuration
    @EnableConfigurationProperties(OpenAiProperties.class)
    public class OpenAiAutoConfiguration {
    }
    2.5 在resources文件夾下的META-INF/spring.factories文件中增加配置
    org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.wkf.workrecord.tools.openai.OpenAiAutoConfiguration
    2.6 在yml文件上配置token
    openai:
      token: 你的token
      timeout: 5000

    3 編寫測試類

    package com.wkf.workrecord.study;
     
    import com.theokanning.openai.completion.CompletionChoice;
    import com.wkf.workrecord.tools.openai.OpenAiUtils;
    import lombok.extern.slf4j.Slf4j;
    import org.junit.jupiter.api.Test;
    import org.springframework.boot.test.context.SpringBootTest;
     
    import java.util.List;
     
    /**
     * openAi測試類
     * @author wuKeFan
     * @date 2023-02-10 15:37:01
     */
    @Slf4j
    @SpringBootTest
    public class OpenAiTest {
     
        /**
         * openAi接口請求API
         */
        @Test
        public void test() {
            List<CompletionChoice> questionAnswer = OpenAiUtils.getQuestionAnswer("使用SpringBoot框架進行Http請求的詳細代碼");
            for (CompletionChoice completionChoice : questionAnswer) {
                System.out.println(completionChoice.getText());
            }
            List<CompletionChoice> openAiApi = OpenAiUtils.getOpenAiApi("使用SpringBoot框架進行Http請求");
            for (CompletionChoice completionChoice : openAiApi) {
                System.out.println(completionChoice.getText());
            }
        }
     
    }

    4 補充

    如果使用上述方法出現超時錯誤的,可以使用這個方法

    4.1 添加依賴
            <!-- openAi 最新版依賴 -->
            <dependency>
                <groupId>com.unfbx</groupId>
                <artifactId>chatgpt-java</artifactId>
                <version>1.0.6</version>
            </dependency>
    4.2 添加代碼
            Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("localhost", 7890));
            //日志輸出可以不添加
            //HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor(new OpenAILogger());
            //httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
            OpenAiClient openAiClient = OpenAiClient.builder()
                    .apiKey("sk-***********************************************")
                    .connectTimeout(50)
                    .writeTimeout(50)
                    .readTimeout(50)
                    .proxy(proxy)
                    //.interceptor(Collections.singletonList(httpLoggingInterceptor))
                    .apiHost("https://api.openai.com/")
                    .build();
            CompletionResponse completions = openAiClient.completions("你是openAi嗎");
            Arrays.stream(completions.getChoices()).forEach(System.out::println);

    感謝各位的閱讀,以上就是“SpringBoot如何整合chatGPT”的內容了,經過本文的學習后,相信大家對SpringBoot如何整合chatGPT這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女