Browse Source

add:大模型失败,异常代码

zhongwei
luyie 3 months ago
parent
commit
ebcd55bbbe
  1. 57
      hzims-service/hzims-big-model/src/main/java/com/hnac/hzims/bigmodel/zhipuai/constants/ErrorCode.java
  2. 16
      hzims-service/hzims-big-model/src/main/java/com/hnac/hzims/bigmodel/zhipuai/handler/ResultBooleanStrategy.java
  3. 8
      hzims-service/hzims-big-model/src/main/java/com/hnac/hzims/bigmodel/zhipuai/handler/ZhipuAnalysisHandlerGlm4v.java
  4. 49
      hzims-service/hzims-big-model/src/main/java/com/hnac/hzims/bigmodel/zhipuai/service/impl/ZhipuAnalysisServiceImpl.java

57
hzims-service/hzims-big-model/src/main/java/com/hnac/hzims/bigmodel/zhipuai/constants/ErrorCode.java

@ -0,0 +1,57 @@
package com.hnac.hzims.bigmodel.zhipuai.constants;
import com.hnac.hzinfo.exception.HzServiceException;
import lombok.Getter;
import org.springblade.core.tool.api.IResultCode;
import org.springblade.core.tool.api.ResultCode;
/**
* @Author: ypj
* @Date: 2024/8/22 11:17
*/
@Getter
public enum ErrorCode implements IResultCode {
GET_DATA_FAILURE(1888000001, "获取数据失败"),
ANALYSIS_FAILURE(1888000002, "分析失败"),
STRATEGY_NOT_FOUND(1888000003, "策略未找到"),
GET_FILE_CONTENT_FAILURE(1888000004, "获取文件内容失败"),
REQUEST_TEXT_IS_EMPTY(1888000005, "交互文字内容不能为空"),
EMPTY_ANALYSIS_TYPE(1888000006, "识别类型为空"),
UNKNOWN_ANALYSIS_TYPE(1888000007, "未知的识别类型"),
NO_COMPARATOR(1888000008, "未获取到对比对象"),
NO_COMPARISON_TYPE(1888000009, "未获取到对比类型"),
GET_RESULT_FAIL(1888000010, "获取结果失败"),;
private final int code;
private final String msg;
ErrorCode(int code, String msg) {
this.code = code;
this.msg = msg;
}
@Override
public String getMessage() {
return this.msg;
}
public HzServiceException throwException() {
return new HzServiceException(this);
}
public static HzServiceException throwCommonException(String msg) {
return new HzServiceException(new IResultCode() {
@Override
public String getMessage() {
return msg;
}
@Override
public int getCode() {
return ResultCode.FAILURE.getCode();
}
});
}
}

16
hzims-service/hzims-big-model/src/main/java/com/hnac/hzims/bigmodel/zhipuai/handler/ResultBooleanStrategy.java

@ -2,9 +2,9 @@ package com.hnac.hzims.bigmodel.zhipuai.handler;
import com.hnac.hzims.bigmodel.zhipuai.constants.BaseEnum; import com.hnac.hzims.bigmodel.zhipuai.constants.BaseEnum;
import com.hnac.hzims.bigmodel.zhipuai.constants.ComparisonType; import com.hnac.hzims.bigmodel.zhipuai.constants.ComparisonType;
import com.hnac.hzims.bigmodel.zhipuai.constants.ErrorCode;
import com.hnac.hzims.bigmodel.zhipuai.constants.ResultStrategyType; import com.hnac.hzims.bigmodel.zhipuai.constants.ResultStrategyType;
import com.hnac.hzims.bigmodel.zhipuai.entity.ZhipuAnalysisInfoEntity; import com.hnac.hzims.bigmodel.zhipuai.entity.ZhipuAnalysisInfoEntity;
import com.hnac.hzinfo.exception.HzServiceException;
import org.springframework.util.Assert; import org.springframework.util.Assert;
import java.util.Objects; import java.util.Objects;
@ -23,18 +23,24 @@ public class ResultBooleanStrategy implements ResultStrategy<Boolean> {
public Boolean getResult(ZhipuAnalysisInfoEntity info, Object resultData) { public Boolean getResult(ZhipuAnalysisInfoEntity info, Object resultData) {
Object comparator = convertOriginalData(info.getResultCondition(), info.getResultType()); Object comparator = convertOriginalData(info.getResultCondition(), info.getResultType());
Assert.isTrue(Objects.nonNull(comparator), () -> { Assert.isTrue(Objects.nonNull(comparator), () -> {
throw new HzServiceException("没有获取到对比对象"); throw ErrorCode.NO_COMPARATOR.throwException();
}); });
ComparisonType comparisonType = BaseEnum.getInstance(info.getResultJudgeModel(), ComparisonType.class); ComparisonType comparisonType = BaseEnum.getInstance(info.getResultJudgeModel(), ComparisonType.class);
switch (comparisonType) { Assert.isTrue(Objects.nonNull(comparisonType), () -> {
throw ErrorCode.NO_COMPARISON_TYPE.throwException();
});
switch (Objects.requireNonNull(comparisonType)) {
case EQUAL: case EQUAL:
return comparator.equals(resultData); return comparator.equals(resultData);
case GREATER: case GREATER:
return ((Comparable) comparator).compareTo(resultData) < 0; if (comparator instanceof Comparable && resultData instanceof Comparable) {
return ((Comparable) comparator).compareTo((Comparable)resultData) < 0;
}
break;
case LESS: case LESS:
return ((Comparable) comparator).compareTo(resultData) > 0; return ((Comparable) comparator).compareTo(resultData) > 0;
} }
return null; throw ErrorCode.GET_RESULT_FAIL.throwException();
} }
} }

