mirror of
https://github.com/tencentmusic/supersonic.git
synced 2025-12-12 04:27:39 +00:00
(improvement)(chat) add similar metric recall execute responder (#317)
Co-authored-by: jolunoluo
This commit is contained in:
@@ -1,12 +1,11 @@
|
|||||||
package com.tencent.supersonic.chat.responder.parse;
|
package com.tencent.supersonic.chat.responder.execute;
|
||||||
|
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import com.tencent.supersonic.chat.api.pojo.QueryContext;
|
|
||||||
import com.tencent.supersonic.chat.api.pojo.SchemaElement;
|
import com.tencent.supersonic.chat.api.pojo.SchemaElement;
|
||||||
import com.tencent.supersonic.chat.api.pojo.SchemaElementType;
|
import com.tencent.supersonic.chat.api.pojo.SchemaElementType;
|
||||||
import com.tencent.supersonic.chat.api.pojo.SemanticParseInfo;
|
import com.tencent.supersonic.chat.api.pojo.SemanticParseInfo;
|
||||||
import com.tencent.supersonic.chat.api.pojo.response.ParseResp;
|
import com.tencent.supersonic.chat.api.pojo.request.ExecuteQueryReq;
|
||||||
import com.tencent.supersonic.chat.persistence.dataobject.ChatParseDO;
|
import com.tencent.supersonic.chat.api.pojo.response.QueryResult;
|
||||||
import com.tencent.supersonic.chat.query.QueryManager;
|
import com.tencent.supersonic.chat.query.QueryManager;
|
||||||
import com.tencent.supersonic.common.util.ContextUtils;
|
import com.tencent.supersonic.common.util.ContextUtils;
|
||||||
import com.tencent.supersonic.common.util.embedding.EmbeddingUtils;
|
import com.tencent.supersonic.common.util.embedding.EmbeddingUtils;
|
||||||
@@ -15,6 +14,7 @@ import com.tencent.supersonic.common.util.embedding.RetrieveQuery;
|
|||||||
import com.tencent.supersonic.common.util.embedding.RetrieveQueryResult;
|
import com.tencent.supersonic.common.util.embedding.RetrieveQueryResult;
|
||||||
import com.tencent.supersonic.semantic.model.domain.listener.MetaEmbeddingListener;
|
import com.tencent.supersonic.semantic.model.domain.listener.MetaEmbeddingListener;
|
||||||
import org.springframework.util.CollectionUtils;
|
import org.springframework.util.CollectionUtils;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -22,15 +22,12 @@ import java.util.Map;
|
|||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
public class SimilarMetricParseResponder implements ParseResponder {
|
public class SimilarMetricExecuteResponder implements ExecuteResponder {
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void fillResponse(ParseResp parseResp, QueryContext queryContext, List<ChatParseDO> chatParseDOS) {
|
public void fillResponse(QueryResult queryResult, SemanticParseInfo semanticParseInfo, ExecuteQueryReq queryReq) {
|
||||||
if (CollectionUtils.isEmpty(parseResp.getSelectedParses())) {
|
fillSimilarMetric(queryResult.getChatContext());
|
||||||
return;
|
|
||||||
}
|
|
||||||
fillSimilarMetric(parseResp.getSelectedParses().iterator().next());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void fillSimilarMetric(SemanticParseInfo parseInfo) {
|
private void fillSimilarMetric(SemanticParseInfo parseInfo) {
|
||||||
@@ -38,8 +35,7 @@ public class SimilarMetricParseResponder implements ParseResponder {
|
|||||||
|| CollectionUtils.isEmpty(parseInfo.getMetrics())) {
|
|| CollectionUtils.isEmpty(parseInfo.getMetrics())) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
List<String> metricNames = parseInfo.getMetrics().stream()
|
List<String> metricNames = Collections.singletonList(parseInfo.getMetrics().iterator().next().getName());
|
||||||
.map(SchemaElement::getName).collect(Collectors.toList());
|
|
||||||
Map<String, String> filterCondition = new HashMap<>();
|
Map<String, String> filterCondition = new HashMap<>();
|
||||||
filterCondition.put("modelId", parseInfo.getModelId().toString());
|
filterCondition.put("modelId", parseInfo.getModelId().toString());
|
||||||
filterCondition.put("type", SchemaElementType.METRIC.name());
|
filterCondition.put("type", SchemaElementType.METRIC.name());
|
||||||
@@ -47,7 +43,7 @@ public class SimilarMetricParseResponder implements ParseResponder {
|
|||||||
.filterCondition(filterCondition).queryEmbeddings(null).build();
|
.filterCondition(filterCondition).queryEmbeddings(null).build();
|
||||||
EmbeddingUtils embeddingUtils = ContextUtils.getBean(EmbeddingUtils.class);
|
EmbeddingUtils embeddingUtils = ContextUtils.getBean(EmbeddingUtils.class);
|
||||||
List<RetrieveQueryResult> retrieveQueryResults = embeddingUtils.retrieveQuery(
|
List<RetrieveQueryResult> retrieveQueryResults = embeddingUtils.retrieveQuery(
|
||||||
MetaEmbeddingListener.COLLECTION_NAME, retrieveQuery, 10);
|
MetaEmbeddingListener.COLLECTION_NAME, retrieveQuery, 5);
|
||||||
if (CollectionUtils.isEmpty(retrieveQueryResults)) {
|
if (CollectionUtils.isEmpty(retrieveQueryResults)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -242,10 +242,10 @@ public class QueryServiceImpl implements QueryService {
|
|||||||
}
|
}
|
||||||
chatCtx.setQueryText(queryReq.getQueryText());
|
chatCtx.setQueryText(queryReq.getQueryText());
|
||||||
chatCtx.setUser(queryReq.getUser().getName());
|
chatCtx.setUser(queryReq.getUser().getName());
|
||||||
chatService.updateQuery(queryReq.getQueryId(), queryResult, chatCtx);
|
|
||||||
for (ExecuteResponder executeResponder : executeResponders) {
|
for (ExecuteResponder executeResponder : executeResponders) {
|
||||||
executeResponder.fillResponse(queryResult, parseInfo, queryReq);
|
executeResponder.fillResponse(queryResult, parseInfo, queryReq);
|
||||||
}
|
}
|
||||||
|
chatService.updateQuery(queryReq.getQueryId(), queryResult, chatCtx);
|
||||||
} else {
|
} else {
|
||||||
chatService.deleteChatQuery(queryReq.getQueryId());
|
chatService.deleteChatQuery(queryReq.getQueryId());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -41,8 +41,8 @@ com.tencent.supersonic.chat.api.component.SemanticCorrector=\
|
|||||||
|
|
||||||
com.tencent.supersonic.chat.responder.parse.ParseResponder=\
|
com.tencent.supersonic.chat.responder.parse.ParseResponder=\
|
||||||
com.tencent.supersonic.chat.responder.parse.EntityInfoParseResponder, \
|
com.tencent.supersonic.chat.responder.parse.EntityInfoParseResponder, \
|
||||||
com.tencent.supersonic.chat.responder.parse.ExplainSqlParseResponder, \
|
com.tencent.supersonic.chat.responder.parse.ExplainSqlParseResponder
|
||||||
com.tencent.supersonic.chat.responder.parse.SimilarMetricParseResponder
|
|
||||||
|
|
||||||
com.tencent.supersonic.chat.responder.execute.ExecuteResponder=\
|
com.tencent.supersonic.chat.responder.execute.ExecuteResponder=\
|
||||||
com.tencent.supersonic.chat.responder.execute.EntityInfoExecuteResponder
|
com.tencent.supersonic.chat.responder.execute.EntityInfoExecuteResponder, \
|
||||||
|
com.tencent.supersonic.chat.responder.execute.SimilarMetricExecuteResponder
|
||||||
Reference in New Issue
Block a user