diff --git a/chat/api/src/main/java/com/tencent/supersonic/chat/api/pojo/response/QueryResult.java b/chat/api/src/main/java/com/tencent/supersonic/chat/api/pojo/response/QueryResult.java index 3858f64f2..74020d195 100644 --- a/chat/api/src/main/java/com/tencent/supersonic/chat/api/pojo/response/QueryResult.java +++ b/chat/api/src/main/java/com/tencent/supersonic/chat/api/pojo/response/QueryResult.java @@ -21,4 +21,5 @@ public class QueryResult { private SemanticParseInfo chatContext; private Object response; private List> queryResults; + private List similarSolvedQuery; } diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/plugin/embedding/EmbeddingConfig.java b/chat/core/src/main/java/com/tencent/supersonic/chat/parser/plugin/embedding/EmbeddingConfig.java index 5725ed4e3..46ff9f848 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/plugin/embedding/EmbeddingConfig.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/parser/plugin/embedding/EmbeddingConfig.java @@ -29,4 +29,7 @@ public class EmbeddingConfig { @Value("${embedding.solvedQuery.add.path:/solved_query_add}") private String solvedQueryAddPath; + @Value("${embedding.solved.query.nResult:5}") + private String solvedQueryResultNum; + } diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/queryresponder/DefaultQueryResponder.java b/chat/core/src/main/java/com/tencent/supersonic/chat/queryresponder/DefaultQueryResponder.java index 03da21a34..8a7a80e9f 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/queryresponder/DefaultQueryResponder.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/queryresponder/DefaultQueryResponder.java @@ -60,7 +60,7 @@ public class DefaultQueryResponder implements QueryResponder { List solvedQueryRecallResps = Lists.newArrayList(); try { String url = embeddingConfig.getUrl() + embeddingConfig.getSolvedQueryRecallPath() + "?n_results=" - + embeddingConfig.getNResult(); + + embeddingConfig.getSolvedQueryResultNum(); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); headers.setLocation(URI.create(url)); diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/service/impl/QueryServiceImpl.java b/chat/core/src/main/java/com/tencent/supersonic/chat/service/impl/QueryServiceImpl.java index 817578804..efcc45b77 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/service/impl/QueryServiceImpl.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/service/impl/QueryServiceImpl.java @@ -175,27 +175,34 @@ public class QueryServiceImpl implements QueryService { ChatContext chatCtx = chatService.getOrCreateContext(queryReq.getChatId()); chatCtx.setAgentId(queryReq.getAgentId()); Long startTime = System.currentTimeMillis(); - QueryResult queryResult = semanticQuery.execute(queryReq.getUser()); - - if (queryResult != null) { - timeCostDOList.add(StatisticsDO.builder().cost((int) (System.currentTimeMillis() - startTime)) - .interfaceName(semanticQuery.getClass().getSimpleName()).type(CostType.QUERY.getType()).build()); - saveInfo(timeCostDOList, queryReq.getQueryText(), queryReq.getQueryId(), - queryReq.getUser().getName(), queryReq.getChatId().longValue()); - queryResult.setChatContext(parseInfo); - // update chat context after a successful semantic query - if (queryReq.isSaveAnswer() && QueryState.SUCCESS.equals(queryResult.getQueryState())) { - chatCtx.setParseInfo(parseInfo); - chatService.updateContext(chatCtx); - } - chatCtx.setQueryText(queryReq.getQueryText()); - chatCtx.setUser(queryReq.getUser().getName()); - chatService.updateQuery(queryReq.getQueryId(), queryResult, chatCtx); - queryResponder.saveSolvedQuery(queryReq.getQueryText(), queryReq.getQueryId(), queryReq.getParseId()); - } else { - chatService.deleteChatQuery(queryReq.getQueryId()); + QueryResult queryResult = null; + try { + queryResult = semanticQuery.execute(queryReq.getUser()); + } catch (Exception e) { + log.error("query execute failed, queryText:{}", queryReq.getQueryText(), e); + queryResult = new QueryResult(); + queryResult.setQueryState(QueryState.INVALID); } + timeCostDOList.add(StatisticsDO.builder().cost((int) (System.currentTimeMillis() - startTime)) + .interfaceName(semanticQuery.getClass().getSimpleName()).type(CostType.QUERY.getType()).build()); + saveInfo(timeCostDOList, queryReq.getQueryText(), queryReq.getQueryId(), + queryReq.getUser().getName(), queryReq.getChatId().longValue()); + queryResult.setChatContext(parseInfo); + // update chat context after a successful semantic query + if (queryReq.isSaveAnswer() && QueryState.SUCCESS.equals(queryResult.getQueryState())) { + chatCtx.setParseInfo(parseInfo); + chatService.updateContext(chatCtx); + queryResponder.saveSolvedQuery(queryReq.getQueryText(), queryReq.getQueryId(), queryReq.getParseId()); + } + chatCtx.setQueryText(queryReq.getQueryText()); + chatCtx.setUser(queryReq.getUser().getName()); + chatService.updateQuery(queryReq.getQueryId(), queryResult, chatCtx); + if (!QueryState.SUCCESS.equals(queryResult.getQueryState())) { + List solvedQueryRecallResps = + queryResponder.recallSolvedQuery(queryReq.getQueryText()); + queryResult.setSimilarSolvedQuery(solvedQueryRecallResps); + } return queryResult; } diff --git a/chat/core/src/main/resources/mapper/ChatQueryDOMapper.xml b/chat/core/src/main/resources/mapper/ChatQueryDOMapper.xml index 72cbbc4b4..f965a0882 100644 --- a/chat/core/src/main/resources/mapper/ChatQueryDOMapper.xml +++ b/chat/core/src/main/resources/mapper/ChatQueryDOMapper.xml @@ -3,6 +3,7 @@ + @@ -44,7 +45,7 @@ - question_id, create_time, user_name, query_state, chat_id, score, feedback + question_id, agent_id, create_time, user_name, query_state, chat_id, score, feedback query_text, query_result @@ -65,142 +66,23 @@ order by ${orderByClause} - - + + delete from s2_chat_query where question_id = #{questionId,jdbcType=BIGINT} - insert into s2_chat_query (question_id, create_time, user_name, + insert into s2_chat_query (question_id, agent_id, create_time, user_name, query_state, chat_id, score, feedback, query_text, query_result ) - values (#{questionId,jdbcType=BIGINT}, #{createTime,jdbcType=TIMESTAMP}, #{userName,jdbcType=VARCHAR}, + values (#{questionId,jdbcType=BIGINT}, #{agentId,jdbcType=BIGINT}, #{createTime,jdbcType=TIMESTAMP}, #{userName,jdbcType=VARCHAR}, #{queryState,jdbcType=INTEGER}, #{chatId,jdbcType=BIGINT}, #{score,jdbcType=INTEGER}, #{feedback,jdbcType=VARCHAR}, #{queryText,jdbcType=LONGVARCHAR}, #{queryResult,jdbcType=LONGVARCHAR} ) - - insert into s2_chat_query - - - question_id, - - - create_time, - - - user_name, - - - query_state, - - - chat_id, - - - score, - - - feedback, - - - query_text, - - - query_result, - - - - - #{questionId,jdbcType=BIGINT}, - - - #{createTime,jdbcType=TIMESTAMP}, - - - #{userName,jdbcType=VARCHAR}, - - - #{queryState,jdbcType=INTEGER}, - - - #{chatId,jdbcType=BIGINT}, - - - #{score,jdbcType=INTEGER}, - - - #{feedback,jdbcType=VARCHAR}, - - - #{queryText,jdbcType=LONGVARCHAR}, - - - #{queryResult,jdbcType=LONGVARCHAR}, - - - - - - update s2_chat_query - - - create_time = #{createTime,jdbcType=TIMESTAMP}, - - - user_name = #{userName,jdbcType=VARCHAR}, - - - query_state = #{queryState,jdbcType=INTEGER}, - - - chat_id = #{chatId,jdbcType=BIGINT}, - - - score = #{score,jdbcType=INTEGER}, - - - feedback = #{feedback,jdbcType=VARCHAR}, - - - query_text = #{queryText,jdbcType=LONGVARCHAR}, - - - query_result = #{queryResult,jdbcType=LONGVARCHAR}, - - - where question_id = #{questionId,jdbcType=BIGINT} - + update s2_chat_query @@ -216,6 +98,9 @@ chat_id = #{chatId,jdbcType=BIGINT}, + + agent_id = #{agentId,jdbcType=INTEGER}, + score = #{score,jdbcType=INTEGER}, @@ -231,14 +116,5 @@ where question_id = #{questionId,jdbcType=BIGINT} - - update s2_chat_query - set create_time = #{createTime,jdbcType=TIMESTAMP}, - user_name = #{userName,jdbcType=VARCHAR}, - query_state = #{queryState,jdbcType=INTEGER}, - chat_id = #{chatId,jdbcType=BIGINT}, - score = #{score,jdbcType=INTEGER}, - feedback = #{feedback,jdbcType=VARCHAR} - where question_id = #{questionId,jdbcType=BIGINT} - +