8
hzims-service/hzims-big-model/src/main/java/com/hnac/hzims/bigmodel/zhipuai/handler/ZhipuAnalysisHandlerGlm4v.java

@ -1,6 +1,7 @@
package com.hnac.hzims.bigmodel.zhipuai.handler; package com.hnac.hzims.bigmodel.zhipuai.handler;
import cn.hutool.core.lang.Assert; import cn.hutool.core.lang.Assert;
import com.hnac.hzims.bigmodel.zhipuai.constants.ErrorCode;
import com.hnac.hzinfo.exception.HzServiceException; import com.hnac.hzinfo.exception.HzServiceException;
import com.zhipu.oapi.Constants; import com.zhipu.oapi.Constants;
import com.zhipu.oapi.service.v4.model.ChatCompletionRequest; import com.zhipu.oapi.service.v4.model.ChatCompletionRequest;
@ -58,14 +59,13 @@ public class ZhipuAnalysisHandlerGlm4v extends AbstractZhipuAnalysisHandler {
messages.add(chatMessage); messages.add(chatMessage);
String requestId = String.format(requestIdTemplate, System.currentTimeMillis()); String requestId = String.format(requestIdTemplate, System.currentTimeMillis());
ChatCompletionRequest request = ChatCompletionRequest.builder() return ChatCompletionRequest.builder()
.model(getAnalysisModel()) .model(getAnalysisModel())
.stream(Boolean.FALSE) .stream(Boolean.FALSE)
.invokeMethod(Constants.invokeMethod) .invokeMethod(Constants.invokeMethod)
.messages(messages) .messages(messages)
.requestId(requestId) .requestId(requestId)
.build(); .build();
return request;
} }
@Override @Override
@ -73,7 +73,7 @@ public class ZhipuAnalysisHandlerGlm4v extends AbstractZhipuAnalysisHandler {
ModelApiResponse response = sendRequest(text, url); ModelApiResponse response = sendRequest(text, url);
log.info("get zhi pu ai response : {}", Optional.ofNullable(response).map(JsonUtil::toJson).orElse("null")); log.info("get zhi pu ai response : {}", Optional.ofNullable(response).map(JsonUtil::toJson).orElse("null"));
Assert.<HzServiceException>isTrue(Objects.nonNull(response) && response.isSuccess(), () -> { Assert.<HzServiceException>isTrue(Objects.nonNull(response) && response.isSuccess(), () -> {
throw new HzServiceException(response.getMsg()); throw ErrorCode.throwCommonException(Optional.ofNullable(response).map(ModelApiResponse::getMsg).orElse("没有收到大模型平台响应"));
}); });
try { try {
String resultJson = response.getData().getChoices().get(0).getMessage().getContent().toString(); String resultJson = response.getData().getChoices().get(0).getMessage().getContent().toString();
@ -81,7 +81,7 @@ public class ZhipuAnalysisHandlerGlm4v extends AbstractZhipuAnalysisHandler {
return resultJson; return resultJson;
} catch (Exception e) { } catch (Exception e) {
log.info("get data from response error", e); log.info("get data from response error", e);
throw new HzServiceException("获取数据失败"); throw ErrorCode.GET_DATA_FAILURE.throwException();
} }
} }

49
hzims-service/hzims-big-model/src/main/java/com/hnac/hzims/bigmodel/zhipuai/service/impl/ZhipuAnalysisServiceImpl.java

