diff --git a/docker/web/Dockerfile b/docker/web/Dockerfile
index d816637..6f75c6f 100644
--- a/docker/web/Dockerfile
+++ b/docker/web/Dockerfile
@@ -1,5 +1,13 @@
 # 设置基础镜像
-FROM registry.cn-beijing.aliyuncs.com/longbei/jdk:latest
+FROM openjdk:8u201-jre-alpine
+ENV TZ=Asia/Shanghai
+ENV LANG=zh_CN.UTF-8
+
+RUN apk --no-cache add tzdata msttcorefonts-installer fontconfig \
+    && cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
+    && echo "Asia/Shanghai" > /etc/timezone \
+    && update-ms-fonts \
+    && fc-cache -vf
 
 WORKDIR /data/intro-robot/
 # 复制java jar 到容器中
@@ -8,7 +16,6 @@ COPY  interro_robot-0.0.1-SNAPSHOT.jar  /data/intro-robot/interro_robot-0.0.1-SN
 COPY docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh
 RUN chmod 777 /usr/local/bin/docker-entrypoint.sh
 
-
 # 暴漏服务端口
 EXPOSE 8891
 
diff --git a/src/main/java/com/supervision/dto/QueryProcessDTO.java b/src/main/java/com/supervision/dto/QueryProcessDTO.java
index bf94e3f..656c81c 100644
--- a/src/main/java/com/supervision/dto/QueryProcessDTO.java
+++ b/src/main/java/com/supervision/dto/QueryProcessDTO.java
@@ -2,7 +2,7 @@ package com.supervision.dto;
 
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.StrUtil;
-import lombok.AllArgsConstructor;
+import com.supervision.dto.robot.ParamCheckDTO;
 import lombok.Builder;
 import lombok.Data;
 
