Browse Source

参加完会议沟通以后 相关调整

wangmiaomiao 1 year ago
parent
commit
495f40d55b

+ 1 - 1
slibra-admin/src/main/java/com/slibra/web/controller/business/FrontController.java

@@ -243,7 +243,7 @@ public class FrontController extends BaseController {
      * @return
      */
     @PutMapping("/bigModel/chat/isSatisfiedAnswer")
-    public AjaxResult isSatisfiedAnswer(ChatReq chatReq)
+    public AjaxResult isSatisfiedAnswer(@RequestBody ChatReq chatReq)
     {
         log.info("进入了 标记问题是否满意  接口");
         return AjaxResult.success(frontService.isSatisfiedAnswer(chatReq));

+ 26 - 10
slibra-admin/src/main/java/com/slibra/web/controller/business/GRPCController.java

@@ -14,6 +14,7 @@ import com.slibra.business.req.DecisionReq;
 import com.slibra.common.core.controller.BaseController;
 import com.slibra.common.core.domain.AjaxResult;
 import com.slibra.common.core.domain.R;
+import com.slibra.common.enums.BusinessEnum;
 import com.slibra.common.utils.DateUtils;
 import com.slibra.common.utils.SecurityUtils;
 import com.slibra.common.utils.StringUtils;
@@ -144,25 +145,39 @@ public class GRPCController extends BaseController {
             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,无需处理");
+//                responseStr = JSON.parseObject(responseStr).getString("message");
+                //2024年5月25日16:37:16  按照大模型返回的类型解析数据
+                String biz = JSON.parseObject(responseStr).getString("biz");
+                String message = JSON.parseObject(responseStr).getString("message");
+                if(BusinessEnum.BigModelBizEnum.OK.getCode().equals(biz)){
+                    log.info("结尾语句并且是非JSON,无需处理,返回数据为{}", responseStr);
                     //结束语句也流式输出,但是并不记录下来  2024年5月24日11:15:23 也不返回前端
                     /*outputStream.write(responseStr.getBytes());
                     outputStream.flush();*/
-                }else{
+                }else if(BusinessEnum.BigModelBizEnum.DECISION_DEBUGGER.getCode().equals(biz)){
+                    log.info("中间过程,目前只打印日志,不记录数据,也不返回给前端,返回数据为{}", responseStr);
+                    //结束语句也流式输出,但是并不记录下来  2024年5月24日11:15:23 也不返回前端
+                    /*outputStream.write(responseStr.getBytes());
+                    outputStream.flush();*/
+                }else{//其他 要么错误 要么alert 要么出的报告
 //                    sb.append(responseStr);
-                    resultData.add(responseStr);
-                    outputStream.write(responseStr.getBytes());
+                    resultData.add(message);
+                    outputStream.write(message.getBytes());
                     outputStream.flush();
                 }
-                // todo 类型判断处理
             }
         } catch (Exception e) {
 //            throw new RuntimeException(e);
             log.error("处理大模型推理异常,异常信息为{}", JSON.toJSONString(e));
+            //出现异常 给前端返回一句话
+            try {
+                outputStream.write("大模型分析数据异常,请稍后再试".getBytes());
+                outputStream.flush();
+            } catch (IOException ex) {
+                throw new RuntimeException(ex);
+            }
         } finally {
-            System.out.println(JSON.toJSONString(resultData));
+            log.info("决策最终要保存的数据是{}", JSON.toJSONString(resultData));
             //保存聊天记录
             //将问答更新到数据库中
             chatReq.setSessionId(sessionId);
@@ -210,6 +225,7 @@ public class GRPCController extends BaseController {
         String sessionId = chatReq.getSessionId();
         String question = chatReq.getQuestion();
         Integer module = chatReq.getModule();//来自那个模块
+        Integer isStrong = chatReq.getIsStrong();
         int counts = 1;//默认是第一次
         List<String> historyDates = new ArrayList<>();
         //查询历史数据,放入集合中
@@ -240,8 +256,8 @@ public class GRPCController extends BaseController {
                     .usePlaintext()
                     .build();
             InferenceAPIsServiceGrpc.InferenceAPIsServiceBlockingStub stub = InferenceAPIsServiceGrpc.newBlockingStub(channel);
-            String dataJson = "{\"bot_id\":\"721\",\"exp_id\":\"721\",\"session_id\":\"" + sessionId + "\",\"use_rag\":\"true\",\"prompt\":\"你是⼀个资深⽔务领域专家,能回答各种⽔务相关问题\",\"history_dia\":" + JSON.toJSONString(historyDates) + ",\"generate_args\":{\"max_new_tokens\":2048,\"max_length\":4096,\"num_beams\":1,\"do_sample\":true,\"top_p\":0.7,\"temperature\":0.95},\"extra\":{}}";
-            System.out.println(dataJson);
+            String dataJson = "{\"bot_id\":\"721\",\"exp_id\":\"721\",\"session_id\":\"" + sessionId + "\",\"use_rag\":\"true\",\"prompt\":\"你是⼀个资深⽔务领域专家,能回答各种⽔务相关问题\",\"history_dia\":" + JSON.toJSONString(historyDates) + ",\"generate_args\":{\"max_new_tokens\":2048,\"max_length\":4096,\"num_beams\":1,\"do_sample\":true,\"top_p\":0.7,\"temperature\":0.95},\"extra\":{},\"strengthen\":" + (isStrong == 1) + "}";
+            log.info("请求大模型的问答参数为{}", dataJson);
             PredictionsRequest request = PredictionsRequest.newBuilder()
                     .setModelName("slibra_bot")
                     .putInput("method", ByteString.copyFrom("infer_stream", "utf-8"))//推理

+ 33 - 0
slibra-common/src/main/java/com/slibra/common/enums/BusinessEnum.java

@@ -39,4 +39,37 @@ public class BusinessEnum {
             return msg;
         }
     }
+
+
+    /**
+     * 大模型返回结果类型枚举
+     */
+    public enum BigModelBizEnum
+    {
+        OK("OK", "正常结束"),
+        ERROR("ERROR", "出现错误"),
+        DECISION_ALERT("DECISION_ALERT", "弹窗类型"),
+        DECISION_DEBUGGER("DECISION_DEBUGGER", "中间过程"),
+        DECISION_REPORT("DECISION_REPORT", "最终的输出结果"),
+        ;
+
+        private final String code;
+        private final String msg;
+
+        BigModelBizEnum(String code, String msg)
+        {
+            this.code = code;
+            this.msg = msg;
+        }
+
+        public String getCode()
+        {
+            return code;
+        }
+
+        public String getMsg()
+        {
+            return msg;
+        }
+    }
 }

+ 17 - 7
slibra-quartz/src/main/java/com/slibra/quartz/task/RyTask.java

@@ -487,20 +487,30 @@ public class RyTask
             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,无需处理");
-                }else{
+
+                //2024年5月25日16:37:16  按照大模型返回的类型解析数据
+                String biz = JSON.parseObject(responseStr).getString("biz");
+                if(BusinessEnum.BigModelBizEnum.OK.getCode().equals(biz)){
+                    log.info("结尾语句并且是非JSON,无需处理");
+                    //结束语句也流式输出,但是并不记录下来  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();*/
+                }else{//其他 要么错误 要么alert 要么出的报告
 //                    sb.append(responseStr);
                     resultData.add(responseStr);
                 }
-                // todo 类型判断处理
             }
         } catch (Exception e) {
 //            throw new RuntimeException(e);
-            log.error("处理大模型推理异常,异常信息为{}", JSON.toJSONString(e));
+            log.error("定时任务处理告警调用决策异常,异常信息为{}", JSON.toJSONString(e));
+            resultData.add("{\"biz\":\"ERROR\",\"message\":\"大模型分析数据异常,请稍后再试\"}");
         } finally {
-            System.out.println(JSON.toJSONString(resultData));
+            log.info("决策最终要保存的数据是{}", JSON.toJSONString(resultData));
             //保存聊天记录
             //将问答更新到数据库中
             chatReq.setSessionId(sessionId);

+ 1 - 1
slibra-system/src/main/java/com/slibra/business/domain/TXinyiChatRecord.java

@@ -64,7 +64,7 @@ public class TXinyiChatRecord extends BaseEntity
 
     /** 是否使用搜索增强(0否 1是) */
     @Excel(name = "是否使用搜索增强", readConverterExp = "0=否,1=是")
-    private Integer isStrong;
+    private Integer isStrong = 0;//默认是不增强,防止空指针
 
     /** 回复是否满意(0否 1是 2默认:既不支持,也不反对) */
     @Excel(name = "回复是否满意", readConverterExp = "0否 1是 2默认:既不支持,也不反对")

+ 4 - 4
slibra-system/src/main/resources/mapper/system/SysUserMapper.xml

@@ -52,7 +52,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 	<sql id="selectUserVo">
         select u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, 
         d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.status as dept_status,
-        r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status as role_status, u.emergency_phone emergencyPhone, u.position position, u.we_chat weChat
+        r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status as role_status, u.emergency_phone emergency_phone, u.position position, u.we_chat we_chat
         from sys_user u
 		    left join sys_dept d on u.dept_id = d.dept_id
 		    left join sys_user_role ur on u.user_id = ur.user_id
@@ -60,7 +60,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </sql>
     
     <select id="selectUserList" parameterType="SysUser" resultMap="SysUserResult">
-		select u.user_id, u.dept_id, u.nick_name, u.user_name, u.email, u.avatar, u.phonenumber, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, d.dept_name, d.leader, u.emergency_phone emergencyPhone, u.position position, u.we_chat weChat from sys_user u
+		select u.user_id, u.dept_id, u.nick_name, u.user_name, u.email, u.avatar, u.phonenumber, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, d.dept_name, d.leader, u.emergency_phone emergency_phone, u.position position, u.we_chat we_chat from sys_user u
 		left join sys_dept d on u.dept_id = d.dept_id
 		where u.del_flag = '0'
 		<if test="userId != null and userId != 0">
@@ -89,7 +89,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 	</select>
 	
 	<select id="selectAllocatedList" parameterType="SysUser" resultMap="SysUserResult">
-	    select distinct u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.phonenumber, u.status, u.create_time, u.emergency_phone emergencyPhone, u.position position, u.we_chat weChat
+	    select distinct u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.phonenumber, u.status, u.create_time, u.emergency_phone emergency_phone, u.position position, u.we_chat we_chat
 	    from sys_user u
 			 left join sys_dept d on u.dept_id = d.dept_id
 			 left join sys_user_role ur on u.user_id = ur.user_id
@@ -106,7 +106,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 	</select>
 	
 	<select id="selectUnallocatedList" parameterType="SysUser" resultMap="SysUserResult">
-	    select distinct u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.phonenumber, u.status, u.create_time, u.emergency_phone emergencyPhone, u.position position, u.we_chat weChat
+	    select distinct u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.phonenumber, u.status, u.create_time, u.emergency_phone emergency_phone, u.position position, u.we_chat we_chat
 		from sys_user u
 			 left join sys_dept d on u.dept_id = d.dept_id
 			 left join sys_user_role ur on u.user_id = ur.user_id