@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.hnac.hzims.bigmodel.api.dto.BigModelAnalysisRequestDTO; import com.hnac.hzims.bigmodel.api.dto.BigModelAnalysisRequestDTO;
import com.hnac.hzims.bigmodel.api.dto.BigModelAnalysisResponseDTO; import com.hnac.hzims.bigmodel.api.dto.BigModelAnalysisResponseDTO;
import com.hnac.hzims.bigmodel.zhipuai.constants.BaseEnum; import com.hnac.hzims.bigmodel.zhipuai.constants.BaseEnum;
import com.hnac.hzims.bigmodel.zhipuai.constants.ErrorCode;
import com.hnac.hzims.bigmodel.zhipuai.constants.ResultStrategyType; import com.hnac.hzims.bigmodel.zhipuai.constants.ResultStrategyType;
import com.hnac.hzims.bigmodel.zhipuai.entity.ZhipuAnalysisInfoEntity; import com.hnac.hzims.bigmodel.zhipuai.entity.ZhipuAnalysisInfoEntity;
import com.hnac.hzims.bigmodel.zhipuai.handler.ResultStrategy; import com.hnac.hzims.bigmodel.zhipuai.handler.ResultStrategy;
@ -41,29 +42,29 @@ public class ZhipuAnalysisServiceImpl implements ZhipuAnalysisService {
private final ZhipuAnalysisInfoService infoService; private final ZhipuAnalysisInfoService infoService;
private final String multiQuestionBrief = "从给出的图片回答以下{}个问题\n"; private static final String MULTI_QUESTION_BRIEF = "从给出的图片回答以下{}个问题\n";
private final String multiQuestionPrefix = "第{}个问题,"; private static final String MULTI_QUESTION_PREFIX = "第{}个问题,";
private final String multiQuestionConstrains = "- 不要在输出中添加任何注释和思考过程和其他多余的内容,以JSON格式输出简单结果,{}结果只包含'是'或者'否'\n"; private static final String MULTI_QUESTION_CONSTRAINS = "- 不要在输出中添加任何注释和思考过程和其他多余的内容,以JSON格式输出简单结果,{}结果只包含'是'或者'否'\n";
private final String multiQuestionConstrainsList = "'{}'代表第{}个问题,"; private static final String MULTI_QUESTION_CONSTRAINS_LIST = "'{}'代表第{}个问题,";
@Override @Override
public ZhipuAnalysisFileResponse analysis(ZhipuAnalysisFileRequest request) { public ZhipuAnalysisFileResponse analysis(ZhipuAnalysisFileRequest request) {
Assert.isTrue(StringUtil.isNotBlank(request.getFilePath()) || StringUtil.isNotBlank(request.getUrl()), () -> { Assert.isTrue(StringUtil.isNotBlank(request.getFilePath()) || StringUtil.isNotBlank(request.getUrl()), () -> {
throw new HzServiceException("文件为空"); throw ErrorCode.GET_FILE_CONTENT_FAILURE.throwException();
}); });
ZhipuAnalysisFileResponse response = new ZhipuAnalysisFileResponse(); ZhipuAnalysisFileResponse response = new ZhipuAnalysisFileResponse();
ZhipuAnalysisInfoEntity info = getAnalysisInfo(request); ZhipuAnalysisInfoEntity info = getAnalysisInfo(request);
Assert.isTrue(Objects.nonNull(info), () -> { Assert.isTrue(Objects.nonNull(info), () -> {
throw new HzServiceException("没有找到对应的策略信息"); throw ErrorCode.STRATEGY_NOT_FOUND.throwException();
}); });
ZhipuAnalyser analyser = analysisFactory.getAnalysisStrategy(info.getModel()); ZhipuAnalyser analyser = analysisFactory.getAnalysisStrategy(info.getModel());
Assert.isTrue(StringUtil.isNotBlank(info.getRequestContent()), () -> { Assert.isTrue(StringUtil.isNotBlank(info.getRequestContent()), () -> {
throw new HzServiceException("智谱平台交互内容为空"); throw ErrorCode.REQUEST_TEXT_IS_EMPTY.throwException();
}); });
//拼接文字内容 //拼接文字内容
StringBuilder textBuilder = new StringBuilder(); StringBuilder textBuilder = new StringBuilder();
@ -78,13 +79,13 @@ public class ZhipuAnalysisServiceImpl implements ZhipuAnalysisService {
Object resultObject = analyser.getResultValue(analyser.getText(), info.getResultKey(), getSendUrl(request)); Object resultObject = analyser.getResultValue(analyser.getText(), info.getResultKey(), getSendUrl(request));
Assert.isTrue(Objects.nonNull(resultObject), () -> { Assert.isTrue(Objects.nonNull(resultObject), () -> {
throw new HzServiceException("智谱平台分析失败"); throw ErrorCode.ANALYSIS_FAILURE.throwException();
}); });
String resultStr = resultObject.toString(); String resultStr = resultObject.toString();
ResultStrategyType strategyType = BaseEnum.getInstance(info.getResultStrategy(), ResultStrategyType.class); ResultStrategyType strategyType = BaseEnum.getInstance(info.getResultStrategy(), ResultStrategyType.class);
Assert.isTrue(Objects.nonNull(strategyType), () -> { Assert.isTrue(Objects.nonNull(strategyType), () -> {
throw new HzServiceException("没有找到对应的结果数据解析策略"); throw ErrorCode.STRATEGY_NOT_FOUND.throwException();
}); });
ResultStrategy strategy = strategyType.getStrategy(); ResultStrategy strategy = strategyType.getStrategy();
@ -100,14 +101,14 @@ public class ZhipuAnalysisServiceImpl implements ZhipuAnalysisService {
if (StringUtil.isNotBlank(request.getUrl())) { if (StringUtil.isNotBlank(request.getUrl())) {
return request.getUrl(); return request.getUrl();
} }
if (StringUtil.isNotBlank(request.getFilePath())) { Assert.isTrue(StringUtil.isNotBlank(request.getFilePath()), () -> {
throw ErrorCode.GET_FILE_CONTENT_FAILURE.throwException();
});
try { try {
return FileUtil.getBase64(request.getFilePath()); return FileUtil.getBase64(request.getFilePath());
} catch (IOException e) { } catch (IOException e) {
throw new HzServiceException("获取文件内容失败"); throw ErrorCode.GET_FILE_CONTENT_FAILURE.throwException();
}
} }
return null;
} }
@Override @Override
@ -121,7 +122,7 @@ public class ZhipuAnalysisServiceImpl implements ZhipuAnalysisService {
.eq(StringUtil.isNotBlank(request.getCheckTypeSon()), ZhipuAnalysisInfoEntity::getCheckTypeSon, request.getCheckTypeSon()) .eq(StringUtil.isNotBlank(request.getCheckTypeSon()), ZhipuAnalysisInfoEntity::getCheckTypeSon, request.getCheckTypeSon())
.last("limit 1;")); .last("limit 1;"));
} }
log.info("the analysis information is {}", Optional.ofNullable(result).map(r -> JsonUtil.toJson(r)).orElse("null")); log.debug("the analysis information is {}", Optional.ofNullable(result).map(r -> JsonUtil.toJson(r)).orElse("null"));
return result; return result;
} }
@ -131,15 +132,15 @@ public class ZhipuAnalysisServiceImpl implements ZhipuAnalysisService {
BigModelAnalysisResponseDTO response = new BigModelAnalysisResponseDTO(); BigModelAnalysisResponseDTO response = new BigModelAnalysisResponseDTO();
try { try {
Assert.isTrue(StringUtil.isNotBlank(request.getUrl()), () -> { Assert.isTrue(StringUtil.isNotBlank(request.getUrl()), () -> {
throw new HzServiceException("文件为空"); throw ErrorCode.GET_FILE_CONTENT_FAILURE.throwException();
}); });
Assert.isTrue(CollectionUtil.isNotEmpty(request.getCodeList()) || CollectionUtil.isNotEmpty(request.getCheckTypeSonList()), () -> { Assert.isTrue(CollectionUtil.isNotEmpty(request.getCodeList()) || CollectionUtil.isNotEmpty(request.getCheckTypeSonList()), () -> {
throw new HzServiceException("识别类型为空"); throw ErrorCode.EMPTY_ANALYSIS_TYPE.throwException();
}); });
List<ZhipuAnalysisInfoEntity> infoList = infoService.list(Wrappers.<ZhipuAnalysisInfoEntity>lambdaQuery().in(CollectionUtil.isNotEmpty(request.getCodeList()), ZhipuAnalysisInfoEntity::getCode, request.getCodeList()) List<ZhipuAnalysisInfoEntity> infoList = infoService.list(Wrappers.<ZhipuAnalysisInfoEntity>lambdaQuery().in(CollectionUtil.isNotEmpty(request.getCodeList()), ZhipuAnalysisInfoEntity::getCode, request.getCodeList())
.in(CollectionUtil.isNotEmpty(request.getCheckTypeSonList()), ZhipuAnalysisInfoEntity::getCheckTypeSon, request.getCheckTypeSonList())); .in(CollectionUtil.isNotEmpty(request.getCheckTypeSonList()), ZhipuAnalysisInfoEntity::getCheckTypeSon, request.getCheckTypeSonList()));
Assert.isTrue(CollectionUtil.isNotEmpty(infoList), () -> { Assert.isTrue(CollectionUtil.isNotEmpty(infoList), () -> {
throw new HzServiceException("未知的识别类型"); throw ErrorCode.UNKNOWN_ANALYSIS_TYPE.throwException();
}); });
ZhipuAnalyser analyser = analysisFactory.getAnalysisStrategy(infoList.get(0).getModel()); ZhipuAnalyser analyser = analysisFactory.getAnalysisStrategy(infoList.get(0).getModel());
@ -148,7 +149,7 @@ public class ZhipuAnalysisServiceImpl implements ZhipuAnalysisService {
if (null == resultMap) { if (null == resultMap) {
response.setCode(ResultCode.FAILURE.getCode()); response.setCode(ResultCode.FAILURE.getCode());
response.setMsg("智谱大模型分析失败"); response.setMsg(ErrorCode.ANALYSIS_FAILURE.getMsg());
return response; return response;
} }
@ -184,9 +185,9 @@ public class ZhipuAnalysisServiceImpl implements ZhipuAnalysisService {
response.setMsg(e.getMessage()); response.setMsg(e.getMessage());
} else { } else {
response.setCode(ResultCode.FAILURE.getCode()); response.setCode(ResultCode.FAILURE.getCode());
response.setMsg("智谱大模型分析失败"); response.setMsg(ErrorCode.ANALYSIS_FAILURE.getMsg());
} }
log.error("智谱大模型分析失败", e); log.error(ErrorCode.ANALYSIS_FAILURE.getMessage(), e);
} }
return response; return response;
} }
@ -196,18 +197,18 @@ public class ZhipuAnalysisServiceImpl implements ZhipuAnalysisService {
StringBuilder titleBuilder = new StringBuilder(); StringBuilder titleBuilder = new StringBuilder();
StringBuilder formatBuilder = new StringBuilder(); StringBuilder formatBuilder = new StringBuilder();
stringBuilder.append(ZhipuAnalyser.QUESTION_PROFILE) stringBuilder.append(ZhipuAnalyser.QUESTION_PROFILE)
.append(StringUtil.format(multiQuestionBrief, infoList.size())); .append(StringUtil.format(MULTI_QUESTION_BRIEF, infoList.size()));
formatBuilder.append("{"); formatBuilder.append("{");
for (int index = 1; index <= infoList.size(); index++) { for (int index = 1; index <= infoList.size(); index++) {
ZhipuAnalysisInfoEntity infoEntity = infoList.get(index - 1); ZhipuAnalysisInfoEntity infoEntity = infoList.get(index - 1);
stringBuilder.append(StringUtil.format(multiQuestionPrefix, index)); stringBuilder.append(StringUtil.format(MULTI_QUESTION_PREFIX, index));
titleBuilder.append(StringUtil.format(multiQuestionConstrainsList, infoEntity.getResultKey(), index)); titleBuilder.append(StringUtil.format(MULTI_QUESTION_CONSTRAINS_LIST, infoEntity.getResultKey(), index));
formatBuilder.append(infoEntity.getRequestOutputFormat()).append(","); formatBuilder.append(infoEntity.getRequestOutputFormat()).append(",");
} }
formatBuilder.deleteCharAt(formatBuilder.length() - 1); formatBuilder.deleteCharAt(formatBuilder.length() - 1);
formatBuilder.append("}"); formatBuilder.append("}");
stringBuilder.append(ZhipuAnalyser.QUESTION_CONSTRAINS) stringBuilder.append(ZhipuAnalyser.QUESTION_CONSTRAINS)
.append(StringUtil.format(multiQuestionConstrains, titleBuilder.toString())) .append(StringUtil.format(MULTI_QUESTION_CONSTRAINS, titleBuilder.toString()))
.append(ZhipuAnalyser.QUESTION_OUTPUT_FORMAT).append(formatBuilder); .append(ZhipuAnalyser.QUESTION_OUTPUT_FORMAT).append(formatBuilder);
return stringBuilder.toString(); return stringBuilder.toString();
} }

Loading…
Cancel
Save