diff --git a/README.md b/README.md index 4d5f8c1ec..2187599d6 100644 --- a/README.md +++ b/README.md @@ -40,7 +40,7 @@ The high-level architecture and main process flow is as follows: - **Semantic Corrector:** checks validity of extracted semantic information and performs correction and optimization if needed. -- **Semantic Layer:** performs execution according to extracted semantic information. It generates SQL queries and executes them against physical data models. +- **Semantic Interpreter:** performs execution according to extracted semantic information. It generates SQL statements and executes them against physical data models. - **Chat Plugin:** extends functionality with third-party tools. The LLM is going to select the most suitable one, given all configured plugins with function description and sample questions. diff --git a/README_CN.md b/README_CN.md index 79e6196b5..21b4821ff 100644 --- a/README_CN.md +++ b/README_CN.md @@ -38,7 +38,7 @@ - **语义修正器(Semantic Corrector):** 检查语义信息的合法性,对不合法的信息做修正和优化处理。 -- **语义翻译器(Semantic Layer):** 根据语义信息生成物理SQL执行查询。 +- **语义解释器(Semantic Interpreter):** 根据语义信息生成物理SQL执行查询。 - **问答插件(Chat Plugin):** 通过第三方工具扩展功能。给定所有配置的插件及其功能描述和示例问题,大语言模型将选择最合适的插件。 diff --git a/chat/api/src/main/java/com/tencent/supersonic/chat/api/component/SemanticLayer.java b/chat/api/src/main/java/com/tencent/supersonic/chat/api/component/SemanticInterpreter.java similarity index 98% rename from chat/api/src/main/java/com/tencent/supersonic/chat/api/component/SemanticLayer.java rename to chat/api/src/main/java/com/tencent/supersonic/chat/api/component/SemanticInterpreter.java index a6be0a0ab..7e7caaf13 100644 --- a/chat/api/src/main/java/com/tencent/supersonic/chat/api/component/SemanticLayer.java +++ b/chat/api/src/main/java/com/tencent/supersonic/chat/api/component/SemanticInterpreter.java @@ -31,7 +31,7 @@ import java.util.List; * as proxy to a remote semantic service. *

