SpringBoot整合chatGPT

article/2024/12/22 13:27:02

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@Overridepublic 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: 你的tokentimeout: 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*/@Testpublic 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);

5 总结

到此这篇关于SpringBoot整合chatGPT的文章就介绍到这了


http://chatgpt.dhexx.cn/article/Fwndt4Ll.shtml

相关文章

ChatGPT炒股:批量下载北交所上市公司的招股说明书

打开北京证券交易所官网&#xff0c;点击发行上市&#xff0c;然后点击公开发行信息披露&#xff0c;然后在查询框里面输入关键词&#xff1a;在北京证券交易所上市招股说明书&#xff0c;然后选择时间&#xff0c;点击查询&#xff0c;就可以看到所有北交所上市公司的招股说明…

chatgpt赋能python:Python如何获取股票数据——详细介绍

Python如何获取股票数据——详细介绍 Python作为一款专业的编程语言&#xff0c;其应用领域十分广泛&#xff0c;其中之一就是股票数据的获取。本文将详细介绍Python如何获取股票数据的方法&#xff0c;帮助大家快速获取所需的股票信息。 一、使用pandas-datareader获取股票数…

chatgpt赋能python:使用Python操作股票软件:探索股票市场的新方式

使用Python操作股票软件&#xff1a;探索股票市场的新方式 在当今股票市场中&#xff0c;许多投资者正在寻找新的方式来更好地管理其投资组合。一种新的方式是使用Python编程语言操作股票软件。Python拥有简洁的语法和丰富的库来帮助投资者更好地理解和管理股票。在本文中&…

ChatGPT炒股:爬取氢能行业企业名录

全球氢能网有氢能源相关企业的列表&#xff0c;怎么全部爬取下来呢&#xff1f; 先看翻页规律&#xff1a; http://h2.china-nengyuan.com/company/company_0.html http://h2.china-nengyuan.com/company/company_1.html http://h2.china-nengyuan.com/company/company_21.h…

chatgpt赋能python:Python编程炒股软件:优秀的股票市场分析工具

Python 编程炒股软件&#xff1a;优秀的股票市场分析工具 Python 编程语言一直以来在数据分析和科学计算领域处于领先地位。由于它强大的数据处理能力和易于使用的编程语言特性&#xff0c;Python成为了许多股票市场分析工具的首选。 现在&#xff0c;越来越多的投资者使用Py…

【python量化】ChatGPT4 实现股票量化盯盘系统

如果你还不知道 ChatGPT 是什么 建议看这篇文章&#xff1a;ChatGPT 为什么这么火&#xff1f;它能干什么&#xff1f; 昨天&#xff0c;我&#xff0c;一个 python 小白&#xff0c;花了 2 个小时时间&#xff0c;让 ChatGPT4 帮我实现了一个股票量化盯盘系统。 开通 plus 会员…

ChatGPT炒股:从上市公司招股说明书中批量提取发明专利表格

上市公司招股说明书通常会详细列明公司的发明专利&#xff0c;而通过企业的发明专利可以了解企业未来的业务布局情况&#xff0c;怎么把这些发明专利列表都批量提取出来呢? 随机打开几个上市公司的招股说明书&#xff0c;可以看到发明专利这一内容&#xff0c;共同的特征是都有…

chatgpt赋能python:用Python做股票分析

用Python做股票分析 在当今的股市中&#xff0c;数据分析和预测已经变得十分重要。Python作为最流行的编程语言之一&#xff0c;不仅易于学习&#xff0c;还有非常强大的数据处理和分析能力。在本文中&#xff0c;我们将探讨如何用Python进行股票分析。 数据收集 要进行股票…

ChatGPT炒股:监控水泥等原材料价格每日变动情况

水泥、钢铁等大宗商品原材料价格对于很多企业的业绩影响较大&#xff0c;这些产品的价格变动情况需要高频监控&#xff0c;来评估企业未来业绩变动趋势。 下面以水泥网的水泥指数&#xff0c;来说明如何通过ChatGPT来编写Python程序&#xff0c;实现监控价格变动的功能。 打开…

ChatGPT炒股:从巨潮资讯网上批量下载特定主题的股票公告

巨潮资讯网是股票公告的指定披露渠道之一&#xff0c;上面有非常详细的A股股票公告内容。 现在&#xff0c;我们要获取2023-01-04~2023-07-04期间所有新三板公司中标题包含“2023年日常性关联交易”的公告。 首先从network中获取到真实网址&#xff1a;http://www.cninfo.com…

