chatgpt图像

master
zyx 3 years ago
parent 1583407f5d
commit ea67859376

@ -1,6 +1,7 @@
package com.zyx.mpdemo.controller;
import com.zyx.mpdemo.common.resp.CommonResponse;
import com.zyx.mpdemo.model.enums.ChatgptReqEnums;
import com.zyx.mpdemo.service.ChatgptService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
@ -25,8 +26,13 @@ public class ChatgptController {
private ChatgptService chatgptService;
@GetMapping("/answer")
public CommonResponse<String> getCourseInfo(@RequestParam String question) {
return CommonResponse.success(chatgptService.getAnswer(question), "获取答案成功");
public CommonResponse<String> getAnswer(@RequestParam String question) {
return CommonResponse.success(chatgptService.getAnswer(question, ChatgptReqEnums.TEXT), "获取答案成功");
}
@GetMapping("/pic")
public CommonResponse<String> getPic(@RequestParam String desc) {
return CommonResponse.success(chatgptService.getAnswer(desc, ChatgptReqEnums.PICTURE), "获取图片成功");
}
}

@ -0,0 +1,19 @@
package com.zyx.mpdemo.model.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
*
* @author Yaxi.Zhang
* @since 2023/2/11 09:13
*/
@Getter
@AllArgsConstructor
public enum ChatgptReqEnums {
TEXT(1),
PICTURE(2)
;
private final Integer code;
}

@ -17,10 +17,8 @@ public class BatchLearnedReq {
@NotNull(message = "章节不能为空")
private String chapter;
@NotNull(message = "开始序号不能为空")
private String startSeq;
@NotNull(message = "结束序号不能为空")
private String endSeq;
}

@ -3,6 +3,7 @@ package com.zyx.mpdemo.model.vo;
import lombok.Data;
import lombok.experimental.Accessors;
import java.util.List;
import java.util.Set;
/**
@ -28,6 +29,6 @@ public class CourseInfoVO {
/**
*
*/
private Set<String> chapters;
private List<String> chapters;
}

@ -6,10 +6,13 @@ import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.zyx.mpdemo.model.enums.ChatgptReqEnums;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
@ -22,16 +25,30 @@ public class ChatgptService {
@Value("${chatgpt.api-key}")
private String apiKey;
public String getAnswer(String question) {
String body = getAnswerBody(question);
return answerFromBody(body);
public String getAnswer(String desc, ChatgptReqEnums reqEnum) {
String body = getAnswerBody(desc, reqEnum);
return targetFromBody(body, reqEnum);
}
private String getAnswerBody(String question) {
private String getAnswerBody(String desc, ChatgptReqEnums reqEnum) {
String body = "";
String url = "";
switch (reqEnum) {
case TEXT:
url = getAnswerUrl();
body = getQuesStr(desc);
break;
case PICTURE:
url = getPicUrl();
body = getPicStr(desc);
break;
default:
break;
}
return HttpUtil
.createPost(getAnswerUrl())
.createPost(url)
.addHeaders(getHeaders())
.body(getQuesStr(question), ContentType.JSON.getValue())
.body(body, ContentType.JSON.getValue())
.setReadTimeout(60 * 30 * 1000)
.setConnectionTimeout(60 * 30 * 1000)
.setMaxRedirectCount(3)
@ -47,6 +64,14 @@ public class ChatgptService {
.build();
}
private String getPicUrl() {
return UrlBuilder.of()
.setScheme("https")
.setHost("api.openai.com")
.addPath("v1/images/generations")
.build();
}
private Map<String, String> getHeaders() {
Map<String, String> headers = new HashMap<>();
headers.put("Authorization", "Bearer " + apiKey);
@ -54,20 +79,44 @@ public class ChatgptService {
return headers;
}
private String getQuesStr(String question) {
private String getQuesStr(String desc) {
Map<String, Object> reqMap = new HashMap<>();
reqMap.put("model", "text-davinci-003");
reqMap.put("prompt", question);
reqMap.put("prompt", desc);
reqMap.put("temperature", 0);
reqMap.put("max_tokens", 2048);
return JSONUtil.toJsonStr(reqMap);
}
private String answerFromBody(String body) {
private String getPicStr(String desc) {
Map<String, Object> reqMap = new HashMap<>();
reqMap.put("prompt", desc);
reqMap.put("n", 2);
reqMap.put("size", "1024x1024");
return JSONUtil.toJsonStr(reqMap);
}
private String targetFromBody(String body, ChatgptReqEnums reqEnum) {
JSONObject jsonObject = JSONUtil.parseObj(body);
String target = "";
switch (reqEnum) {
case TEXT:
JSONArray choices = jsonObject.getJSONArray("choices");
JSONObject choice = choices.getJSONObject(0);
return choice.getStr("text");
target = choice.getStr("text");
break;
case PICTURE:
JSONArray urls = jsonObject.getJSONArray("data");
List<String> urlList = new ArrayList<>();
for (JSONObject jsonObj : urls.jsonIter()) {
urlList.add(jsonObj.getStr("url"));
}
target = JSONUtil.toJsonStr(urlList);
break;
default:
break;
}
return target;
}
}

@ -46,7 +46,12 @@ public class CourseServiceImpl extends ServiceImpl<CourseMapper, Course> impleme
List<Course> coursesById = courseMap.get(courseId);
if (CollUtil.isNotEmpty(coursesById)) {
String courseName = coursesById.get(0).getCourseName();
Set<String> chapters = coursesById.stream().map(Course::getChapter).collect(Collectors.toSet());
List<String> chapters = coursesById.stream()
.map(Course::getChapter)
.collect(Collectors.toSet())
.stream()
.sorted()
.collect(Collectors.toList());
courseInfos.add(new CourseInfoVO().setCourseId(courseId).setCourseName(courseName).setChapters(chapters));
}
}
@ -84,8 +89,8 @@ public class CourseServiceImpl extends ServiceImpl<CourseMapper, Course> impleme
queryWrapper
.eq(Course::getCourseName, batchLearnedReq.getCourseName())
.eq(Course::getChapter, batchLearnedReq.getChapter())
.ge(Course::getSequence, batchLearnedReq.getStartSeq())
.le(Course::getSequence, batchLearnedReq.getEndSeq())
.ge(StrUtil.isNotEmpty(batchLearnedReq.getStartSeq()), Course::getSequence, batchLearnedReq.getStartSeq())
.le(StrUtil.isNotEmpty(batchLearnedReq.getEndSeq()),Course::getSequence, batchLearnedReq.getEndSeq())
.ne(Course::getCourseStatus, CourseStatusEnums.DELETE);
List<Course> updateCourses = list(queryWrapper).stream()
.filter(it -> it.getCourseStatus().equals(CourseStatusEnums.LEARNING))

Loading…
Cancel
Save