*/ -public interface SemanticLayer { +public interface SemanticInterpreter { QueryResultWithSchemaResp queryByStruct(QueryStructReq queryStructReq, User user); diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/llm/interpret/MetricInterpretParser.java b/chat/core/src/main/java/com/tencent/supersonic/chat/parser/llm/interpret/MetricInterpretParser.java index 8965bcda2..b006ab2e1 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/llm/interpret/MetricInterpretParser.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/parser/llm/interpret/MetricInterpretParser.java @@ -5,7 +5,7 @@ import com.google.common.collect.Sets; import com.tencent.supersonic.chat.agent.Agent; import com.tencent.supersonic.chat.agent.tool.AgentToolType; import com.tencent.supersonic.chat.agent.tool.MetricInterpretTool; -import com.tencent.supersonic.chat.api.component.SemanticLayer; +import com.tencent.supersonic.chat.api.component.SemanticInterpreter; import com.tencent.supersonic.chat.api.component.SemanticParser; import com.tencent.supersonic.chat.api.pojo.QueryContext; import com.tencent.supersonic.chat.api.pojo.ChatContext; @@ -82,8 +82,8 @@ public class MetricInterpretParser implements SemanticParser { } public Set getMetrics(List metricIds, Long modelId) { - SemanticLayer semanticLayer = ComponentFactory.getSemanticLayer(); - ModelSchema modelSchema = semanticLayer.getModelSchema(modelId, true); + SemanticInterpreter semanticInterpreter = ComponentFactory.getSemanticLayer(); + ModelSchema modelSchema = semanticInterpreter.getModelSchema(modelId, true); Set metrics = modelSchema.getMetrics(); return metrics.stream().filter(schemaElement -> metricIds.contains(schemaElement.getId())) .collect(Collectors.toSet()); diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/query/llm/dsl/DslQuery.java b/chat/core/src/main/java/com/tencent/supersonic/chat/query/llm/dsl/DslQuery.java index 58764882a..64f13c624 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/query/llm/dsl/DslQuery.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/query/llm/dsl/DslQuery.java @@ -1,7 +1,7 @@ package com.tencent.supersonic.chat.query.llm.dsl; import com.tencent.supersonic.auth.api.authentication.pojo.User; -import com.tencent.supersonic.chat.api.component.SemanticLayer; +import com.tencent.supersonic.chat.api.component.SemanticInterpreter; import com.tencent.supersonic.chat.api.pojo.response.EntityInfo; import com.tencent.supersonic.chat.api.pojo.response.QueryResult; import com.tencent.supersonic.chat.api.pojo.response.QueryState; @@ -32,7 +32,7 @@ import org.springframework.stereotype.Component; public class DslQuery extends PluginSemanticQuery { public static final String QUERY_MODE = "DSL"; - protected SemanticLayer semanticLayer = ComponentFactory.getSemanticLayer(); + protected SemanticInterpreter semanticInterpreter = ComponentFactory.getSemanticLayer(); public DslQuery() { QueryManager.register(this); @@ -49,7 +49,7 @@ public class DslQuery extends PluginSemanticQuery { long startTime = System.currentTimeMillis(); QueryDslReq queryDslReq = getQueryDslReq(llmResp); - QueryResultWithSchemaResp queryResp = semanticLayer.queryByDsl(queryDslReq, user); + QueryResultWithSchemaResp queryResp = semanticInterpreter.queryByDsl(queryDslReq, user); log.info("queryByDsl cost:{},querySql:{}", System.currentTimeMillis() - startTime, llmResp.getSqlOutput()); @@ -92,7 +92,7 @@ public class DslQuery extends PluginSemanticQuery { .queryTypeEnum(QueryTypeEnum.SQL) .queryReq(getQueryDslReq(getLlmResp())) .build(); - return semanticLayer.explain(explainSqlReq, user); + return semanticInterpreter.explain(explainSqlReq, user); } catch (Exception e) { log.error("explain error explainSqlReq:{}", explainSqlReq, e); } diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/query/llm/interpret/MetricInterpretQuery.java b/chat/core/src/main/java/com/tencent/supersonic/chat/query/llm/interpret/MetricInterpretQuery.java index 1fa090eb8..831344496 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/query/llm/interpret/MetricInterpretQuery.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/query/llm/interpret/MetricInterpretQuery.java @@ -3,7 +3,7 @@ package com.tencent.supersonic.chat.query.llm.interpret; import com.alibaba.fastjson.JSONObject; import com.google.common.collect.Lists; import com.tencent.supersonic.auth.api.authentication.pojo.User; -import com.tencent.supersonic.chat.api.component.SemanticLayer; +import com.tencent.supersonic.chat.api.component.SemanticInterpreter; import com.tencent.supersonic.chat.api.pojo.SchemaElement; import com.tencent.supersonic.chat.api.pojo.SchemaElementMatch; import com.tencent.supersonic.chat.api.pojo.SchemaElementType; @@ -54,8 +54,8 @@ public class MetricInterpretQuery extends PluginSemanticQuery { QueryStructReq queryStructReq = QueryReqBuilder.buildStructReq(parseInfo); fillAggregator(queryStructReq, parseInfo.getMetrics()); queryStructReq.setNativeQuery(true); - SemanticLayer semanticLayer = ComponentFactory.getSemanticLayer(); - QueryResultWithSchemaResp queryResultWithSchemaResp = semanticLayer.queryByStruct(queryStructReq, user); + SemanticInterpreter semanticInterpreter = ComponentFactory.getSemanticLayer(); + QueryResultWithSchemaResp queryResultWithSchemaResp = semanticInterpreter.queryByStruct(queryStructReq, user); String text = generateTableText(queryResultWithSchemaResp); Map properties = parseInfo.getProperties(); Map replacedMap = new HashMap<>(); diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/query/rule/RuleSemanticQuery.java b/chat/core/src/main/java/com/tencent/supersonic/chat/query/rule/RuleSemanticQuery.java index 4b5a8ac74..a85822a85 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/query/rule/RuleSemanticQuery.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/query/rule/RuleSemanticQuery.java @@ -2,7 +2,7 @@ package com.tencent.supersonic.chat.query.rule; import com.tencent.supersonic.auth.api.authentication.pojo.User; -import com.tencent.supersonic.chat.api.component.SemanticLayer; +import com.tencent.supersonic.chat.api.component.SemanticInterpreter; import com.tencent.supersonic.chat.api.component.SemanticQuery; import com.tencent.supersonic.chat.api.pojo.ChatContext; import com.tencent.supersonic.chat.api.pojo.ModelSchema; @@ -45,7 +45,7 @@ public abstract class RuleSemanticQuery implements SemanticQuery, Serializable { protected SemanticParseInfo parseInfo = new SemanticParseInfo(); protected QueryMatcher queryMatcher = new QueryMatcher(); - protected SemanticLayer semanticLayer = ComponentFactory.getSemanticLayer(); + protected SemanticInterpreter semanticInterpreter = ComponentFactory.getSemanticLayer(); public RuleSemanticQuery() { QueryManager.register(this); @@ -196,7 +196,7 @@ public abstract class RuleSemanticQuery implements SemanticQuery, Serializable { } QueryResult queryResult = new QueryResult(); - QueryResultWithSchemaResp queryResp = semanticLayer.queryByStruct(convertQueryStruct(), user); + QueryResultWithSchemaResp queryResp = semanticInterpreter.queryByStruct(convertQueryStruct(), user); if (queryResp != null) { queryResult.setQueryAuthorization(queryResp.getQueryAuthorization()); @@ -227,7 +227,7 @@ public abstract class RuleSemanticQuery implements SemanticQuery, Serializable { .queryTypeEnum(QueryTypeEnum.STRUCT) .queryReq(convertQueryStruct()) .build(); - return semanticLayer.explain(explainSqlReq, user); + return semanticInterpreter.explain(explainSqlReq, user); } catch (Exception e) { log.error("explain error explainSqlReq:{}", explainSqlReq, e); } @@ -246,7 +246,7 @@ public abstract class RuleSemanticQuery implements SemanticQuery, Serializable { QueryResult queryResult = new QueryResult(); QueryMultiStructReq queryMultiStructReq = convertQueryMultiStruct(); - QueryResultWithSchemaResp queryResp = semanticLayer.queryByMultiStruct(queryMultiStructReq, user); + QueryResultWithSchemaResp queryResp = semanticInterpreter.queryByMultiStruct(queryMultiStructReq, user); if (queryResp != null) { queryResult.setQueryAuthorization(queryResp.getQueryAuthorization()); } diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/rest/ChatConfigController.java b/chat/core/src/main/java/com/tencent/supersonic/chat/rest/ChatConfigController.java index d8521e73a..d10497e7c 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/rest/ChatConfigController.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/rest/ChatConfigController.java @@ -3,7 +3,7 @@ package com.tencent.supersonic.chat.rest; import com.github.pagehelper.PageInfo; import com.tencent.supersonic.auth.api.authentication.pojo.User; import com.tencent.supersonic.auth.api.authentication.utils.UserHolder; -import com.tencent.supersonic.chat.api.component.SemanticLayer; +import com.tencent.supersonic.chat.api.component.SemanticInterpreter; import com.tencent.supersonic.chat.api.pojo.request.ChatConfigBaseReq; import com.tencent.supersonic.chat.api.pojo.request.ChatConfigEditReqReq; import com.tencent.supersonic.chat.api.pojo.request.ChatConfigFilter; @@ -41,7 +41,7 @@ public class ChatConfigController { private ConfigService configService; - private SemanticLayer semanticLayer = ComponentFactory.getSemanticLayer(); + private SemanticInterpreter semanticInterpreter = ComponentFactory.getSemanticLayer(); @PostMapping @@ -85,35 +85,35 @@ public class ChatConfigController { HttpServletRequest request, HttpServletResponse response) { User user = UserHolder.findUser(request, response); - return semanticLayer.getModelList(AuthType.ADMIN, domainId, user); + return semanticInterpreter.getModelList(AuthType.ADMIN, domainId, user); } @GetMapping("/modelList") public List getModelList(HttpServletRequest request, HttpServletResponse response) { User user = UserHolder.findUser(request, response); - return semanticLayer.getModelList(AuthType.ADMIN, null, user); + return semanticInterpreter.getModelList(AuthType.ADMIN, null, user); } @GetMapping("/domainList") public List getDomainList(HttpServletRequest request, HttpServletResponse response) { User user = UserHolder.findUser(request, response); - return semanticLayer.getDomainList(user); + return semanticInterpreter.getDomainList(user); } @GetMapping("/modelList/view") public List getModelListVisible(HttpServletRequest request, HttpServletResponse response) { User user = UserHolder.findUser(request, response); - return semanticLayer.getModelList(AuthType.VISIBLE, null, user); + return semanticInterpreter.getModelList(AuthType.VISIBLE, null, user); } @PostMapping("/dimension/page") public PageInfo getDimension(@RequestBody PageDimensionReq pageDimensionReq, HttpServletRequest request, HttpServletResponse response) { - return semanticLayer.getDimensionPage(pageDimensionReq); + return semanticInterpreter.getDimensionPage(pageDimensionReq); } @PostMapping("/metric/page") @@ -121,7 +121,7 @@ public class ChatConfigController { HttpServletRequest request, HttpServletResponse response) { User user = UserHolder.findUser(request, response); - return semanticLayer.getMetricPage(pageMetricReq, user); + return semanticInterpreter.getMetricPage(pageMetricReq, user); } diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/service/SemanticService.java b/chat/core/src/main/java/com/tencent/supersonic/chat/service/SemanticService.java index 31ea5e864..e903a4f57 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/service/SemanticService.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/service/SemanticService.java @@ -12,7 +12,7 @@ import static com.tencent.supersonic.common.pojo.Constants.TIME_FORMAT; import static com.tencent.supersonic.common.pojo.Constants.WEEK; import com.tencent.supersonic.auth.api.authentication.pojo.User; -import com.tencent.supersonic.chat.api.component.SemanticLayer; +import com.tencent.supersonic.chat.api.component.SemanticInterpreter; import com.tencent.supersonic.chat.api.pojo.ModelSchema; import com.tencent.supersonic.chat.api.pojo.SchemaElement; import com.tencent.supersonic.chat.api.pojo.SemanticParseInfo; @@ -78,7 +78,7 @@ public class SemanticService { @Autowired private AggregatorConfig aggregatorConfig; - private SemanticLayer semanticLayer = ComponentFactory.getSemanticLayer(); + private SemanticInterpreter semanticInterpreter = ComponentFactory.getSemanticLayer(); public ModelSchema getModelSchema(Long id) { ModelSchema modelSchema = schemaService.getModelSchema(id); @@ -227,7 +227,7 @@ public class SemanticService { QueryResultWithSchemaResp queryResultWithColumns = null; try { - queryResultWithColumns = semanticLayer.queryByStruct(QueryReqBuilder.buildStructReq(semanticParseInfo), + queryResultWithColumns = semanticInterpreter.queryByStruct(QueryReqBuilder.buildStructReq(semanticParseInfo), user); } catch (Exception e) { log.warn("setMainModel queryByStruct error, e:", e); @@ -393,7 +393,7 @@ public class SemanticService { queryStructReq.setGroups(new ArrayList<>(Arrays.asList(dateField))); queryStructReq.setDateInfo(getRatioDateConf(aggOperatorEnum, semanticParseInfo, results)); - QueryResultWithSchemaResp queryResp = semanticLayer.queryByStruct(queryStructReq, user); + QueryResultWithSchemaResp queryResp = semanticInterpreter.queryByStruct(queryStructReq, user); if (Objects.nonNull(queryResp) && !CollectionUtils.isEmpty(queryResp.getResultList())) { Map result = queryResp.getResultList().get(0); diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/service/impl/ConfigServiceImpl.java b/chat/core/src/main/java/com/tencent/supersonic/chat/service/impl/ConfigServiceImpl.java index a97d3a404..b3d6a8460 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/service/impl/ConfigServiceImpl.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/service/impl/ConfigServiceImpl.java @@ -2,7 +2,7 @@ package com.tencent.supersonic.chat.service.impl; import com.tencent.supersonic.auth.api.authentication.pojo.User; -import com.tencent.supersonic.chat.api.component.SemanticLayer; +import com.tencent.supersonic.chat.api.component.SemanticInterpreter; import com.tencent.supersonic.chat.api.pojo.ModelSchema; import com.tencent.supersonic.chat.api.pojo.SchemaElement; import com.tencent.supersonic.chat.api.pojo.request.ItemVisibility; @@ -63,7 +63,7 @@ public class ConfigServiceImpl implements ConfigService { @Autowired private ApplicationEventPublisher applicationEventPublisher; - private SemanticLayer semanticLayer = ComponentFactory.getSemanticLayer(); + private SemanticInterpreter semanticInterpreter = ComponentFactory.getSemanticLayer(); public ConfigServiceImpl(ChatConfigRepository chatConfigRepository, @@ -353,7 +353,7 @@ public class ConfigServiceImpl implements ConfigService { @Override public List getAllChatRichConfig() { List chatConfigRichInfoList = new ArrayList<>(); - List modelSchemas = semanticLayer.getModelSchema(); + List modelSchemas = semanticInterpreter.getModelSchema(); modelSchemas.stream().forEach(modelSchema -> { ChatConfigRichResp chatConfigRichInfo = getConfigRichInfo(modelSchema.getModel().getId()); if (Objects.nonNull(chatConfigRichInfo)) { diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/service/impl/PluginServiceImpl.java b/chat/core/src/main/java/com/tencent/supersonic/chat/service/impl/PluginServiceImpl.java index 601cc8e67..49add3b0d 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/service/impl/PluginServiceImpl.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/service/impl/PluginServiceImpl.java @@ -2,7 +2,7 @@ package com.tencent.supersonic.chat.service.impl; import com.google.common.collect.Lists; import com.tencent.supersonic.auth.api.authentication.pojo.User; -import com.tencent.supersonic.chat.api.component.SemanticLayer; +import com.tencent.supersonic.chat.api.component.SemanticInterpreter; import com.tencent.supersonic.chat.api.pojo.request.PluginQueryReq; import com.tencent.supersonic.chat.persistence.dataobject.PluginDO; import com.tencent.supersonic.chat.persistence.dataobject.PluginDOExample; @@ -152,8 +152,8 @@ public class PluginServiceImpl implements PluginService { } private List authCheck(List plugins, User user) { - SemanticLayer semanticLayer = ComponentFactory.getSemanticLayer(); - List modelIdAuthorized = semanticLayer.getModelList(AuthType.ADMIN, null, user).stream() + SemanticInterpreter semanticInterpreter = ComponentFactory.getSemanticLayer(); + List modelIdAuthorized = semanticInterpreter.getModelList(AuthType.ADMIN, null, user).stream() .map(ModelResp::getId).collect(Collectors.toList()); plugins = plugins.stream().filter(plugin -> { if (CollectionUtils.isEmpty(plugin.getModelList()) || plugin.isContainsAllModel()) { 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 975aeedd8..a4c12d733 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 @@ -4,7 +4,7 @@ package com.tencent.supersonic.chat.service.impl; import com.google.common.collect.Lists; import com.tencent.supersonic.auth.api.authentication.pojo.User; import com.tencent.supersonic.chat.api.component.SchemaMapper; -import com.tencent.supersonic.chat.api.component.SemanticLayer; +import com.tencent.supersonic.chat.api.component.SemanticInterpreter; import com.tencent.supersonic.chat.api.component.SemanticQuery; import com.tencent.supersonic.chat.api.component.SemanticParser; import com.tencent.supersonic.chat.api.pojo.ChatContext; @@ -407,8 +407,8 @@ public class QueryServiceImpl implements QueryService { dimensionFilters.add(dimensionFilter); queryStructReq.setDimensionFilters(dimensionFilters); } - SemanticLayer semanticLayer = ComponentFactory.getSemanticLayer(); - QueryResultWithSchemaResp queryResultWithSchemaResp = semanticLayer.queryByStruct(queryStructReq, user); + SemanticInterpreter semanticInterpreter = ComponentFactory.getSemanticLayer(); + QueryResultWithSchemaResp queryResultWithSchemaResp = semanticInterpreter.queryByStruct(queryStructReq, user); Set dimensionValues = new HashSet<>(); queryResultWithSchemaResp.getResultList().removeIf(o -> { if (dimensionValues.contains(o.get(dimensionValueReq.getBizName()))) { diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/utils/ComponentFactory.java b/chat/core/src/main/java/com/tencent/supersonic/chat/utils/ComponentFactory.java index 1277356fc..3e2ea2a95 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/utils/ComponentFactory.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/utils/ComponentFactory.java @@ -1,7 +1,7 @@ package com.tencent.supersonic.chat.utils; import com.tencent.supersonic.chat.api.component.SchemaMapper; -import com.tencent.supersonic.chat.api.component.SemanticLayer; +import com.tencent.supersonic.chat.api.component.SemanticInterpreter; import com.tencent.supersonic.chat.api.component.SemanticParser; import com.tencent.supersonic.chat.api.component.SemanticCorrector; @@ -20,7 +20,7 @@ public class ComponentFactory { private static List semanticParsers = new ArrayList<>(); private static List dslCorrections = new ArrayList<>(); - private static SemanticLayer semanticLayer; + private static SemanticInterpreter semanticInterpreter; private static QuerySelector querySelector; private static ModelResolver modelResolver; public static List getSchemaMappers() { @@ -36,15 +36,15 @@ public class ComponentFactory { } - public static SemanticLayer getSemanticLayer() { - if (Objects.isNull(semanticLayer)) { - semanticLayer = init(SemanticLayer.class); + public static SemanticInterpreter getSemanticLayer() { + if (Objects.isNull(semanticInterpreter)) { + semanticInterpreter = init(SemanticInterpreter.class); } - return semanticLayer; + return semanticInterpreter; } - public static void setSemanticLayer(SemanticLayer layer) { - semanticLayer = layer; + public static void setSemanticLayer(SemanticInterpreter layer) { + semanticInterpreter = layer; } public static QuerySelector getQuerySelector() { diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/utils/DictMetaHelper.java b/chat/core/src/main/java/com/tencent/supersonic/chat/utils/DictMetaHelper.java index b685d25ff..124143c8f 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/utils/DictMetaHelper.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/utils/DictMetaHelper.java @@ -4,7 +4,7 @@ import static com.tencent.supersonic.common.pojo.Constants.DAY; import static com.tencent.supersonic.common.pojo.Constants.UNDERLINE; import com.github.pagehelper.PageInfo; -import com.tencent.supersonic.chat.api.component.SemanticLayer; +import com.tencent.supersonic.chat.api.component.SemanticInterpreter; import com.tencent.supersonic.chat.api.pojo.ModelSchema; import com.tencent.supersonic.chat.api.pojo.SchemaElement; import com.tencent.supersonic.chat.api.pojo.request.KnowledgeAdvancedConfig; @@ -44,7 +44,7 @@ public class DictMetaHelper { private String internalMetricNameSuffix; @Value("${model.internal.day.number:2}") private Integer internalMetricDays; - private SemanticLayer semanticLayer = ComponentFactory.getSemanticLayer(); + private SemanticInterpreter semanticInterpreter = ComponentFactory.getSemanticLayer(); public List generateDimValueInfo(DimValue2DictCommand dimValue2DictCommend) { List dimValueDOList = new ArrayList<>(); @@ -56,7 +56,7 @@ public class DictMetaHelper { dimValueDOList = generateDimValueInfoByModel(modelIds); break; case OFFLINE_FULL: - List modelSchemaDescList = semanticLayer.getModelSchema(); + List modelSchemaDescList = semanticInterpreter.getModelSchema(); if (CollectionUtils.isEmpty(modelSchemaDescList)) { break; } @@ -87,7 +87,7 @@ public class DictMetaHelper { return dimValueDOList; } - List modelSchemaDescList = semanticLayer.getModelSchema(); + List modelSchemaDescList = semanticInterpreter.getModelSchema(); if (CollectionUtils.isEmpty(modelSchemaDescList)) { return dimValueDOList; } @@ -116,7 +116,7 @@ public class DictMetaHelper { private List generateDimValueInfoByModel(Set modelIds) { List dimValueDOList = new ArrayList<>(); - List modelSchemaDescList = semanticLayer.getModelSchema(new ArrayList<>(modelIds)); + List modelSchemaDescList = semanticInterpreter.getModelSchema(new ArrayList<>(modelIds)); if (CollectionUtils.isEmpty(modelSchemaDescList)) { return dimValueDOList; } @@ -222,7 +222,7 @@ public class DictMetaHelper { private String queryDataSourceByDimId(Long id) { PageDimensionReq pageDimensionCmd = new PageDimensionReq(); pageDimensionCmd.setId(id.toString()); - PageInfo dimensionPage = semanticLayer.getDimensionPage(pageDimensionCmd); + PageInfo dimensionPage = semanticInterpreter.getDimensionPage(pageDimensionCmd); if (Objects.nonNull(dimensionPage) && !CollectionUtils.isEmpty(dimensionPage.getList())) { List list = dimensionPage.getList(); return list.get(0).getDatasourceBizName(); diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/utils/DictQueryHelper.java b/chat/core/src/main/java/com/tencent/supersonic/chat/utils/DictQueryHelper.java index 35102e1c0..494f472fd 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/utils/DictQueryHelper.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/utils/DictQueryHelper.java @@ -1,7 +1,7 @@ package com.tencent.supersonic.chat.utils; import com.tencent.supersonic.auth.api.authentication.pojo.User; -import com.tencent.supersonic.chat.api.component.SemanticLayer; +import com.tencent.supersonic.chat.api.component.SemanticInterpreter; import com.tencent.supersonic.chat.config.DefaultMetric; import com.tencent.supersonic.chat.config.Dim4Dict; import com.tencent.supersonic.common.pojo.QueryColumn; @@ -40,7 +40,7 @@ import static com.tencent.supersonic.common.pojo.Constants.UNDERLINE_DOUBLE; public class DictQueryHelper { private static final Long MAX_FREQUENCY = 99999999L; - private SemanticLayer semanticLayer = ComponentFactory.getSemanticLayer(); + private SemanticInterpreter semanticInterpreter = ComponentFactory.getSemanticLayer(); @Value("${dimension.multi.value.split:#}") private String dimMultiValueSplit; @Value("${dimension.value.show:50}") @@ -55,7 +55,7 @@ public class DictQueryHelper { List data = new ArrayList<>(); QueryStructReq queryStructCmd = generateQueryStructCmd(modelId, defaultMetricDesc, dim4Dict); try { - QueryResultWithSchemaResp queryResultWithColumns = semanticLayer.queryByStruct(queryStructCmd, user); + QueryResultWithSchemaResp queryResultWithColumns = semanticInterpreter.queryByStruct(queryStructCmd, user); log.info("fetchDimValueSingle sql:{}", queryResultWithColumns.getSql()); String nature = String.format("_%d_%d", modelId, dim4Dict.getDimId()); String dimNameRewrite = rewriteDimName(queryResultWithColumns.getColumns(), dim4Dict.getBizName()); diff --git a/chat/core/src/test/java/com/tencent/supersonic/chat/test/context/ContextTest.java b/chat/core/src/test/java/com/tencent/supersonic/chat/test/context/ContextTest.java index 12509c81b..aa06d458e 100644 --- a/chat/core/src/test/java/com/tencent/supersonic/chat/test/context/ContextTest.java +++ b/chat/core/src/test/java/com/tencent/supersonic/chat/test/context/ContextTest.java @@ -3,7 +3,7 @@ package com.tencent.supersonic.chat.test.context; import com.tencent.supersonic.chat.persistence.repository.impl.ChatContextRepositoryImpl; import com.tencent.supersonic.chat.utils.ComponentFactory; import com.tencent.supersonic.chat.persistence.mapper.ChatContextMapper; -import com.tencent.supersonic.knowledge.semantic.RemoteSemanticLayer; +import com.tencent.supersonic.knowledge.semantic.RemoteSemanticInterpreter; import com.tencent.supersonic.chat.test.ChatBizLauncher; import com.tencent.supersonic.semantic.model.domain.DimensionService; import com.tencent.supersonic.semantic.model.domain.ModelService; @@ -24,7 +24,7 @@ import org.springframework.web.client.RestTemplate; @MockBean(ModelService.class) @MockBean(ChatContextMapper.class) @MockBean(RestTemplate.class) -@MockBean(RemoteSemanticLayer.class) +@MockBean(RemoteSemanticInterpreter.class) @MockBean(ComponentFactory.class) //@MybatisTest //@AutoConfigureMybatis diff --git a/chat/core/src/test/java/com/tencent/supersonic/chat/test/context/MockBeansConfiguration.java b/chat/core/src/test/java/com/tencent/supersonic/chat/test/context/MockBeansConfiguration.java index 39c24e53b..76e85d1c2 100644 --- a/chat/core/src/test/java/com/tencent/supersonic/chat/test/context/MockBeansConfiguration.java +++ b/chat/core/src/test/java/com/tencent/supersonic/chat/test/context/MockBeansConfiguration.java @@ -4,8 +4,8 @@ import static org.mockito.ArgumentMatchers.anyList; import static org.mockito.ArgumentMatchers.anyLong; import static org.mockito.Mockito.when; +import com.tencent.supersonic.chat.api.component.SemanticInterpreter; import com.tencent.supersonic.chat.api.pojo.ChatContext; -import com.tencent.supersonic.chat.api.component.SemanticLayer; import com.tencent.supersonic.chat.api.pojo.response.ChatConfigResp; import com.tencent.supersonic.chat.config.DefaultMetric; import com.tencent.supersonic.chat.config.DefaultMetricInfo; @@ -41,8 +41,8 @@ public class MockBeansConfiguration { when(chatService.getOrCreateContext(1)).thenReturn(context); } - public static void buildHttpSemanticServiceImpl(SemanticLayer httpSemanticLayer, List dimensionDescs, - List metricDescs) { + public static void buildHttpSemanticServiceImpl(SemanticInterpreter httpSemanticInterpreter, List dimensionDescs, + List metricDescs) { DefaultMetric defaultMetricDesc = new DefaultMetric(); defaultMetricDesc.setUnit(3); defaultMetricDesc.setPeriod(Constants.DAY); diff --git a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/semantic/BaseSemanticLayer.java b/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/semantic/BaseSemanticInterpreter.java similarity index 93% rename from chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/semantic/BaseSemanticLayer.java rename to chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/semantic/BaseSemanticInterpreter.java index 479a5c5cc..08e6f0291 100644 --- a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/semantic/BaseSemanticLayer.java +++ b/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/semantic/BaseSemanticInterpreter.java @@ -2,7 +2,7 @@ package com.tencent.supersonic.knowledge.semantic; import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; -import com.tencent.supersonic.chat.api.component.SemanticLayer; +import com.tencent.supersonic.chat.api.component.SemanticInterpreter; import com.tencent.supersonic.chat.api.pojo.ModelSchema; import com.tencent.supersonic.semantic.api.model.response.ModelSchemaResp; import java.util.ArrayList; @@ -14,7 +14,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.util.CollectionUtils; @Slf4j -public abstract class BaseSemanticLayer implements SemanticLayer { +public abstract class BaseSemanticInterpreter implements SemanticInterpreter { protected final Cache> modelSchemaCache = CacheBuilder.newBuilder().expireAfterWrite(10, TimeUnit.SECONDS).build(); diff --git a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/semantic/LocalSemanticLayer.java b/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/semantic/LocalSemanticInterpreter.java similarity index 98% rename from chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/semantic/LocalSemanticLayer.java rename to chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/semantic/LocalSemanticInterpreter.java index 6cff20149..00b0a5e42 100644 --- a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/semantic/LocalSemanticLayer.java +++ b/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/semantic/LocalSemanticInterpreter.java @@ -29,7 +29,7 @@ import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; @Slf4j -public class LocalSemanticLayer extends BaseSemanticLayer { +public class LocalSemanticInterpreter extends BaseSemanticInterpreter { private SchemaService schemaService; private DimensionService dimensionService; diff --git a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/semantic/RemoteSemanticLayer.java b/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/semantic/RemoteSemanticInterpreter.java similarity index 99% rename from chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/semantic/RemoteSemanticLayer.java rename to chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/semantic/RemoteSemanticInterpreter.java index c18479162..9a28cffe6 100644 --- a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/semantic/RemoteSemanticLayer.java +++ b/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/semantic/RemoteSemanticInterpreter.java @@ -52,7 +52,7 @@ import org.springframework.web.client.RestTemplate; import org.springframework.web.util.UriComponentsBuilder; @Slf4j -public class RemoteSemanticLayer extends BaseSemanticLayer { +public class RemoteSemanticInterpreter extends BaseSemanticInterpreter { private S2ThreadContext s2ThreadContext; diff --git a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/service/SchemaService.java b/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/service/SchemaService.java index 6bc575e62..56b74e3d6 100644 --- a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/service/SchemaService.java +++ b/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/service/SchemaService.java @@ -3,7 +3,7 @@ package com.tencent.supersonic.knowledge.service; import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; -import com.tencent.supersonic.chat.api.component.SemanticLayer; +import com.tencent.supersonic.chat.api.component.SemanticInterpreter; import com.tencent.supersonic.chat.api.pojo.ModelSchema; import com.tencent.supersonic.chat.api.pojo.SemanticSchema; import com.tencent.supersonic.knowledge.utils.ComponentFactory; @@ -19,7 +19,7 @@ public class SchemaService { public static final String ALL_CACHE = "all"; private static final Integer META_CACHE_TIME = 2; - private SemanticLayer semanticLayer = ComponentFactory.getSemanticLayer(); + private SemanticInterpreter semanticInterpreter = ComponentFactory.getSemanticLayer(); private LoadingCache cache = CacheBuilder.newBuilder() .expireAfterWrite(META_CACHE_TIME, TimeUnit.MINUTES) @@ -28,13 +28,13 @@ public class SchemaService { @Override public SemanticSchema load(String key) { log.info("load getDomainSchemaInfo cache [{}]", key); - return new SemanticSchema(semanticLayer.getModelSchema()); + return new SemanticSchema(semanticInterpreter.getModelSchema()); } } ); public ModelSchema getModelSchema(Long id) { - return semanticLayer.getModelSchema(id, true); + return semanticInterpreter.getModelSchema(id, true); } public SemanticSchema getSemanticSchema() { diff --git a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/service/WordService.java b/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/service/WordService.java index 1aaece555..b904c1a20 100644 --- a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/service/WordService.java +++ b/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/service/WordService.java @@ -1,6 +1,6 @@ package com.tencent.supersonic.knowledge.service; -import com.tencent.supersonic.chat.api.component.SemanticLayer; +import com.tencent.supersonic.chat.api.component.SemanticInterpreter; import com.tencent.supersonic.chat.api.pojo.SchemaElement; import com.tencent.supersonic.chat.api.pojo.SemanticSchema; import com.tencent.supersonic.knowledge.dictionary.DictWord; @@ -22,8 +22,8 @@ public class WordService { private List preDictWords = new ArrayList<>(); public List getAllDictWords() { - SemanticLayer semanticLayer = ComponentFactory.getSemanticLayer(); - SemanticSchema semanticSchema = new SemanticSchema(semanticLayer.getModelSchema()); + SemanticInterpreter semanticInterpreter = ComponentFactory.getSemanticLayer(); + SemanticSchema semanticSchema = new SemanticSchema(semanticInterpreter.getModelSchema()); List words = new ArrayList<>(); diff --git a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/utils/ComponentFactory.java b/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/utils/ComponentFactory.java index 532f58203..8b0a88183 100644 --- a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/utils/ComponentFactory.java +++ b/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/utils/ComponentFactory.java @@ -1,6 +1,6 @@ package com.tencent.supersonic.knowledge.utils; -import com.tencent.supersonic.chat.api.component.SemanticLayer; +import com.tencent.supersonic.chat.api.component.SemanticInterpreter; import org.springframework.core.io.support.SpringFactoriesLoader; import java.util.List; @@ -8,17 +8,17 @@ import java.util.Objects; public class ComponentFactory { - private static SemanticLayer semanticLayer; + private static SemanticInterpreter semanticInterpreter; - public static SemanticLayer getSemanticLayer() { - if (Objects.isNull(semanticLayer)) { - semanticLayer = init(SemanticLayer.class); + public static SemanticInterpreter getSemanticLayer() { + if (Objects.isNull(semanticInterpreter)) { + semanticInterpreter = init(SemanticInterpreter.class); } - return semanticLayer; + return semanticInterpreter; } - public static void setSemanticLayer(SemanticLayer layer) { - semanticLayer = layer; + public static void setSemanticLayer(SemanticInterpreter layer) { + semanticInterpreter = layer; } private static List init(Class factoryType, List list) { diff --git a/docs/images/supersonic_components.png b/docs/images/supersonic_components.png index 07ebe188d..8ba377267 100644 Binary files a/docs/images/supersonic_components.png and b/docs/images/supersonic_components.png differ diff --git a/launchers/chat/src/main/resources/META-INF/spring.factories b/launchers/chat/src/main/resources/META-INF/spring.factories index dba424313..30aa701fc 100644 --- a/launchers/chat/src/main/resources/META-INF/spring.factories +++ b/launchers/chat/src/main/resources/META-INF/spring.factories @@ -14,8 +14,8 @@ com.tencent.supersonic.chat.api.component.SemanticParser=\ com.tencent.supersonic.chat.parser.plugin.function.FunctionBasedParser -com.tencent.supersonic.chat.api.component.SemanticLayer=\ - com.tencent.supersonic.knowledge.semantic.RemoteSemanticLayer +com.tencent.supersonic.chat.api.component.SemanticInterpreter=\ + com.tencent.supersonic.knowledge.semantic.RemoteSemanticInterpreter com.tencent.supersonic.chat.query.QuerySelector=\ com.tencent.supersonic.chat.query.HeuristicQuerySelector diff --git a/launchers/standalone/src/main/resources/META-INF/spring.factories b/launchers/standalone/src/main/resources/META-INF/spring.factories index c9f1ddf99..1054e36b0 100644 --- a/launchers/standalone/src/main/resources/META-INF/spring.factories +++ b/launchers/standalone/src/main/resources/META-INF/spring.factories @@ -15,8 +15,8 @@ com.tencent.supersonic.chat.api.component.SemanticParser=\ com.tencent.supersonic.chat.parser.plugin.function.FunctionBasedParser -com.tencent.supersonic.chat.api.component.SemanticLayer=\ - com.tencent.supersonic.knowledge.semantic.LocalSemanticLayer +com.tencent.supersonic.chat.api.component.SemanticInterpreter=\ + com.tencent.supersonic.knowledge.semantic.LocalSemanticInterpreter com.tencent.supersonic.chat.query.QuerySelector=\ com.tencent.supersonic.chat.query.HeuristicQuerySelector diff --git a/launchers/standalone/src/test/resources/META-INF/spring.factories b/launchers/standalone/src/test/resources/META-INF/spring.factories index 953675827..abd0aaf93 100644 --- a/launchers/standalone/src/test/resources/META-INF/spring.factories +++ b/launchers/standalone/src/test/resources/META-INF/spring.factories @@ -13,8 +13,8 @@ com.tencent.supersonic.chat.api.component.SemanticParser=\ com.tencent.supersonic.chat.api.component.QueryProcessor=\ com.tencent.supersonic.chat.application.processor.SemanticQueryProcessor -com.tencent.supersonic.chat.api.component.SemanticLayer=\ - com.tencent.supersonic.knowledge.semantic.LocalSemanticLayer +com.tencent.supersonic.chat.api.component.SemanticInterpreter=\ + com.tencent.supersonic.knowledge.semantic.LocalSemanticInterpreter com.tencent.supersonic.chat.query.QuerySelector=\ com.tencent.supersonic.chat.query.HeuristicQuerySelector