@@ -89,33 +89,10 @@ public class QueryProcessDTO {
     public <T extends CharSequence> void notEmptyParam(String paramName, T value, String errorMsgTemplate){
         if(StrUtil.isEmpty(value)){
             this.state = 1;
-            this.paramCheckList.add(new ParamCheckDTO(paramName, errorMsgTemplate,2));
-        }
-    }
-
-
-    @Data
-    @AllArgsConstructor
-    static class ParamCheckDTO {
-        private String paramName;
-        private String paramDesc;
-
-        /**
-         * 错误类型 1:参数缺失 2:参数值错误 3:参数类型错误
-         */
-        private Integer errorType;
-
-        public String toMessage(){
-            if (Integer.valueOf(1).equals(errorType)){
-                return String.format("参数%s缺失",paramName);
-            }
-            if (Integer.valueOf(2).equals(errorType)){
-                return String.format("参数%s值错误",paramName);
-            }
-            if (Integer.valueOf(3).equals(errorType)){
-                return String.format("参数%s类型错误",paramName);
+            if (null == paramCheckList){
+                paramCheckList = new ArrayList<>();
             }
-            return "";
+            this.paramCheckList.add(new ParamCheckDTO(paramName, errorMsgTemplate,2));
         }
     }
 }
diff --git a/src/main/java/com/supervision/dto/robot/AskInfo.java b/src/main/java/com/supervision/dto/robot/AskInfo.java
index 987dd50..cfec221 100644
--- a/src/main/java/com/supervision/dto/robot/AskInfo.java
+++ b/src/main/java/com/supervision/dto/robot/AskInfo.java
@@ -20,11 +20,6 @@ public class AskInfo {
      */
     private String message;
 
-    /**
-     * 回答内容类型:1-文本,2-音频,3-文件,4-图片,5-视频 6-确认弹框
-     */
-    /*private Integer answerContentType;*/
-
 
     /**
      * 语音长度
diff --git a/src/main/java/com/supervision/dto/robot/ParamCheckDTO.java b/src/main/java/com/supervision/dto/robot/ParamCheckDTO.java
new file mode 100644
index 0000000..b57ba1c
--- /dev/null
+++ b/src/main/java/com/supervision/dto/robot/ParamCheckDTO.java
@@ -0,0 +1,29 @@
+package com.supervision.dto.robot;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+
+@Data
+@AllArgsConstructor
+public class ParamCheckDTO {
+    private String paramName;
+    private String paramDesc;
+
+    /**
+     * 错误类型 1:参数缺失 2:参数值错误 3:参数类型错误
+     */
+    private Integer errorType;
+
+    public String toMessage(){
+        if (Integer.valueOf(1).equals(errorType)){
+            return String.format("参数%s缺失",paramName);
+        }
+        if (Integer.valueOf(2).equals(errorType)){
+            return String.format("参数%s值错误",paramName);
+        }
+        if (Integer.valueOf(3).equals(errorType)){
+            return String.format("参数%s类型错误",paramName);
+        }
+        return "";
+    }
+}
diff --git a/src/main/java/com/supervision/service/QueryTemplateProcessor.java b/src/main/java/com/supervision/service/QueryTemplateProcessor.java
index 62833ca..6f0376d 100644
--- a/src/main/java/com/supervision/service/QueryTemplateProcessor.java
+++ b/src/main/java/com/supervision/service/QueryTemplateProcessor.java
@@ -2,6 +2,7 @@ package com.supervision.service;
 
 import com.supervision.domain.IrSessionParam;
 import com.supervision.dto.QueryProcessDTO;
+import com.supervision.dto.robot.ParamCheckDTO;
 
 import java.util.List;
 import java.util.function.Supplier;
@@ -23,4 +24,7 @@ public interface QueryTemplateProcessor {
      */
    QueryProcessDTO process(String templateId, String sessionId, Supplier<List<IrSessionParam>> sessionParamSupplier);
 
+
+    List<ParamCheckDTO> paramCheck(String templateId, String sessionId, List<IrSessionParam> sessionParams);
+
 }
diff --git a/src/main/java/com/supervision/service/impl/QueryTemplateProcessorImpl.java b/src/main/java/com/supervision/service/impl/QueryTemplateProcessorImpl.java
index 900e8c4..a2b708d 100644
--- a/src/main/java/com/supervision/service/impl/QueryTemplateProcessorImpl.java
+++ b/src/main/java/com/supervision/service/impl/QueryTemplateProcessorImpl.java
@@ -10,6 +10,7 @@ import com.supervision.domain.IrKnowledge;
 import com.supervision.domain.IrSessionParam;
 import com.supervision.domain.IrSqlParam;
 import com.supervision.dto.QueryProcessDTO;
+import com.supervision.dto.robot.ParamCheckDTO;
 import com.supervision.service.IrKnowledgeService;
 import com.supervision.service.IrSessionParamService;
 import com.supervision.service.IrSqlParamService;
@@ -114,6 +115,22 @@ public class QueryTemplateProcessorImpl implements QueryTemplateProcessor {
         return queryProcessDTO;
     }
 
+    @Override
+    public List<ParamCheckDTO> paramCheck(String templateId, String sessionId, List<IrSessionParam> sessionParams) {
+        // 查询知识查询sql需要的参数
+        List<IrSqlParam> paramsList = sqlParamService.lambdaQuery().eq(IrSqlParam::getKnowledgeId, templateId).list();
+
+        // 校验知识查询sql必填参数
+        Set<String> sessionParamsNames = sessionParams.stream().filter(param->StrUtil.isNotEmpty(param.getParamValue())).map(IrSessionParam::getParamName).collect(Collectors.toSet());
+
+        return paramsList.stream().filter(param -> Integer.valueOf(1).equals(param.getParamRequire())).map(param -> {
+            if (!sessionParamsNames.contains(param.getParamName())) {
+                return new ParamCheckDTO(param.getParamName(), param.getParamDesc(), 1);
+            }
+            return null;
+        }).filter(Objects::nonNull).collect(Collectors.toList());
+    }
+
     public void generateZip(File targetZipFile, List<File> sourceFiles, boolean dirWithFlag) {
         if (CollUtil.isNotEmpty(sourceFiles)) {
             File[] fileArr = sourceFiles.toArray(new File[]{});
@@ -199,10 +216,12 @@ public class QueryTemplateProcessorImpl implements QueryTemplateProcessor {
         if (StrUtil.isNotEmpty(rootPath)){
             path = StrUtil.join(File.separator, rootPath, path);
         }
+        log.info("定位到的本地文件路径:{}",path);
         // 判断文件是否存在
         if (FileUtil.exist(path)){
             return path;
         }
+        log.info("文件路径:{}不存在...",path);
         return null;
     }
 
diff --git a/src/main/java/com/supervision/service/impl/RobotTalkServiceImpl.java b/src/main/java/com/supervision/service/impl/RobotTalkServiceImpl.java
index 49921e7..1e797e0 100644
--- a/src/main/java/com/supervision/service/impl/RobotTalkServiceImpl.java
+++ b/src/main/java/com/supervision/service/impl/RobotTalkServiceImpl.java
@@ -76,6 +76,9 @@ public class RobotTalkServiceImpl implements RobotTalkService {
                 .answerInfo(AnswerInfo.builder().contentType(robotTalkReq.getAnswerType()).build())
                 .build();
 
+        // 获取机器人配置
+        IrRobotConfig config = irRobotConfigService.lambdaQuery().one();
+
         // 确认弹框信息
         if (StrUtil.isNotEmpty(robotTalkReq.getAskId())){
             IrSessionHistory sessionHistory = sessionService.lambdaQuery().eq(IrSessionHistory::getId, robotTalkReq.getAskId()).one();
@@ -86,15 +89,32 @@ public class RobotTalkServiceImpl implements RobotTalkService {
             }
         }
 
-        // 提取信息中的关键信息
-        if (Boolean.FALSE.equals(robotTalkReq.isConfirmFlag())){
-            extractInformation(sessionId, robotTalkReq.getMessage(), robotTalkDTO);
-        }
         // 匹配问题意图
-        MatchQuestionAnswerDTO matchQuestionAnswerDTO = robotTalkDTO.isDoNext() ? matchQuestionAnswer(robotTalkReq.getMessage()) : null;
+        MatchQuestionAnswerDTO matchQuestionAnswerDTO = matchQuestionAnswer(robotTalkReq.getMessage());
+        if (Objects.nonNull(matchQuestionAnswerDTO)){
+            List<ParamCheckDTO> paramCheckDTOS = queryTemplateProcessor.paramCheck(matchQuestionAnswerDTO.getMatchQuestionCode(), sessionId,
+                    suspectInfo2IrSessionParam(sessionId, null));
+            // 匹配到意图,但是参数校验不通过,尝试提取消息中的信息
+            if (CollUtil.isNotEmpty(paramCheckDTOS) && !Boolean.TRUE.equals(robotTalkReq.isConfirmFlag())){
+                String paramsJoin = paramCheckDTOS.stream().map(ParamCheckDTO::getParamName).collect(Collectors.joining(","));
+                log.info("匹配到的问题:{} ,需要参数:{} ,尝试抽取问题:{} 中的参数。",matchQuestionAnswerDTO.getMatchQuestionCode(),paramsJoin,robotTalkReq.getMessage());
+                extractInformation(sessionId, robotTalkReq.getMessage(), robotTalkDTO);
+                robotTalkDTO.getAnswerInfo().setContentType(6);
+            }
+        }else {
+            if (!Boolean.TRUE.equals(robotTalkReq.isConfirmFlag())){
+                log.info("问题:{},未匹配到意图,且confirmFlag标识不为true,抽取问题中的关键属性",robotTalkReq.getMessage());
+                // 未匹配到意图,且不是关键信息确认操作则提取信息中的关键信息
+                extractInformation(sessionId, robotTalkReq.getMessage(), robotTalkDTO);
+                robotTalkDTO.getAnswerInfo().setContentType(6);
+            }else {
+                // 未匹配到意图,是关键信息确认操作,不做问题响应,只做默认回答
+                log.info("问题:{},未匹配到意图,且confirmFlag标识为true,设置默认回答:{}",robotTalkReq.getMessage(),config.getUnrecognizedTwo());
+                robotTalkDTO.getAnswerInfo().setMessage(config.getUnrecognizedTwo());
+                robotTalkDTO.setDoNext(false);
+            }
+        }
 
-        // 获取机器人配置
-        IrRobotConfig config = irRobotConfigService.lambdaQuery().one();
         if (Objects.isNull(matchQuestionAnswerDTO) && robotTalkDTO.isDoNext()){
             // 未匹配到查询意图,设置默认错误语
             log.info("问题:{}未匹配到意图",robotTalkReq.getMessage());
@@ -225,7 +245,7 @@ public class RobotTalkServiceImpl implements RobotTalkService {
         if (Objects.isNull(sessionParam) || StrUtil.isEmpty(sessionParam.getParamValue())) {
             // 案件id为空,需要设置案件id
             answerInfo.setContentType(2);
-            answerInfo.setMessage("请先设置案件id");
+            answerInfo.setMessage("请先设置案件信息");
             robotTalkDTO.setDoNext(false);
         } else {
             Integer caseNo = StrUtil.isEmpty(sessionParam.getParamValue()) ? null : Integer.valueOf(sessionParam.getParamValue());
diff --git a/src/main/java/com/supervision/vo/talk/RobotTalkReq.java b/src/main/java/com/supervision/vo/talk/RobotTalkReq.java
index 2a41752..3562774 100644
--- a/src/main/java/com/supervision/vo/talk/RobotTalkReq.java
+++ b/src/main/java/com/supervision/vo/talk/RobotTalkReq.java
@@ -21,6 +21,9 @@ public class RobotTalkReq {
      */
     private Integer answerType;
 
+    /**
+     * 关键内容确认标识
+     */
     private boolean confirmFlag;
 
     // ========方便前端好传参=======>>>>>>