mirror of
https://github.com/tencentmusic/supersonic.git
synced 2025-12-12 12:37:55 +00:00
[improvement][chat]Rename PostProcessor to ResponseProcessor
This commit is contained in:
@@ -5,7 +5,7 @@ public enum CostType {
|
|||||||
PARSER(2, "parser"),
|
PARSER(2, "parser"),
|
||||||
QUERY(3, "query"),
|
QUERY(3, "query"),
|
||||||
PARSERRESPONDER(4, "responder"),
|
PARSERRESPONDER(4, "responder"),
|
||||||
POSTPROCESSOR(5, "postprocessor");
|
PROCESSOR(5, "processor");
|
||||||
|
|
||||||
private Integer type;
|
private Integer type;
|
||||||
private String name;
|
private String name;
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.tencent.supersonic.chat.postprocessor;
|
package com.tencent.supersonic.chat.processor;
|
||||||
|
|
||||||
import com.tencent.supersonic.chat.api.component.SemanticQuery;
|
import com.tencent.supersonic.chat.api.component.SemanticQuery;
|
||||||
import com.tencent.supersonic.chat.api.pojo.ChatContext;
|
import com.tencent.supersonic.chat.api.pojo.ChatContext;
|
||||||
@@ -16,7 +16,7 @@ import org.springframework.util.CollectionUtils;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
public class EntityInfoPostProcessor implements PostProcessor {
|
public class EntityInfoProcessor implements ResponseProcessor {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void process(ParseResp parseResp, QueryContext queryContext, ChatContext chatContext) {
|
public void process(ParseResp parseResp, QueryContext queryContext, ChatContext chatContext) {
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.tencent.supersonic.chat.postprocessor;
|
package com.tencent.supersonic.chat.processor;
|
||||||
|
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import com.google.common.collect.Sets;
|
import com.google.common.collect.Sets;
|
||||||
@@ -27,10 +27,10 @@ import java.util.Set;
|
|||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* MetricCheckPostProcessor used to verify whether the dimensions
|
* MetricCheckProcessor used to verify whether the dimensions
|
||||||
* involved in the query in metric mode can drill down on the metric.
|
* involved in the query in metric mode can drill down on the metric.
|
||||||
*/
|
*/
|
||||||
public class MetricCheckPostProcessor implements PostProcessor {
|
public class MetricCheckProcessor implements ResponseProcessor {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void process(ParseResp parseResp, QueryContext queryContext, ChatContext chatContext) {
|
public void process(ParseResp parseResp, QueryContext queryContext, ChatContext chatContext) {
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.tencent.supersonic.chat.postprocessor;
|
package com.tencent.supersonic.chat.processor;
|
||||||
|
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import com.tencent.supersonic.chat.api.component.SemanticQuery;
|
import com.tencent.supersonic.chat.api.component.SemanticQuery;
|
||||||
@@ -36,7 +36,7 @@ import java.util.stream.Collectors;
|
|||||||
* update parse info from correct sql
|
* update parse info from correct sql
|
||||||
*/
|
*/
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class ParseInfoUpdateProcessor implements PostProcessor {
|
public class ParseInfoProcessor implements ResponseProcessor {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void process(ParseResp parseResp, QueryContext queryContext, ChatContext chatContext) {
|
public void process(ParseResp parseResp, QueryContext queryContext, ChatContext chatContext) {
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.tencent.supersonic.chat.postprocessor;
|
package com.tencent.supersonic.chat.processor;
|
||||||
|
|
||||||
import com.tencent.supersonic.chat.api.component.SemanticQuery;
|
import com.tencent.supersonic.chat.api.component.SemanticQuery;
|
||||||
import com.tencent.supersonic.chat.api.pojo.ChatContext;
|
import com.tencent.supersonic.chat.api.pojo.ChatContext;
|
||||||
@@ -18,7 +18,7 @@ import java.util.stream.Collectors;
|
|||||||
* Rank queries by score.
|
* Rank queries by score.
|
||||||
*/
|
*/
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class QueryRankPostProcessor implements PostProcessor {
|
public class QueryRankProcessor implements ResponseProcessor {
|
||||||
|
|
||||||
private static final int candidateTopSize = 5;
|
private static final int candidateTopSize = 5;
|
||||||
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.tencent.supersonic.chat.postprocessor;
|
package com.tencent.supersonic.chat.processor;
|
||||||
|
|
||||||
import com.tencent.supersonic.chat.api.component.SemanticQuery;
|
import com.tencent.supersonic.chat.api.component.SemanticQuery;
|
||||||
import com.tencent.supersonic.chat.api.pojo.ChatContext;
|
import com.tencent.supersonic.chat.api.pojo.ChatContext;
|
||||||
@@ -13,7 +13,7 @@ import java.util.List;
|
|||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class RespBuildPostProcessor implements PostProcessor {
|
public class RespBuildProcessor implements ResponseProcessor {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void process(ParseResp parseResp, QueryContext queryContext, ChatContext chatContext) {
|
public void process(ParseResp parseResp, QueryContext queryContext, ChatContext chatContext) {
|
||||||
@@ -1,13 +1,12 @@
|
|||||||
package com.tencent.supersonic.chat.postprocessor;
|
package com.tencent.supersonic.chat.processor;
|
||||||
import com.tencent.supersonic.chat.api.pojo.ChatContext;
|
import com.tencent.supersonic.chat.api.pojo.ChatContext;
|
||||||
import com.tencent.supersonic.chat.api.pojo.QueryContext;
|
import com.tencent.supersonic.chat.api.pojo.QueryContext;
|
||||||
import com.tencent.supersonic.chat.api.pojo.response.ParseResp;
|
import com.tencent.supersonic.chat.api.pojo.response.ParseResp;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A post processor do some logic after parser and corrector
|
* A response processor wraps things up before responding to users.
|
||||||
*/
|
*/
|
||||||
|
public interface ResponseProcessor {
|
||||||
public interface PostProcessor {
|
|
||||||
|
|
||||||
void process(ParseResp parseResp, QueryContext queryContext, ChatContext chatContext);
|
void process(ParseResp parseResp, QueryContext queryContext, ChatContext chatContext);
|
||||||
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.tencent.supersonic.chat.postprocessor;
|
package com.tencent.supersonic.chat.processor;
|
||||||
|
|
||||||
import com.tencent.supersonic.chat.api.component.SemanticQuery;
|
import com.tencent.supersonic.chat.api.component.SemanticQuery;
|
||||||
import com.tencent.supersonic.chat.api.pojo.ChatContext;
|
import com.tencent.supersonic.chat.api.pojo.ChatContext;
|
||||||
@@ -13,7 +13,7 @@ import java.util.List;
|
|||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
public class SqlOutputPostProcessor implements PostProcessor {
|
public class SqlInfoProcessor implements ResponseProcessor {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void process(ParseResp parseResp, QueryContext queryContext, ChatContext chatContext) {
|
public void process(ParseResp parseResp, QueryContext queryContext, ChatContext chatContext) {
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.tencent.supersonic.chat.postprocessor;
|
package com.tencent.supersonic.chat.processor;
|
||||||
|
|
||||||
import com.tencent.supersonic.chat.api.pojo.ChatContext;
|
import com.tencent.supersonic.chat.api.pojo.ChatContext;
|
||||||
import com.tencent.supersonic.chat.api.pojo.QueryContext;
|
import com.tencent.supersonic.chat.api.pojo.QueryContext;
|
||||||
@@ -6,7 +6,7 @@ import com.tencent.supersonic.chat.api.pojo.response.ParseResp;
|
|||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class TimeCostPostProcessor implements PostProcessor {
|
public class TimeCostProcessor implements ResponseProcessor {
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -28,7 +28,7 @@ import com.tencent.supersonic.chat.persistence.dataobject.ChatParseDO;
|
|||||||
import com.tencent.supersonic.chat.persistence.dataobject.ChatQueryDO;
|
import com.tencent.supersonic.chat.persistence.dataobject.ChatQueryDO;
|
||||||
import com.tencent.supersonic.chat.persistence.dataobject.CostType;
|
import com.tencent.supersonic.chat.persistence.dataobject.CostType;
|
||||||
import com.tencent.supersonic.chat.persistence.dataobject.StatisticsDO;
|
import com.tencent.supersonic.chat.persistence.dataobject.StatisticsDO;
|
||||||
import com.tencent.supersonic.chat.postprocessor.PostProcessor;
|
import com.tencent.supersonic.chat.processor.ResponseProcessor;
|
||||||
import com.tencent.supersonic.chat.query.QueryManager;
|
import com.tencent.supersonic.chat.query.QueryManager;
|
||||||
import com.tencent.supersonic.chat.query.llm.s2sql.S2SQLQuery;
|
import com.tencent.supersonic.chat.query.llm.s2sql.S2SQLQuery;
|
||||||
import com.tencent.supersonic.chat.query.rule.RuleSemanticQuery;
|
import com.tencent.supersonic.chat.query.rule.RuleSemanticQuery;
|
||||||
@@ -111,20 +111,20 @@ public class QueryServiceImpl implements QueryService {
|
|||||||
|
|
||||||
private List<SchemaMapper> schemaMappers = ComponentFactory.getSchemaMappers();
|
private List<SchemaMapper> schemaMappers = ComponentFactory.getSchemaMappers();
|
||||||
private List<SemanticParser> semanticParsers = ComponentFactory.getSemanticParsers();
|
private List<SemanticParser> semanticParsers = ComponentFactory.getSemanticParsers();
|
||||||
private List<PostProcessor> postProcessors = ComponentFactory.getPostProcessors();
|
private List<ResponseProcessor> responseProcessors = ComponentFactory.getPostProcessors();
|
||||||
private List<QueryResponder> executeResponders = ComponentFactory.getExecuteResponders();
|
private List<QueryResponder> executeResponders = ComponentFactory.getExecuteResponders();
|
||||||
private List<SemanticCorrector> semanticCorrectors = ComponentFactory.getSqlCorrections();
|
private List<SemanticCorrector> semanticCorrectors = ComponentFactory.getSemanticCorrectors();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ParseResp performParsing(QueryReq queryReq) {
|
public ParseResp performParsing(QueryReq queryReq) {
|
||||||
ParseResp parseResult = new ParseResp();
|
ParseResp parseResult = new ParseResp();
|
||||||
//1. build queryContext and chatContext
|
// build queryContext and chatContext
|
||||||
QueryContext queryCtx = new QueryContext(queryReq);
|
QueryContext queryCtx = new QueryContext(queryReq);
|
||||||
// in order to support multi-turn conversation, chat context is needed
|
// in order to support multi-turn conversation, chat context is needed
|
||||||
ChatContext chatCtx = chatService.getOrCreateContext(queryReq.getChatId());
|
ChatContext chatCtx = chatService.getOrCreateContext(queryReq.getChatId());
|
||||||
List<StatisticsDO> timeCostDOList = new ArrayList<>();
|
List<StatisticsDO> timeCostDOList = new ArrayList<>();
|
||||||
|
|
||||||
//2. mapper
|
// 1. mapper
|
||||||
schemaMappers.forEach(mapper -> {
|
schemaMappers.forEach(mapper -> {
|
||||||
long startTime = System.currentTimeMillis();
|
long startTime = System.currentTimeMillis();
|
||||||
mapper.map(queryCtx);
|
mapper.map(queryCtx);
|
||||||
@@ -132,7 +132,7 @@ public class QueryServiceImpl implements QueryService {
|
|||||||
.interfaceName(mapper.getClass().getSimpleName()).type(CostType.MAPPER.getType()).build());
|
.interfaceName(mapper.getClass().getSimpleName()).type(CostType.MAPPER.getType()).build());
|
||||||
});
|
});
|
||||||
|
|
||||||
//3. parser
|
// 2. parser
|
||||||
semanticParsers.forEach(parser -> {
|
semanticParsers.forEach(parser -> {
|
||||||
long startTime = System.currentTimeMillis();
|
long startTime = System.currentTimeMillis();
|
||||||
parser.parse(queryCtx, chatCtx);
|
parser.parse(queryCtx, chatCtx);
|
||||||
@@ -141,7 +141,7 @@ public class QueryServiceImpl implements QueryService {
|
|||||||
log.info("{} result:{}", parser.getClass().getSimpleName(), JsonUtil.toString(queryCtx));
|
log.info("{} result:{}", parser.getClass().getSimpleName(), JsonUtil.toString(queryCtx));
|
||||||
});
|
});
|
||||||
|
|
||||||
//4. corrector
|
// 3. corrector
|
||||||
List<SemanticQuery> candidateQueries = queryCtx.getCandidateQueries();
|
List<SemanticQuery> candidateQueries = queryCtx.getCandidateQueries();
|
||||||
if (CollectionUtils.isNotEmpty(candidateQueries)) {
|
if (CollectionUtils.isNotEmpty(candidateQueries)) {
|
||||||
for (SemanticQuery semanticQuery : candidateQueries) {
|
for (SemanticQuery semanticQuery : candidateQueries) {
|
||||||
@@ -154,14 +154,15 @@ public class QueryServiceImpl implements QueryService {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//5. postProcessor
|
|
||||||
postProcessors.forEach(postProcessor -> {
|
// 4. processor
|
||||||
|
responseProcessors.forEach(processor -> {
|
||||||
long startTime = System.currentTimeMillis();
|
long startTime = System.currentTimeMillis();
|
||||||
postProcessor.process(parseResult, queryCtx, chatCtx);
|
processor.process(parseResult, queryCtx, chatCtx);
|
||||||
timeCostDOList.add(StatisticsDO.builder().cost((int) (System.currentTimeMillis() - startTime))
|
timeCostDOList.add(StatisticsDO.builder().cost((int) (System.currentTimeMillis() - startTime))
|
||||||
.interfaceName(postProcessor.getClass().getSimpleName())
|
.interfaceName(processor.getClass().getSimpleName())
|
||||||
.type(CostType.POSTPROCESSOR.getType()).build());
|
.type(CostType.PROCESSOR.getType()).build());
|
||||||
log.info("{} result:{}", postProcessor.getClass().getSimpleName(), JsonUtil.toString(queryCtx));
|
log.info("{} result:{}", processor.getClass().getSimpleName(), JsonUtil.toString(queryCtx));
|
||||||
});
|
});
|
||||||
|
|
||||||
if (Objects.nonNull(parseResult.getQueryId()) && timeCostDOList.size() > 0) {
|
if (Objects.nonNull(parseResult.getQueryId()) && timeCostDOList.size() > 0) {
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import com.tencent.supersonic.chat.api.component.SemanticInterpreter;
|
|||||||
import com.tencent.supersonic.chat.api.component.SemanticParser;
|
import com.tencent.supersonic.chat.api.component.SemanticParser;
|
||||||
import com.tencent.supersonic.chat.parser.LLMInterpreter;
|
import com.tencent.supersonic.chat.parser.LLMInterpreter;
|
||||||
import com.tencent.supersonic.chat.parser.llm.s2sql.ModelResolver;
|
import com.tencent.supersonic.chat.parser.llm.s2sql.ModelResolver;
|
||||||
import com.tencent.supersonic.chat.postprocessor.PostProcessor;
|
import com.tencent.supersonic.chat.processor.ResponseProcessor;
|
||||||
import com.tencent.supersonic.chat.responder.QueryResponder;
|
import com.tencent.supersonic.chat.responder.QueryResponder;
|
||||||
import org.apache.commons.collections.CollectionUtils;
|
import org.apache.commons.collections.CollectionUtils;
|
||||||
import org.springframework.core.io.support.SpringFactoriesLoader;
|
import org.springframework.core.io.support.SpringFactoriesLoader;
|
||||||
@@ -18,11 +18,11 @@ public class ComponentFactory {
|
|||||||
|
|
||||||
private static List<SchemaMapper> schemaMappers = new ArrayList<>();
|
private static List<SchemaMapper> schemaMappers = new ArrayList<>();
|
||||||
private static List<SemanticParser> semanticParsers = new ArrayList<>();
|
private static List<SemanticParser> semanticParsers = new ArrayList<>();
|
||||||
private static List<SemanticCorrector> s2SQLCorrections = new ArrayList<>();
|
private static List<SemanticCorrector> semanticCorrectors = new ArrayList<>();
|
||||||
private static SemanticInterpreter semanticInterpreter;
|
private static SemanticInterpreter semanticInterpreter;
|
||||||
|
|
||||||
private static LLMInterpreter llmInterpreter;
|
private static LLMInterpreter llmInterpreter;
|
||||||
private static List<PostProcessor> postProcessors = new ArrayList<>();
|
private static List<ResponseProcessor> responseProcessors = new ArrayList<>();
|
||||||
private static List<QueryResponder> executeResponders = new ArrayList<>();
|
private static List<QueryResponder> executeResponders = new ArrayList<>();
|
||||||
private static ModelResolver modelResolver;
|
private static ModelResolver modelResolver;
|
||||||
|
|
||||||
@@ -34,13 +34,14 @@ public class ComponentFactory {
|
|||||||
return CollectionUtils.isEmpty(semanticParsers) ? init(SemanticParser.class, semanticParsers) : semanticParsers;
|
return CollectionUtils.isEmpty(semanticParsers) ? init(SemanticParser.class, semanticParsers) : semanticParsers;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<SemanticCorrector> getSqlCorrections() {
|
public static List<SemanticCorrector> getSemanticCorrectors() {
|
||||||
return CollectionUtils.isEmpty(s2SQLCorrections) ? init(SemanticCorrector.class,
|
return CollectionUtils.isEmpty(semanticCorrectors) ? init(SemanticCorrector.class,
|
||||||
s2SQLCorrections) : s2SQLCorrections;
|
semanticCorrectors) : semanticCorrectors;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<PostProcessor> getPostProcessors() {
|
public static List<ResponseProcessor> getPostProcessors() {
|
||||||
return CollectionUtils.isEmpty(postProcessors) ? init(PostProcessor.class, postProcessors) : postProcessors;
|
return CollectionUtils.isEmpty(responseProcessors) ? init(ResponseProcessor.class,
|
||||||
|
responseProcessors) : responseProcessors;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<QueryResponder> getExecuteResponders() {
|
public static List<QueryResponder> getExecuteResponders() {
|
||||||
@@ -55,11 +56,6 @@ public class ComponentFactory {
|
|||||||
return semanticInterpreter;
|
return semanticInterpreter;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setSemanticLayer(SemanticInterpreter layer) {
|
|
||||||
semanticInterpreter = layer;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public static LLMInterpreter getLLMInterpreter() {
|
public static LLMInterpreter getLLMInterpreter() {
|
||||||
if (Objects.isNull(llmInterpreter)) {
|
if (Objects.isNull(llmInterpreter)) {
|
||||||
llmInterpreter = init(LLMInterpreter.class);
|
llmInterpreter = init(LLMInterpreter.class);
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.tencent.supersonic.chat.postprocessor;
|
package com.tencent.supersonic.chat.processor;
|
||||||
|
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import com.google.common.collect.Sets;
|
import com.google.common.collect.Sets;
|
||||||
@@ -14,11 +14,11 @@ import org.junit.jupiter.api.Test;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
class MetricCheckPostProcessorTest {
|
class MetricCheckProcessorTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testProcessCorrectSql_necessaryDimension_groupBy() {
|
void testProcessCorrectSql_necessaryDimension_groupBy() {
|
||||||
MetricCheckPostProcessor metricCheckPostProcessor = new MetricCheckPostProcessor();
|
MetricCheckProcessor metricCheckPostProcessor = new MetricCheckProcessor();
|
||||||
String correctSql = "select 用户名, sum(访问次数), count(distinct 访问用户数) from 超音数 group by 用户名";
|
String correctSql = "select 用户名, sum(访问次数), count(distinct 访问用户数) from 超音数 group by 用户名";
|
||||||
SemanticParseInfo parseInfo = mockParseInfo(correctSql);
|
SemanticParseInfo parseInfo = mockParseInfo(correctSql);
|
||||||
String actualProcessedSql = metricCheckPostProcessor.processCorrectSql(parseInfo, mockModelSchema());
|
String actualProcessedSql = metricCheckPostProcessor.processCorrectSql(parseInfo, mockModelSchema());
|
||||||
@@ -28,7 +28,7 @@ class MetricCheckPostProcessorTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testProcessCorrectSql_necessaryDimension_where() {
|
void testProcessCorrectSql_necessaryDimension_where() {
|
||||||
MetricCheckPostProcessor metricCheckPostProcessor = new MetricCheckPostProcessor();
|
MetricCheckProcessor metricCheckPostProcessor = new MetricCheckProcessor();
|
||||||
String correctSql = "select 用户名, sum(访问次数), count(distinct 访问用户数) from 超音数 where 部门 = 'HR' group by 用户名";
|
String correctSql = "select 用户名, sum(访问次数), count(distinct 访问用户数) from 超音数 where 部门 = 'HR' group by 用户名";
|
||||||
SemanticParseInfo parseInfo = mockParseInfo(correctSql);
|
SemanticParseInfo parseInfo = mockParseInfo(correctSql);
|
||||||
String actualProcessedSql = metricCheckPostProcessor.processCorrectSql(parseInfo, mockModelSchema());
|
String actualProcessedSql = metricCheckPostProcessor.processCorrectSql(parseInfo, mockModelSchema());
|
||||||
@@ -39,7 +39,7 @@ class MetricCheckPostProcessorTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testProcessCorrectSql_dimensionNotDrillDown_groupBy() {
|
void testProcessCorrectSql_dimensionNotDrillDown_groupBy() {
|
||||||
MetricCheckPostProcessor metricCheckPostProcessor = new MetricCheckPostProcessor();
|
MetricCheckProcessor metricCheckPostProcessor = new MetricCheckProcessor();
|
||||||
String correctSql = "select 页面, 部门, sum(访问次数), count(distinct 访问用户数) from 超音数 group by 页面, 部门";
|
String correctSql = "select 页面, 部门, sum(访问次数), count(distinct 访问用户数) from 超音数 group by 页面, 部门";
|
||||||
SemanticParseInfo parseInfo = mockParseInfo(correctSql);
|
SemanticParseInfo parseInfo = mockParseInfo(correctSql);
|
||||||
String actualProcessedSql = metricCheckPostProcessor.processCorrectSql(parseInfo, mockModelSchema());
|
String actualProcessedSql = metricCheckPostProcessor.processCorrectSql(parseInfo, mockModelSchema());
|
||||||
@@ -49,7 +49,7 @@ class MetricCheckPostProcessorTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testProcessCorrectSql_dimensionNotDrillDown_where() {
|
void testProcessCorrectSql_dimensionNotDrillDown_where() {
|
||||||
MetricCheckPostProcessor metricCheckPostProcessor = new MetricCheckPostProcessor();
|
MetricCheckProcessor metricCheckPostProcessor = new MetricCheckProcessor();
|
||||||
String correctSql = "select 部门, sum(访问次数), count(distinct 访问用户数) from 超音数 where 页面 = 'P1' group by 部门";
|
String correctSql = "select 部门, sum(访问次数), count(distinct 访问用户数) from 超音数 where 页面 = 'P1' group by 部门";
|
||||||
SemanticParseInfo parseInfo = mockParseInfo(correctSql);
|
SemanticParseInfo parseInfo = mockParseInfo(correctSql);
|
||||||
String actualProcessedSql = metricCheckPostProcessor.processCorrectSql(parseInfo, mockModelSchema());
|
String actualProcessedSql = metricCheckPostProcessor.processCorrectSql(parseInfo, mockModelSchema());
|
||||||
@@ -59,7 +59,7 @@ class MetricCheckPostProcessorTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testProcessCorrectSql_dimensionNotDrillDown_necessaryDimension() {
|
void testProcessCorrectSql_dimensionNotDrillDown_necessaryDimension() {
|
||||||
MetricCheckPostProcessor metricCheckPostProcessor = new MetricCheckPostProcessor();
|
MetricCheckProcessor metricCheckPostProcessor = new MetricCheckProcessor();
|
||||||
String correctSql = "select 页面, sum(访问次数), count(distinct 访问用户数) from 超音数 group by 页面";
|
String correctSql = "select 页面, sum(访问次数), count(distinct 访问用户数) from 超音数 group by 页面";
|
||||||
SemanticParseInfo parseInfo = mockParseInfo(correctSql);
|
SemanticParseInfo parseInfo = mockParseInfo(correctSql);
|
||||||
String actualProcessedSql = metricCheckPostProcessor.processCorrectSql(parseInfo, mockModelSchema());
|
String actualProcessedSql = metricCheckPostProcessor.processCorrectSql(parseInfo, mockModelSchema());
|
||||||
@@ -69,7 +69,7 @@ class MetricCheckPostProcessorTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testProcessCorrectSql_dimensionDrillDown() {
|
void testProcessCorrectSql_dimensionDrillDown() {
|
||||||
MetricCheckPostProcessor metricCheckPostProcessor = new MetricCheckPostProcessor();
|
MetricCheckProcessor metricCheckPostProcessor = new MetricCheckProcessor();
|
||||||
String correctSql = "select 用户名, 部门, sum(访问次数), count(distinct 访问用户数) from 超音数 group by 用户名, 部门";
|
String correctSql = "select 用户名, 部门, sum(访问次数), count(distinct 访问用户数) from 超音数 group by 用户名, 部门";
|
||||||
SemanticParseInfo parseInfo = mockParseInfo(correctSql);
|
SemanticParseInfo parseInfo = mockParseInfo(correctSql);
|
||||||
String actualProcessedSql = metricCheckPostProcessor.processCorrectSql(parseInfo, mockModelSchema());
|
String actualProcessedSql = metricCheckPostProcessor.processCorrectSql(parseInfo, mockModelSchema());
|
||||||
@@ -79,7 +79,7 @@ class MetricCheckPostProcessorTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testProcessCorrectSql_noDrillDownDimensionSetting() {
|
void testProcessCorrectSql_noDrillDownDimensionSetting() {
|
||||||
MetricCheckPostProcessor metricCheckPostProcessor = new MetricCheckPostProcessor();
|
MetricCheckProcessor metricCheckPostProcessor = new MetricCheckProcessor();
|
||||||
String correctSql = "select 页面, 用户名, sum(访问次数), count(distinct 访问用户数) from 超音数 group by 页面, 用户名";
|
String correctSql = "select 页面, 用户名, sum(访问次数), count(distinct 访问用户数) from 超音数 group by 页面, 用户名";
|
||||||
SemanticParseInfo parseInfo = mockParseInfo(correctSql);
|
SemanticParseInfo parseInfo = mockParseInfo(correctSql);
|
||||||
String actualProcessedSql = metricCheckPostProcessor.processCorrectSql(parseInfo,
|
String actualProcessedSql = metricCheckPostProcessor.processCorrectSql(parseInfo,
|
||||||
@@ -90,7 +90,7 @@ class MetricCheckPostProcessorTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testProcessCorrectSql_noDrillDownDimensionSetting_noAgg() {
|
void testProcessCorrectSql_noDrillDownDimensionSetting_noAgg() {
|
||||||
MetricCheckPostProcessor metricCheckPostProcessor = new MetricCheckPostProcessor();
|
MetricCheckProcessor metricCheckPostProcessor = new MetricCheckProcessor();
|
||||||
String correctSql = "select 访问次数 from 超音数";
|
String correctSql = "select 访问次数 from 超音数";
|
||||||
SemanticParseInfo parseInfo = mockParseInfo(correctSql);
|
SemanticParseInfo parseInfo = mockParseInfo(correctSql);
|
||||||
String actualProcessedSql = metricCheckPostProcessor.processCorrectSql(parseInfo,
|
String actualProcessedSql = metricCheckPostProcessor.processCorrectSql(parseInfo,
|
||||||
@@ -101,7 +101,7 @@ class MetricCheckPostProcessorTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testProcessCorrectSql_noDrillDownDimensionSetting_count() {
|
void testProcessCorrectSql_noDrillDownDimensionSetting_count() {
|
||||||
MetricCheckPostProcessor metricCheckPostProcessor = new MetricCheckPostProcessor();
|
MetricCheckProcessor metricCheckPostProcessor = new MetricCheckProcessor();
|
||||||
String correctSql = "select 部门, count(*) from 超音数 group by 部门";
|
String correctSql = "select 部门, count(*) from 超音数 group by 部门";
|
||||||
SemanticParseInfo parseInfo = mockParseInfo(correctSql);
|
SemanticParseInfo parseInfo = mockParseInfo(correctSql);
|
||||||
String actualProcessedSql = metricCheckPostProcessor.processCorrectSql(parseInfo,
|
String actualProcessedSql = metricCheckPostProcessor.processCorrectSql(parseInfo,
|
||||||
@@ -223,7 +223,7 @@ public class MultiCustomDictionary extends DynamicCustomDictionary {
|
|||||||
if (customNatureCollector.isEmpty()) {
|
if (customNatureCollector.isEmpty()) {
|
||||||
for (int i = Nature.begin.ordinal() + 1; i < Nature.values().length; ++i) {
|
for (int i = Nature.begin.ordinal() + 1; i < Nature.values().length; ++i) {
|
||||||
Nature nature = Nature.values()[i];
|
Nature nature = Nature.values()[i];
|
||||||
if(Objects.nonNull(nature)) {
|
if (Objects.nonNull(nature)) {
|
||||||
customNatureCollector.add(nature);
|
customNatureCollector.add(nature);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,6 +21,15 @@ com.tencent.supersonic.chat.api.component.SemanticCorrector=\
|
|||||||
com.tencent.supersonic.chat.corrector.HavingCorrector, \
|
com.tencent.supersonic.chat.corrector.HavingCorrector, \
|
||||||
com.tencent.supersonic.chat.corrector.FromCorrector
|
com.tencent.supersonic.chat.corrector.FromCorrector
|
||||||
|
|
||||||
|
com.tencent.supersonic.chat.processor.ResponseProcessor=\
|
||||||
|
com.tencent.supersonic.chat.processor.MetricCheckProcessor, \
|
||||||
|
com.tencent.supersonic.chat.processor.ParseInfoProcessor, \
|
||||||
|
com.tencent.supersonic.chat.processor.QueryRankProcessor, \
|
||||||
|
com.tencent.supersonic.chat.processor.EntityInfoProcessor, \
|
||||||
|
com.tencent.supersonic.chat.processor.SqlInfoProcessor, \
|
||||||
|
com.tencent.supersonic.chat.processor.TimeCostProcessor, \
|
||||||
|
com.tencent.supersonic.chat.processor.RespBuildProcessor
|
||||||
|
|
||||||
com.tencent.supersonic.chat.parser.LLMInterpreter=\
|
com.tencent.supersonic.chat.parser.LLMInterpreter=\
|
||||||
com.tencent.supersonic.chat.parser.HttpLLMInterpreter
|
com.tencent.supersonic.chat.parser.HttpLLMInterpreter
|
||||||
|
|
||||||
@@ -36,15 +45,6 @@ com.tencent.supersonic.auth.authentication.interceptor.AuthenticationInterceptor
|
|||||||
com.tencent.supersonic.auth.api.authentication.adaptor.UserAdaptor=\
|
com.tencent.supersonic.auth.api.authentication.adaptor.UserAdaptor=\
|
||||||
com.tencent.supersonic.auth.authentication.adaptor.DefaultUserAdaptor
|
com.tencent.supersonic.auth.authentication.adaptor.DefaultUserAdaptor
|
||||||
|
|
||||||
com.tencent.supersonic.chat.postprocessor.PostProcessor=\
|
|
||||||
com.tencent.supersonic.chat.postprocessor.MetricCheckPostProcessor, \
|
|
||||||
com.tencent.supersonic.chat.postprocessor.ParseInfoUpdateProcessor, \
|
|
||||||
com.tencent.supersonic.chat.postprocessor.QueryRankPostProcessor, \
|
|
||||||
com.tencent.supersonic.chat.postprocessor.EntityInfoPostProcessor, \
|
|
||||||
com.tencent.supersonic.chat.postprocessor.SqlOutputPostProcessor, \
|
|
||||||
com.tencent.supersonic.chat.postprocessor.TimeCostPostProcessor, \
|
|
||||||
com.tencent.supersonic.chat.postprocessor.RespBuildPostProcessor
|
|
||||||
|
|
||||||
com.tencent.supersonic.chat.responder.QueryResponder=\
|
com.tencent.supersonic.chat.responder.QueryResponder=\
|
||||||
com.tencent.supersonic.chat.responder.EntityInfoQueryResponder, \
|
com.tencent.supersonic.chat.responder.EntityInfoQueryResponder, \
|
||||||
com.tencent.supersonic.chat.responder.SimilarMetricQueryResponder
|
com.tencent.supersonic.chat.responder.SimilarMetricQueryResponder
|
||||||
Reference in New Issue
Block a user