作者 钟来

模块整理

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>Luhui</artifactId>
<groupId>com.zhonglai.luhui</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>lh-domain</artifactId>
<dependencies>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-commons</artifactId>
</dependency>
<dependency>
<groupId>jakarta.validation</groupId>
<artifactId>jakarta.validation-api</artifactId>
</dependency>
<!-- Swagger3依赖 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>${swagger.version}</version>
<exclusions>
<exclusion>
<groupId>io.swagger</groupId>
<artifactId>swagger-models</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
</project>
\ No newline at end of file
package com.ruoyi.system.domain.entity; import javax.validation.constraints.NotBlank;import javax.validation.constraints.Size;import org.apache.commons.lang3.builder.ToStringBuilder;import org.apache.commons.lang3.builder.ToStringStyle;import com.ruoyi.system.domain.tool.Excel;import com.ruoyi.system.domain.tool.Excel.ColumnType;import com.ruoyi.system.domain.tool.BaseEntity; /** * 字典类型表 sys_dict_type * * @author ruoyi */public class SysDictType extends BaseEntity{ private static final long serialVersionUID = 1L; /** 字典主键 */ @Excel(name = "字典主键", cellType = ColumnType.NUMERIC) private Long dictId; /** 字典名称 */ @Excel(name = "字典名称") private String dictName; /** 字典类型 */ @Excel(name = "字典类型") private String dictType; /** 状态(0正常 1停用) */ @Excel(name = "状态", readConverterExp = "0=正常,1=停用") private String status; public Long getDictId() { return dictId; } public void setDictId(Long dictId) { this.dictId = dictId; } @NotBlank(message = "字典名称不能为空") @Size(min = 0, max = 100, message = "字典类型名称长度不能超过100个字符") public String getDictName() { return dictName; } public void setDictName(String dictName) { this.dictName = dictName; } @NotBlank(message = "字典类型不能为空") @Size(min = 0, max = 100, message = "字典类型类型长度不能超过100个字符") public String getDictType() { return dictType; } public void setDictType(String dictType) { this.dictType = dictType; } public String getStatus() { return status; } public void setStatus(String status) { this.status = status; } @Override public String toString() { return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) .append("dictId", getDictId()) .append("dictName", getDictName()) .append("dictType", getDictType()) .append("status", getStatus()) .append("createBy", getCreateBy()) .append("createTime", getCreateTime()) .append("updateBy", getUpdateBy()) .append("updateTime", getUpdateTime()) .append("remark", getRemark()) .toString(); }}
\ No newline at end of file
package com.zhonglai.luhui.openai;
import com.ruoyi.framework.aspectj.LogAspect;
import com.ruoyi.framework.aspectj.RateLimiterAspect;
import com.ruoyi.framework.config.FilterConfig;
import com.ruoyi.framework.config.SecurityConfig;
import com.ruoyi.framework.security.filter.JwtAuthenticationTokenFilter;
import com.ruoyi.framework.security.handle.LogoutSuccessHandlerImpl;
import com.ruoyi.system.login.service.LoginService;
import com.ruoyi.system.login.service.TokenService;
import com.ruoyi.system.service.impl.SysConfigServiceImpl;
import com.ruoyi.system.service.impl.SysDictTypeServiceImpl;
import com.ruoyi.system.service.impl.SysUserServiceImpl;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.FilterType;
@ComponentScan(basePackages = {
"com.ruoyi.common",
"com.ruoyi.system",
"com.ruoyi.framework",
"com.zhonglai.luhui.openai.properties",
"com.zhonglai.luhui.openai.service",
"com.zhonglai.luhui.openai.controller"
}
)
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
public class OpenaiApplication {
public static void main(String[] args) {
SpringApplication.run(OpenaiApplication.class,args);
System.out.println("启动成功");
}
}
package com.zhonglai.luhui.openai.controller;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSONObject;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.html.HttpUtils;
import com.ruoyi.system.login.dto.OpenAiLoginUser;
import com.ruoyi.system.login.dto.OpenAiUserInfo;
import com.ruoyi.system.service.PublicService;
import com.theokanning.openai.Usage;
import com.zhonglai.luhui.openai.dto.*;
import com.zhonglai.luhui.openai.service.VipServiceImpl;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import okhttp3.*;
import org.jetbrains.annotations.NotNull;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.*;
import java.math.BigDecimal;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
@Api(tags = "chatGPT流接口")
@RestController
@RequestMapping("/chatGPTStream")
public class ChatGPTStreamController extends BaseController {
private static String sessionkey = "CHAT_HISTORY_CONTEXT";//上下文关联存放地址
@Autowired
private PublicService publicService;
@Autowired
private VipServiceImpl vipService;
@ApiOperation(value = "chatgpt3.5",notes = "上下文关联,要实现上下问关联就需要记录整个聊天的提问记录,目前只支持相同session的上下文关联,就是说,如果聊天页面关闭以后再打开,是没有上下文关联的")
@RequestMapping(value = "/chatgptV3_5",method = RequestMethod.POST)
public void chatgptV3_5(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, @RequestBody ChatgptMessageDto chatgptMessageDto) throws IOException {
//跟进用户信息生成入口参数
OpenAiLoginUser userInfo = (OpenAiLoginUser) getLoginUser();
Integer user_id= userInfo.getUserId().intValue();
String room_id = String.valueOf(user_id);
OpenAiUserInfo openAiUserInfo = (OpenAiUserInfo) userInfo.getUser();
PrintWriter out = httpServletResponse.getWriter();
//验证余额是否充足
if(vipService.isCharging(openAiUserInfo.getVip_level()) && openAiUserInfo.getFlow_packet_remain()<=0)
{
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append("您的余额不足请联系管理员或者点击链接充值:\\n\\n");
stringBuffer.append("https://充值链接.com");
out.write(stringBuffer.toString());
return;
}
BigDecimal[] bs = vipService.getUnitprice();
BigDecimal openaiUnitprice = bs[0];
BigDecimal realityUnitprice = bs[1];
if(openaiUnitprice.doubleValue()==0 || realityUnitprice.doubleValue()==0)
{
out.write("系统未配置流量单价,请联系管理员");
return;
}
logger.info("{}生成聊天会话:",room_id);
//上下文关联
HttpSession session = httpServletRequest.getSession();
List<ChatRoomMessages> messageList = Optional.ofNullable((List<ChatRoomMessages>) session.getAttribute(sessionkey)).orElse(new ArrayList<>());
ChatRoomMessages chatRoomMessages = new ChatRoomMessages();
chatRoomMessages.setRole("user");
chatRoomMessages.setContent(chatgptMessageDto.getData());
messageList.add(chatRoomMessages);
session.setAttribute(sessionkey,messageList);
GptMessage gptMessage = new GptMessage();
gptMessage.setRoom_id(room_id);
gptMessage.setUser_id(user_id);
gptMessage.setSend_role(chatRoomMessages.getRole());
gptMessage.setSend_content(chatRoomMessages.getContent());
gptMessage.setCreate_time(DateUtils.getNowTimeMilly());
publicService.insertToTable(gptMessage,"`lk_openai`.`gpt_message`");
//获取返回参数
ChatGPTApiDto chatGPTApiDto = new ChatGPTApiDto();
chatGPTApiDto.setGptMessage_id(gptMessage.getId());
chatGPTApiDto.setMessageList(messageList);
chatGPTApiDto.setUser_id(user_id);
chatGPTApiDto.setRoom_id(room_id);
chatGPTApiDto.setIsfree(vipService.isfree(openAiUserInfo.getVip_level()));
PrintWriter pout = null;
BufferedReader in = null;
try {
URL url = new URL("http://23.224.171.145:8086/chatGPTApi/sendMessage");
// 打开和URL之间的连接
URLConnection conn = url.openConnection();
// 设置通用的请求属性
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
// 发送POST请求必须设置如下两行
conn.setDoOutput(true);
conn.setDoInput(true);
// 获取URLConnection对象对应的输出流
pout = new PrintWriter(conn.getOutputStream());
// 发送请求参数
pout.print(JSONObject.toJSONString(chatGPTApiDto));
// flush输出流的缓冲
pout.flush();
// 定义BufferedReader输入流来读取URL的响应
in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
int character;
while ((character = in.read()) != -1) {
out.write((char) character);
out.flush();
}
} catch (Exception e) {
System.out.println("发送 POST 请求出现异常!" + e);
e.printStackTrace();
}
// 使用finally块来关闭输出流、输入流
finally {
try {
if (!(out == null)) {
out.close();
}
if (in != null) {
in.close();
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
@ApiOperation(value = "更新消息状态")
@Transactional
@RequestMapping(value = "/upUserFlowPacketRemain",method = RequestMethod.POST)
public AjaxResult upUserFlowPacketRemain(@RequestBody CompletionResult3_5 completionResult3_5 )
{
Usage usage = completionResult3_5.getUsage();
List<CompletionChoice3_5> list3_5 = completionResult3_5.getChoices();
if(null != list3_5 && list3_5.size() !=0 )
{
GptMessage gptMessage = new GptMessage();
gptMessage.setPrompt_tokens(0l);
gptMessage.setCompletion_tokens(0l);
gptMessage.setTotal_tokens(0l);
gptMessage.setMessage_size(0);
gptMessage.setSend_size(completionResult3_5.getContentLength());
for (CompletionChoice3_5 completionChoice:list3_5)
{
//统计代币
gptMessage.setCompletion_tokens(gptMessage.getCompletion_tokens()+usage.getCompletionTokens());
gptMessage.setPrompt_tokens(gptMessage.getPrompt_tokens()+usage.getPromptTokens());
gptMessage.setTotal_tokens(gptMessage.getTotal_tokens()+usage.getTotalTokens());
if(null != completionChoice.getMessage())
{
gptMessage.setMessage_role(completionChoice.getMessage().getRole());
}
if(null != gptMessage.getMessage_content())
{
gptMessage.setMessage_size(gptMessage.getMessage_size()+gptMessage.getMessage_content().length());
}
}
gptMessage.setId(completionResult3_5.getGptMessage_id());
publicService.updateObjectByTable(gptMessage,"id","`lk_openai`.`gpt_message`");
publicService.updateBySql("UPDATE `lk_openai`.`user_info` SET flow_packet_remain=flow_packet_remain-"+usage.getTotalTokens()+" WHERE id="+completionResult3_5.getUser_id());
UserFlowPacketRemainLog userFlowPacketRemainLog = new UserFlowPacketRemainLog();
userFlowPacketRemainLog.setCreate_time(DateUtils.getNowTimeMilly());
userFlowPacketRemainLog.setUser_id(completionResult3_5.getUser_id());
userFlowPacketRemainLog.setType(2); //消费
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append("房间号:");
stringBuffer.append(completionResult3_5.getRoom_id());
stringBuffer.append(";");
stringBuffer.append("发送代币:");
stringBuffer.append(usage.getPromptTokens());
stringBuffer.append(";");
stringBuffer.append("返回代币:");
stringBuffer.append(usage.getCompletionTokens());
stringBuffer.append(";");
userFlowPacketRemainLog.setDescribe(stringBuffer.toString());
userFlowPacketRemainLog.setTotal_tokens(usage.getTotalTokens());
BigDecimal[] bs = vipService.getUnitprice();
BigDecimal openaiUnitprice = bs[0];
BigDecimal realityUnitprice = bs[1];
userFlowPacketRemainLog.setOpenai_money((openaiUnitprice.multiply(new BigDecimal(usage.getTotalTokens()))).divide(new BigDecimal(1000),6,BigDecimal.ROUND_HALF_UP));
userFlowPacketRemainLog.setReality_money((realityUnitprice.multiply(new BigDecimal(usage.getTotalTokens()))).divide(new BigDecimal(1000),6,BigDecimal.ROUND_HALF_UP));
publicService.insertToTable(userFlowPacketRemainLog,"`lk_openai`.`user_flow_packet_remain_log`");
}
return AjaxResult.success();
}
}
package com.zhonglai.luhui.openai.controller;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSON;
import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.constant.HttpStatus;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.Message;
import com.ruoyi.common.core.domain.MessageCode;
import com.ruoyi.common.utils.DESUtil;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.GsonConstructor;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.system.login.service.LoginService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;
@Api(tags = "登陆")
@RestController
@RequestMapping("/openAiUserLogin")
public class OpenAiUserLoginController extends BaseController {
private static String user_pass = "123456";
public static String ENCODE_KEY = "com/zhonglai";
@Autowired
private LoginService loginService;
@ApiOperation(value = "手机验证码登陆",notes = "返回token和longtoken,token是接口操作令牌失效时间端,长期本地缓存推荐存储longtoken,longtoken可以通过/openAiUserLogin/getTokenFromLongtoken接口换取token")
@ApiImplicitParams({
@ApiImplicitParam(value = "/openAiUserLogin/sendPhoneCode返回的data数据",name = "key"),
@ApiImplicitParam(value = "验证码",name = "code"),
})
@PostMapping("/userpassLogin")
public AjaxResult userpassLogin(String code, String key,String promo_code)
{
//验证验证码
String str = HttpUtil.post("http://ly.userlogin.yu2le.com/userLogin/verificationCode?key="+key+"&code="+code,new HashMap<>());
Message message = GsonConstructor.get().fromJson(str,Message.class);
if(message.getCode()!=MessageCode.DEFAULT_SUCCESS_CODE.code)
{
return AjaxResult.error(message.getMessage());
}
String[] keys = DESUtil.decode(message.getData().toString(), ENCODE_KEY).split("_");
//生成令牌
String token = loginService.openaiLoginByPass(keys[0],user_pass);
String longtoken = DESUtil.encode(keys[0]+"_"+ DateUtils.getNowTimeMilly(),ENCODE_KEY);
return AjaxResult.success().put(Constants.TOKEN, token).put("longtoken", longtoken);
}
@ApiOperation("发送验证码")
@ApiImplicitParams({
@ApiImplicitParam(value = "手机号",name = "phone"),
})
@PostMapping("/sendPhoneCode")
public AjaxResult sendPhoneCode(String phone)
{
//生成令牌
String str = HttpUtil.get("http://ly.userlogin.yu2le.com/userLogin/getPhoneCode/1/"+phone);
Message message = GsonConstructor.get().fromJson(str,Message.class);
if(message.getCode()!=MessageCode.DEFAULT_SUCCESS_CODE.code)
{
return AjaxResult.error(message.getMessage());
}
return AjaxResult.success(message.getMessage()).put("data",message.getData());
}
@ApiOperation(value = "长期token获取短期token",notes = "此接口也会返回一个长token,推荐用此接口更新本地存储的长token,可以延长长token的使用时间" +
"测试:071FF4B44E9B36FB9814F21FF717CE76F272978A3C49F065")
@ApiImplicitParams({
@ApiImplicitParam(value = "长token(为接口 /openAiUserLogin/userpassLogin 返回的 longtoken)",name = "longtoken"),
})
@GetMapping("/getTokenFromLongtoken")
public AjaxResult getTokenFromLongtoken(String longtoken)
{
String str = DESUtil.decode(longtoken,ENCODE_KEY);
String[] ss = str.split("_");
Integer time = 5184000; //60天
if(DateUtils.getNowTimeMilly()-Integer.parseInt(ss[1])>time)
{
return AjaxResult.error(HttpStatus.FORBIDDEN,"长token过期,请重新用手机号登陆");
}
String token = loginService.openaiLoginByPass(ss[0],user_pass);
String agenlongtoken = DESUtil.encode(ss[0]+"_"+ DateUtils.getNowTimeMilly(),ENCODE_KEY);
return AjaxResult.success().put(Constants.TOKEN, token).put("longtoken", agenlongtoken);
}
}
package com.zhonglai.luhui.openai.properties;
import com.zhonglai.luhui.openai.utils.OpenAiUtils;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class OpenAiProperties implements InitializingBean {
@Value("${chatgpt.token}")
private String token; //秘钥
@Value("${chatgpt.timeout}")
private Integer timeout; //超时时间
// 设置属性时同时设置给OpenAiUtils
@Override
public void afterPropertiesSet() {
OpenAiUtils.OPENAPI_TOKEN = token;
OpenAiUtils.TIMEOUT = timeout;
}
}
package com.zhonglai.luhui.openai.utils;
import com.theokanning.openai.OpenAiService;
import com.theokanning.openai.completion.CompletionChoice;
import com.theokanning.openai.completion.CompletionRequest;
import com.zhonglai.luhui.openai.pojos.OpenAi;
import org.springframework.util.StringUtils;
import java.util.*;
/**
* 调用OpenAi的49中方法
*/
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, ""));
PARMS.put("OpenAi50", new OpenAi("OpenAi50", "chatgpt3.5", "chatgpt3.5", "gpt-3.5-turbo-0301", "%s", null, null, null, null, null, null));
}
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.getUser()))
{
builder.user(openAi.getUser());
}
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) {
return getAiChatbot(question,null);
}
/**
* 与AI机器进行聊天
*
* @param question
* @return
*/
public static List<CompletionChoice> getAiChatbot(String question,String user) {
OpenAi openAi = PARMS.get("OpenAi44");
openAi.setUser(user);
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));
}
public static List<CompletionChoice> getChatGPT3_5(String text) {
OpenAi openAi = PARMS.get("OpenAi50");
System.out.println(String.format(openAi.getPrompt(), text));
return getAiResult(openAi, String.format(openAi.getPrompt(), text));
}
}
# 项目相关配置 jhlt: # 名称 name: zhonglai # 版本 version: 3.8.2 # 版权年份 copyrightYear: 2022 # 获取ip地址开关 addressEnabled: false profile: D:/ruoyi/uploadPath # 开发环境配置 server: # 服务器的HTTP端口,默认为8080 port: 8082 servlet: # 应用的访问路径 context-path: / tomcat: # tomcat的URI编码 uri-encoding: UTF-8 # 连接数满后的排队数,默认为100 accept-count: 1000 threads: # tomcat最大线程数,默认为200 max: 800 # Tomcat启动初始化的线程数,默认值10 min-spare: 100 # 日志配置 logging: level: com.ruoyi: debug org.springframework: warn # Spring配置 spring: # 资源信息 messages: # 国际化资源文件路径 basename: i18n/messages profiles: active: druid # 文件上传 servlet: multipart: # 单个文件大小 max-file-size: 10MB # 设置总上传的文件大小 max-request-size: 20MB # 服务模块 devtools: restart: # 热部署开关 enabled: true # redis 配置 redis: # 地址 host: 47.112.163.61 # 端口,默认为6379 port: 9527 # 数据库索引 database: 1 # 密码 password: Luhui586 # 连接超时时间 timeout: 10s lettuce: pool: # 连接池中的最小空闲连接 min-idle: 0 # 连接池中的最大空闲连接 max-idle: 8 # 连接池的最大数据库连接数 max-active: 8 # #连接池最大阻塞等待时间(使用负值表示没有限制) max-wait: -1ms # token配置 token: # 令牌自定义标识 header: Authorization # 令牌密钥 secret: abcdefghijklmnopqrstuvwxyz # 令牌有效期(默认30分钟) expireTime: 1440 rediskey: lh-openai # MyBatis配置 mybatis: # 搜索指定包别名 typeAliasesPackage: com.ruoyi.**.domain # 配置mapper的扫描,找到所有的mapper.xml映射文件 mapperLocations: classpath*:mapper/**/*Mapper.xml # 加载全局的配置文件 configLocation: classpath:mybatis/mybatis-config.xml # PageHelper分页插件 pagehelper: helperDialect: mysql supportMethodsArguments: true params: count=countSql # Swagger配置 swagger: # 是否开启swagger enabled: true # 请求前缀 pathMapping: /dev-api # 防止XSS攻击 xss: # 过滤开关 enabled: true # 排除链接(多个用逗号分隔) excludes: /system/notice # 匹配链接 urlPatterns: /system/*,/monitor/*,/tool/* mqtt: client: device_life: 180 # NameServer地址 rocketmq: name-server: 47.115.144.179:9876 # 默认的消息组 producer: group: deviceCommand send-message-timeout: 30000 send-topic: lh-chat-gpt send-tags: 1 sys: ## // 对于登录login 注册register 验证码captchaImage 允许匿名访问 antMatchers: /login,/register,/captchaImage,/getCacheObject,/v2/api-docs,/openAiUserLogin/*,/chatGPTStream/upUserFlowPacketRemain chatgpt: token: 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 timeout: 5000
\ No newline at end of file