当前位置:

首页 > 编程开发 > SpringBoot怎么整合chatGPT

SpringBoot怎么整合chatGPT

1添加依赖com.theokanning.openai-gpt3-javaclient0.8.12创建相关文件2.1实体类:OpenAi.javapackagecom.wkf.workrecord.tools.openai;importlombok.AllArgsConstructor;importlombok.Data;importlombok.NoArgsConstructor;/***@authorwuKeFan*@date2023-02-1015:40:22*/@Data@NoArgsConstr

本文目录

      1 添加依赖

              
              
                  com.theokanning.openai-gpt3-java
                  client
                  0.8.1
              

      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 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=\"\", # 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 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 getQuestionAnswer(String question) {
              OpenAi openAi = PARMS.get("OpenAi01");
              return getAiResult(openAi, String.format(openAi.getPrompt(), question));
          }
       
          /**
           * 语法纠错
           *
           * @param text
           * @return
           */
          public static List getGrammarCorrection(String text) {
              OpenAi openAi = PARMS.get("OpenAi02");
              return getAiResult(openAi, String.format(openAi.getPrompt(), text));
          }
       
          /**
           * 将一段话,概况中心
           *
           * @param text
           * @return
           */
          public static List getSummarize(String text) {
              OpenAi openAi = PARMS.get("OpenAi03");
              return getAiResult(openAi, String.format(openAi.getPrompt(), text));
          }
       
          /**
           * 一句话生成OpenAi的代码
           *
           * @param text
           * @return
           */
          public static List getOpenAiApi(String text) {
              OpenAi openAi = PARMS.get("OpenAi04");
              return getAiResult(openAi, String.format(openAi.getPrompt(), text));
          }
       
          /**
           * 一句话生成程序的命令,目前支持操作系统指令比较多
           *
           * @param text
           * @return
           */
          public static List getTextToCommand(String text) {
              OpenAi openAi = PARMS.get("OpenAi05");
              return getAiResult(openAi, String.format(openAi.getPrompt(), text));
          }
       
          /**
           * 把一种语法翻译成其它几种语言
           *
           * @param text
           * @return
           */
          public static List 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 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 getStripeApi(String databaseType, List 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 getUnstructuredData(String text) {
              OpenAi openAi = PARMS.get("OpenAi09");
              return getAiResult(openAi, String.format(openAi.getPrompt(), text));
          }
       
          /**
           * 把一段信息继续分类
           *
           * @param text 要分类的文本
           * @return
           */
          public static List 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 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 getTextEmoji(String text) {
              OpenAi openAi = PARMS.get("OpenAi12");
              return getAiResult(openAi, String.format(openAi.getPrompt(), text));
          }
       
          /**
           * 求一段代码的时间复杂度
           *
           * @param code 代码
           * @return
           */
          public static List 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 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 getBatchTweetClassifier(List 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 getExplainCOde(String code) {
              OpenAi openAi = PARMS.get("OpenAi16");
              return getAiResult(openAi, String.format(openAi.getPrompt(), code));
          }
       
          /**
           * 提取一段文本中的关键字
           *
           * @param text 文本
           * @return
           */
          public static List getTextKeywords(String text) {
              OpenAi openAi = PARMS.get("OpenAi17");
              return getAiResult(openAi, String.format(openAi.getPrompt(), text));
          }
       
          /**
           * 事实回答答题
           *
           * @param text 文本
           * @return
           */
          public static List getFactualAnswering(String text) {
              OpenAi openAi = PARMS.get("OpenAi18");
              return getAiResult(openAi, String.format(openAi.getPrompt(), text));
          }
       
          /**
           * 给一个产品设计一个广告
           *
           * @param text 文本
           * @return
           */
          public static List getAd(String text) {
              OpenAi openAi = PARMS.get("OpenAi19");
              return getAiResult(openAi, String.format(openAi.getPrompt(), text));
          }
       
          /**
           * 依据产品描述和种子词语,给一个产品取一个好听的名字
           *
           * @param productDescription 产品描述
           * @param seedWords          种子词语
           * @return
           */
          public static List 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 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 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 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 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 getMLChatbot(String question) {
              OpenAi openAi = PARMS.get("OpenAi25");
              return getAiResult(openAi, String.format(openAi.getPrompt(), question));
          }
       
          /**
           * 可以列出各方面的分类列表,比如歌单
           *
           * @param text 清单描述
           * @return
           */
          public static List getListMaker(String text) {
              OpenAi openAi = PARMS.get("OpenAi26");
              return getAiResult(openAi, String.format(openAi.getPrompt(), text));
          }
       
          /**
           * 对一段文字进行情绪分析
           *
           * @param text
           * @return
           */
          public static List getTweetClassifier(String text) {
              OpenAi openAi = PARMS.get("OpenAi27");
              return getAiResult(openAi, String.format(openAi.getPrompt(), text));
          }
       
          /**
           * 抽取文本中的航空代码信息
           *
           * @param text
           * @return
           */
          public static List getAirportCodeExtractor(String text) {
              OpenAi openAi = PARMS.get("OpenAi28");
              return getAiResult(openAi, String.format(openAi.getPrompt(), text));
          }
       
          /**
           * 无上下文,语句描述生成SQL
           *
           * @param text
           * @return
           */
          public static List 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 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 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 getFriendChat(String question) {
              OpenAi openAi = PARMS.get("OpenAi32");
              return getAiResult(openAi, String.format(openAi.getPrompt(), question));
          }
       
          /**
           * 依据描述生成对应颜色
           *
           * @param text
           * @return
           */
          public static List getMoodToColor(String text) {
              OpenAi openAi = PARMS.get("OpenAi33");
              return getAiResult(openAi, String.format(openAi.getPrompt(), text));
          }
       
          /**
           * 自动为程序生成文档
           *
           * @param codeType 语言
           * @param code
           * @return
           */
          public static List 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 getCreateAnalogies(String text) {
              OpenAi openAi = PARMS.get("OpenAi35");
              return getAiResult(openAi, String.format(openAi.getPrompt(), text));
          }
       
          /**
           * 把多行代码简单的压缩成一行
           *
           * @param codeType 语言
           * @param code
           * @return
           */
          public static List 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 getStory(String topic) {
              OpenAi openAi = PARMS.get("OpenAi37");
              return getAiResult(openAi, String.format(openAi.getPrompt(), topic));
          }
       
          /**
           * 第一人称转第3人称
           *
           * @param text
           * @return
           */
          public static List getStoryCreator(String text) {
              OpenAi openAi = PARMS.get("OpenAi38");
              return getAiResult(openAi, String.format(openAi.getPrompt(), text));
          }
       
          /**
           * 依据笔记生成摘要说明
           *
           * @param scene 生成的摘要场景
           * @param note  记录的笔记
           * @return
           */
          public static List getNotesToSummary(String scene, String note) {
              OpenAi openAi = PARMS.get("OpenAi39");
              return getAiResult(openAi, String.format(openAi.getPrompt(), note));
          }
       
          /**
           * 给定一个主题,让其生成一些主题相关的想法
           *
           * @param topic 头脑风暴关键词
           * @return
           */
          public static List getIdeaGenerator(String topic) {
              OpenAi openAi = PARMS.get("OpenAi40");
              return getAiResult(openAi, String.format(openAi.getPrompt(), topic));
          }
       
          /**
           * 按照ESRB进行文本分类
           *
           * @param text 文本
           * @return
           */
          public static List getESRBRating(String text) {
              OpenAi openAi = PARMS.get("OpenAi41");
              return getAiResult(openAi, String.format(openAi.getPrompt(), text));
          }
       
          /**
           * 按照提示为相关内容生成提纲
           *
           * @param text 场景,比如 数据库软件生成大学毕业论文
           * @return
           */
          public static List getEssayOutline(String text) {
              OpenAi openAi = PARMS.get("OpenAi42");
              return getAiResult(openAi, String.format(openAi.getPrompt(), text));
          }
       
          /**
           * 依据美食名称和材料生成美食的制作步骤
           *
           * @param name        美食名称
           * @param ingredients 美食食材
           * @return
           */
          public static List getRecipeCreator(String name, List 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 getAiChatbot(String question) {
              OpenAi openAi = PARMS.get("OpenAi44");
              return getAiResult(openAi, String.format(openAi.getPrompt(), question));
          }
       
          /**
           * 与讽刺机器进行聊天,聊天的机器人是一种消极情绪
           *
           * @param question
           * @return
           */
          public static List getMarvChatbot(String question) {
              OpenAi openAi = PARMS.get("OpenAi45");
              return getAiResult(openAi, String.format(openAi.getPrompt(), question));
          }
       
          /**
           * 把一段文本分解成几步来完成
           *
           * @param text
           * @return
           */
          public static List getTurnDirection(String text) {
              OpenAi openAi = PARMS.get("OpenAi46");
              return getAiResult(openAi, String.format(openAi.getPrompt(), text));
          }
       
          /**
           * 依据文本内容自动生成点评
           *
           * @param text
           * @return
           */
          public static List getReviewCreator(String text) {
              OpenAi openAi = PARMS.get("OpenAi47");
              return getAiResult(openAi, String.format(openAi.getPrompt(), text));
          }
       
          /**
           * 可以为学习知识自动解答
           *
           * @param text
           * @return
           */
          public static List getStudyNote(String text) {
              OpenAi openAi = PARMS.get("OpenAi48");
              return getAiResult(openAi, String.format(openAi.getPrompt(), text));
          }
       
          /**
           * 生成面试题
           *
           * @param text
           * @return
           */
          public static List 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 questionAnswer = OpenAiUtils.getQuestionAnswer("使用SpringBoot框架进行Http请求的详细代码");
              for (CompletionChoice completionChoice : questionAnswer) {
                  System.out.println(completionChoice.getText());
              }
              List openAiApi = OpenAiUtils.getOpenAiApi("使用SpringBoot框架进行Http请求");
              for (CompletionChoice completionChoice : openAiApi) {
                  System.out.println(completionChoice.getText());
              }
          }
       
      }

      4 补充

      如果使用上述方法出现超时错误的,可以使用这个方法

      4.1 添加依赖

              
              
                  com.unfbx
                  chatgpt-java
                  1.0.6
              

      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);
      本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
      作者最新文章
      编程开发
      相关文章 更多
      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 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。