ChatGPT炒股:批量自动提取股票公告中的表格并合并数据

首先&#xff0c;在ChatGPT中输入提示词&#xff1a; 写一段Python代码&#xff1a; F盘文件夹“新三板 2023年日常性关联交易20230704”中很多个PDF文件&#xff0c;用 Tabula提取这些PDF文件中第1页中的第2个表格&#xff0c;然后保存到表格文件中&#xff0c;文件标题名和…

ChatGPT炒股:从股票招股说明书中批量提取竞争对手信息

股票招股说明书中都会提到上市公司的市场竞争情况和竞争对手。要研究企业&#xff0c;就必须仔细研究竞争对手。怎么将竞争对手这些信息批量从招股说明书中提取出来呢&#xff1f; 首先观察其规律&#xff1a; 有的是这样写的&#xff1a; 行业内的主要企业&#xff1a;浙江…

ChatGPT炒股:查询分析某个公募基金的持仓变化

如果很认同某个基金经理的投资理念&#xff0c;可以跟踪基金经理的持仓变化&#xff0c;可以获取一些投资的线索。手动操作也可以实现&#xff0c;但略微麻烦&#xff0c;如果利用ChatGPT写一个跟踪程序&#xff0c;就方便多了。 下面以汇丰晋信副总经理、投资总监、知名基金经…

ChatGPT炒股:自动批量下载choice每日热门研报

东方财富choice里面研究报告板块&#xff0c;每天更新研报几百篇&#xff0c;24小时热门研报也接近100篇。作为股票投资者&#xff0c;每天阅读最新热门研报&#xff0c;了解市场动态&#xff0c;是一个基本功。怎么可以自动批量下载这些24小时热门研报呢&#xff1f; 首先&…

ChatGPT炒股:自动批量下载萝卜投研网站上的股票研报

萝卜投研网站有很多的股票研究报告。 如果我们在chrome浏览器中打开了很多研报&#xff0c;该如何批量下载呢&#xff1f; 查看网页源代码&#xff0c;研报是pdf格式&#xff0c;下载链接也在源代码中&#xff0c;很好找。 下载方法是&#xff0c;用Selenium来接管已经运行的…

ChatGPT炒股:自动获取某只股票最新新闻报道

炒股&#xff0c;肯定要看某个股票的相关新闻&#xff0c;这是最基础的线上调研。百度新闻相对比较全面&#xff0c;如何通过ChatGPT来自动获取某个股票的百度新闻报道呢&#xff1f; 首先&#xff0c;在百度新闻搜索页面&#xff0c;观察翻页的规律&#xff1a; 第二页&#…

ChatGPT炒股:深度挖掘数据要素产业链股票

随着ChatGPT带动AI产业链股票火爆&#xff0c;数据要素作为其中重要一环&#xff0c;也被市场重视。 如何深度挖掘数据要素产业链股票呢&#xff1f; 国内已经成立好几家数据交易所&#xff0c;比如上海数据交易所&#xff0c;里面已经有很多挂牌的数据产品。如果能把所有已经…

ChatGPT炒股:自动批量下载特定主题的股票公告

很多财经网站、证券交易所等网站都有股票公告。有时候&#xff0c;我们需要从海量公告信息中查找特定信息。比如&#xff0c;查询所有股票2023年预计关联交易的内容&#xff0c;怎么自动批量下载呢&#xff1f; 下面以股转系统的新三板股票为例&#xff0c;来说明如何用ChatGP…

解读:ChatGPT在股票市场预测方面的应用

写在前面 ChatGPT的应用为股价预测领域带来了新的方法和思路。例如&#xff0c;通过结合自然语言处理和机器学习技术&#xff0c;可以从大量文本数据中提取有关股票市场的关键信息&#xff0c;进一步改进和创新预测模型&#xff1b;处理多源数据&#xff0c;如股票数据、新闻报…

利用chatGPT+剪映高效制作中英双语字幕(其它语言以此类推)

目 录 前 言 一、导出中文字幕 二、利用提示词在chatGPT上快速翻译 三、导入中英文字幕到剪映 四、展示效果 五、参考资料 前 言 ChatGPT可以帮助用户快速生成中英文对照的脚本&#xff0c;解决了在剪映中一个一个翻译中文的痛点&#xff0c;从而提高字幕制作的效率。这…