|
|
|
@ -49,7 +49,6 @@ public class ChatMessageServiceImpl implements ChatMessageService {
|
|
|
|
|
@Resource
|
|
|
|
|
private JsonLoader jsonLoader;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public SseEmitter chatCompletion(ChatCompletionReqDto chatCompletionReqDto, String userId) {
|
|
|
|
|
// 目前仅使用讯飞星火大模型
|
|
|
|
@ -103,6 +102,29 @@ public class ChatMessageServiceImpl implements ChatMessageService {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* AI 总结
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
public SseEmitter chatSummary(WisdomSummaryDto chatSummaryDto, String userId, String userName)
|
|
|
|
|
{
|
|
|
|
|
// 目前仅使用讯飞星火大模型
|
|
|
|
|
// 获取模板文本
|
|
|
|
|
//String text = commentsTemplate(chatCommentsDto);
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* AI 分析
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
public SseEmitter chatAnalysis() {
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 面具模式(暂时不存储聊天记录)
|
|
|
|
|
*/
|
|
|
|
@ -475,6 +497,119 @@ public class ChatMessageServiceImpl implements ChatMessageService {
|
|
|
|
|
//builder.append(String.format(finalChatModel.getEnd().get(0), subjectComments.size(),chatName));
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
//智育 整体总结
|
|
|
|
|
case "wisdomSummary": {
|
|
|
|
|
WisdomSummaryDto summaryDto;
|
|
|
|
|
//转换问题
|
|
|
|
|
try {
|
|
|
|
|
//转换方式
|
|
|
|
|
summaryDto = JSON.parseObject(strData, WisdomSummaryDto.class);
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
throw new ServiceException(ErrorCode.PARAMS_ERROR.getCode(), "类型转换失败");
|
|
|
|
|
}
|
|
|
|
|
if (summaryDto.getWisdom().getName() == null) {
|
|
|
|
|
throw new ServiceException(ErrorCode.PARAMS_ERROR.getCode(), "请求参数异常");
|
|
|
|
|
}
|
|
|
|
|
//循环查找对应的模型数据
|
|
|
|
|
finalChatModel = chatModels.stream()
|
|
|
|
|
.filter(chatModelTemp -> "wisdom".equals(chatModelTemp.getType()))
|
|
|
|
|
.findFirst()
|
|
|
|
|
.orElse(null);
|
|
|
|
|
String chat = phase > 0 ? finalChatModel.getChat().get(1) : finalChatModel.getChat().get(0);
|
|
|
|
|
String cycleChat = finalChatModel.getCycleChats().get(0);
|
|
|
|
|
|
|
|
|
|
// 使用String.format方法生成最终的字符串
|
|
|
|
|
builder.append(String.format(
|
|
|
|
|
chat,
|
|
|
|
|
chatCommentsDto.getName(),
|
|
|
|
|
summaryDto.getWisdom().getYear(),
|
|
|
|
|
summaryDto.getWisdom().getSemester(),
|
|
|
|
|
summaryDto.getWisdom().getJoinAll(),
|
|
|
|
|
summaryDto.getWisdom().getLessonMiddle(),
|
|
|
|
|
summaryDto.getWisdom().getOnLine(),
|
|
|
|
|
summaryDto.getWisdom().getMarking(),
|
|
|
|
|
summaryDto.getWisdom().getLevel(),
|
|
|
|
|
summaryDto.getWisdom().getProportion(),
|
|
|
|
|
summaryDto.getWisdom().getName()
|
|
|
|
|
));
|
|
|
|
|
summaryDto.getWisdom().getDims().forEach(item -> {
|
|
|
|
|
if(item.data.length >= 4)
|
|
|
|
|
{
|
|
|
|
|
builder.append(String.format(cycleChat,
|
|
|
|
|
item.name,
|
|
|
|
|
item.data[0],
|
|
|
|
|
item.data[1],
|
|
|
|
|
item.data[2],
|
|
|
|
|
item.data[3],
|
|
|
|
|
item.data[4]
|
|
|
|
|
));
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
//循环查找对应的模型数据
|
|
|
|
|
finalChatModel = chatModels.stream()
|
|
|
|
|
.filter(chatModelTemp -> "wisdomExam".equals(chatModelTemp.getType()))
|
|
|
|
|
.findFirst()
|
|
|
|
|
.orElse(null);
|
|
|
|
|
int count = 1;
|
|
|
|
|
boolean set =finalChatModel.getChat().size() >= 1;
|
|
|
|
|
if(finalChatModel.getChat().size() >= 1 && !chatCommentsDto.getName().isEmpty()){
|
|
|
|
|
//昵称
|
|
|
|
|
builder.append(String.format(finalChatModel.getChat().get(0), chatCommentsDto.getName()));
|
|
|
|
|
}
|
|
|
|
|
switch(phase){
|
|
|
|
|
case 1:{
|
|
|
|
|
for (WisdomExamCommentsDto examComment : summaryDto.getWisdomExam()) {
|
|
|
|
|
builder.append(String.format(finalChatModel.getCycleChats().get(1), count, examComment.getName(),examComment.getTime(), examComment.getClassRate(),examComment.getGradeRate()));
|
|
|
|
|
count++;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case 2:{
|
|
|
|
|
for (WisdomExamCommentsDto examComment : summaryDto.getWisdomExam()) {
|
|
|
|
|
builder.append(String.format(finalChatModel.getCycleChats().get(2), count, examComment.getName(),examComment.getTime(), examComment.getGradeRate()));
|
|
|
|
|
count++;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
default:{
|
|
|
|
|
for (WisdomExamCommentsDto examComment : summaryDto.getWisdomExam()) {
|
|
|
|
|
builder.append(String.format(finalChatModel.getCycleChats().get(0), count, examComment.getName(),examComment.getTime(), examComment.getScore(), examComment.getScoreRate(),examComment.getRanking()));
|
|
|
|
|
count++;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//循环查找对应的模型数据
|
|
|
|
|
finalChatModel = chatModels.stream()
|
|
|
|
|
.filter(chatModelTemp -> "wisdomSubject".equals(chatModelTemp.getType()))
|
|
|
|
|
.findFirst()
|
|
|
|
|
.orElse(null);
|
|
|
|
|
if(finalChatModel.getChat().size() >= 2 && !chatCommentsDto.getName().isEmpty()){
|
|
|
|
|
builder.append(String.format(finalChatModel.getChat().get(1), chatCommentsDto.getName()));
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
if (finalChatModel.getChat() != null) {
|
|
|
|
|
builder.append(finalChatModel.getChat().get(0));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
String name = "";
|
|
|
|
|
//拼接学科数组
|
|
|
|
|
for (WisdomSubjectComments comments : summaryDto.getWisdomSubject()) {
|
|
|
|
|
builder.append(String.format(finalChatModel.getCycleChats().get(0), comments.subjectName));
|
|
|
|
|
for (WisdomSubjectComments.StuInfo stuInfo : comments.getRankings()) {
|
|
|
|
|
builder.append(String.format(finalChatModel.getCycleChats().get(1), stuInfo.ranking,stuInfo.name, stuInfo.scoreRate*100));
|
|
|
|
|
}
|
|
|
|
|
if (phase == 0) {
|
|
|
|
|
name = comments.getClaasRanking().name;
|
|
|
|
|
builder.append(String.format(finalChatModel.getCycleChats().get(2), name, comments.getClaasRanking().ranking, comments.getClaasRanking().scoreRate * 100, comments.getClaasRanking().average * 100));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
//艺术 考核指标纬度评语
|
|
|
|
|
case "artLatitude":{
|
|
|
|
|
List<ArtLatitudeDto> artLatitudes;
|
|
|
|
@ -524,6 +659,48 @@ public class ChatMessageServiceImpl implements ChatMessageService {
|
|
|
|
|
//builder.append(String.format(finalChatModel.getEnd().get(0),chatName));
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
//艺术 整体总结
|
|
|
|
|
case "artSummary":{
|
|
|
|
|
ArtSummaryDto summaryDto;
|
|
|
|
|
try {
|
|
|
|
|
summaryDto = JSON.parseObject(strData, new TypeReference<ArtSummaryDto>() {
|
|
|
|
|
});
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
throw new ServiceException(ErrorCode.PARAMS_ERROR.getCode(), "请求参数异常");
|
|
|
|
|
}
|
|
|
|
|
if (summaryDto.getArtLatitudes().size() <= 1 && summaryDto.getArtSubjects().size() <= 1) {
|
|
|
|
|
if (summaryDto.getArtLatitudes().isEmpty()) {
|
|
|
|
|
throw new ServiceException(ErrorCode.PARAMS_ERROR.getCode(), "请求参数异常");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//循环查找对应的模型数据
|
|
|
|
|
finalChatModel = chatModels.stream()
|
|
|
|
|
.filter(chatModelTemp -> "artLatitude".equals(chatModelTemp.getType()))
|
|
|
|
|
.findFirst()
|
|
|
|
|
.orElse(null);
|
|
|
|
|
if(finalChatModel.getChat() != null && !chatCommentsDto.getName().isEmpty()) {
|
|
|
|
|
builder.append(String.format(finalChatModel.getChat().get(1), chatCommentsDto.getName()));
|
|
|
|
|
}else {
|
|
|
|
|
if (finalChatModel.getChat() != null) {
|
|
|
|
|
builder.append(finalChatModel.getChat().get(0));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
for (ArtLatitudeDto artLatitude : summaryDto.getArtLatitudes()){
|
|
|
|
|
builder.append(String.format(finalChatModel.getCycleChats().get(0), artLatitude.getQuotaN1(),artLatitude.getQuotaP1(), artLatitude.getQuotaN2(),artLatitude.getQuotaP2(), artLatitude.getQuotaN3(),artLatitude.getQuotaP3(), artLatitude.getPercent(),artLatitude.getLevel()));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//循环查找对应的模型数据
|
|
|
|
|
finalChatModel = chatModels.stream()
|
|
|
|
|
.filter(chatModelTemp -> "artSubject".equals(chatModelTemp.getType()))
|
|
|
|
|
.findFirst()
|
|
|
|
|
.orElse(null);
|
|
|
|
|
builder.append(String.format(finalChatModel.getChat().get(0), chatCommentsDto.getSubject()));
|
|
|
|
|
for (ArtSubjectDto artSubject : summaryDto.getArtSubjects()){
|
|
|
|
|
builder.append(String.format(finalChatModel.getCycleChats().get(0), artSubject.getDimension(),artSubject.getBlock(), artSubject.getPoint(),artSubject.getScore(), artSubject.getTotalScore(),artSubject.getPercent()));
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
//体育
|
|
|
|
|
case "sport":{
|
|
|
|
|
builder.append("请按照以下格式回复:\n");
|
|
|
|
@ -542,7 +719,14 @@ public class ChatMessageServiceImpl implements ChatMessageService {
|
|
|
|
|
throw new ServiceException(ErrorCode.PARAMS_ERROR.getCode(), "评语类型异常");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
String limitChat = "。限制条件如下:1.返回评价内容在%s字左右;2.直接返回评价的内容;3.评价开头不要提示语;4.评价开头不允许出现特殊字符;";
|
|
|
|
|
String limitChat = "";
|
|
|
|
|
if("wisdomSummary".equals(chatCommentsDto.getType()) || "artSummary".equals(chatCommentsDto.getType()))
|
|
|
|
|
{
|
|
|
|
|
limitChat = "。限制条件如下:##依据提供的数据做一个在%s字左右的总结;##直接返回总结的内容;##总结开头不允许出现特殊字符";
|
|
|
|
|
}else {
|
|
|
|
|
//String limitChat = "。限制条件如下:##返回评价内容在%s字左右;##直接返回评价的内容;##评价开头不要提示语;##评价开头不允许出现特殊字符;##在提供的数据做一个200字的分析;## 分析和评价分开表述。"
|
|
|
|
|
limitChat = "。限制条件如下:##依据提供的数据做一个在%s字左右的评价;##直接返回评价的内容;##评价开头不允许出现特殊字符";
|
|
|
|
|
}
|
|
|
|
|
int size = chatCommentsDto.getSize() > 0 ? chatCommentsDto.getSize() : 200;
|
|
|
|
|
builder.append(String.format(limitChat, size));
|
|
|
|
|
|
|
|
|
@ -553,7 +737,8 @@ public class ChatMessageServiceImpl implements ChatMessageService {
|
|
|
|
|
int length = limitTexts.size(); //数组大小
|
|
|
|
|
for (int i = 0; i < length; i++) {
|
|
|
|
|
String str = limitTexts.get(i);
|
|
|
|
|
builder.append(serialNumber).append(".").append(str);
|
|
|
|
|
//builder.append(serialNumber).append(".").append(str);
|
|
|
|
|
builder.append(";##").append(str);
|
|
|
|
|
if (i < length - 1) {
|
|
|
|
|
builder.append(";");
|
|
|
|
|
}else {
|
|
|
|
@ -561,6 +746,8 @@ public class ChatMessageServiceImpl implements ChatMessageService {
|
|
|
|
|
}
|
|
|
|
|
serialNumber += 1;
|
|
|
|
|
}
|
|
|
|
|
}else {
|
|
|
|
|
builder.append("。");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return builder.toString();
|
|
|
|
@ -570,4 +757,27 @@ public class ChatMessageServiceImpl implements ChatMessageService {
|
|
|
|
|
throw new ServiceException(ErrorCode.OPERATION_ERROR.getCode(), Arrays.toString(e.getStackTrace()));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 评语总结 数据字串拼接
|
|
|
|
|
* @param chatSummaryDto
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
private String chatSummary(WisdomSummaryDto chatSummaryDto) {
|
|
|
|
|
try {
|
|
|
|
|
StringBuilder builder = new StringBuilder();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return builder.toString();
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
log.info(Arrays.toString(e.getStackTrace()));
|
|
|
|
|
log.error("{}-{}", e.getMessage(), Arrays.toString(e.getStackTrace()));
|
|
|
|
|
throw new ServiceException(ErrorCode.OPERATION_ERROR.getCode(), Arrays.toString(e.getStackTrace()));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|