瀏覽代碼

兜底处理 防止大模型返回的message为null导致程序报错

wangmiaomiao 9 月之前
父節點
當前提交
a525e55c5f
共有 1 個文件被更改,包括 8 次插入12 次删除
  1. 8 12
      slibra-admin/src/main/java/com/slibra/web/controller/business/GRPCController.java

+ 8 - 12
slibra-admin/src/main/java/com/slibra/web/controller/business/GRPCController.java

@@ -136,11 +136,13 @@ public class GRPCController extends BaseController {
                     .buildPartial();
             outputStream = response.getOutputStream();
             Iterator<PredictionResponse> predictions = stub.streamPredictions(request);
-            /*outputStream.write("begin".getBytes());
-            outputStream.flush();*/
             while (predictions.hasNext()) {
                 String responseStr = predictions.next().getPrediction().toStringUtf8();
                 log.info("决策流式返回的结果是{}", responseStr);
+                if(StringUtils.isBlank(responseStr)){
+                    log.info("大模型返回的流式决策内容存在空的值,跳过此次输出");
+                    continue;
+                }
                 String message = JSON.parseObject(responseStr).getString("message");
                 //2024年5月25日16:37:16  按照大模型返回的类型解析数据
                 String biz = JSON.parseObject(responseStr).getString("biz");
@@ -148,13 +150,9 @@ public class GRPCController extends BaseController {
                 if(BusinessEnum.BigModelBizEnum.OK.getCode().equals(biz)){
                     log.info("结尾语句并且是非JSON,无需处理,返回数据为{}", responseStr);
                     //结束语句也流式输出,但是并不记录下来  2024年5月24日11:15:23 也不返回前端
-                    /*outputStream.write(responseStr.getBytes());
-                    outputStream.flush();*/
                 }else if(BusinessEnum.BigModelBizEnum.DECISION_DEBUGGER.getCode().equals(biz)){
                     log.info("中间过程,目前只打印日志,不记录数据,也不返回给前端,返回数据为{}", responseStr);
                     //结束语句也流式输出,但是并不记录下来  2024年5月24日11:15:23 也不返回前端
-                    /*outputStream.write(responseStr.getBytes());
-                    outputStream.flush();*/
                 //2024年6月23日14:55:19 如果大模型返回error了,不保存记录,并且提示一句错误语
                 }else if(BusinessEnum.BigModelBizEnum.ERROR.getCode().equalsIgnoreCase(biz)){
                     log.info("调用大模型的时候,返回的是ERROR,返回数据为{}", responseStr);
@@ -172,6 +170,7 @@ public class GRPCController extends BaseController {
                     if(StringUtils.isBlank(message)){
                         log.info("×××××××××××××××××××××××××××为空的数据暂时不返回×××××××××××××××××××××××××××");
                     }else {
+                        //
                         resultData.add(responseStr);
                         outputStream.write(responseStr.getBytes());
                         outputStream.flush();
@@ -422,18 +421,15 @@ public class GRPCController extends BaseController {
                     .buildPartial();
             outputStream = response.getOutputStream();
             Iterator<PredictionResponse> predictions = stub.streamPredictions(request);
-            /*outputStream.write("begin".getBytes());
-            outputStream.flush();*/
             //将结果记录到问答表
             while (predictions.hasNext()) {
                 String responseStr = predictions.next().getPrediction().toStringUtf8();
                 log.info("大模型问答返回的原始结果为{}", responseStr);
                 responseStr = JSON.parseObject(responseStr).getString("message");
-                if("complete".equals(responseStr)){
-                    System.out.println("结尾语句并且是非JSON,无需处理");
+                if("complete".equals(responseStr) || StringUtils.isBlank(responseStr)){
+//                    System.out.println("结尾语句并且是非JSON,无需处理");
+                    log.info("返回的结果message为{},无需再次处理", responseStr);
                     //结束语句也流式输出,但是并不记录下来  2024年5月24日11:15:23 也不返回前端
-                    /*outputStream.write(responseStr.getBytes());
-                    outputStream.flush();*/
                 }else{
                     sb.append(responseStr);
                     outputStream.write(responseStr.getBytes());