mirror of
https://github.com/tencentmusic/supersonic.git
synced 2025-12-20 06:34:55 +00:00
[release][project] supersonic 0.7.3 version backend update (#40)
* [improvement] add some features * [improvement] revise CHANGELOG --------- Co-authored-by: zuopengge <hwzuopengge@tencent.com>
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
binDir=$(cd "$(dirname "$0")"; pwd)
|
||||
baseDir=$(cd "$binDir/.." && pwd -P)
|
||||
baseDir=$(readlink -f $binDir/../)
|
||||
libDir=$baseDir/lib
|
||||
confDir=$baseDir/conf
|
||||
webDir=$baseDir/webapp
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
binDir=$(cd "$(dirname "$0")"; pwd)
|
||||
baseDir=$(cd "$binDir/.." && pwd -P)
|
||||
baseDir=$(readlink -f $binDir/../)
|
||||
confDir=$baseDir/conf
|
||||
source ${baseDir}/bin/env.sh
|
||||
|
||||
|
||||
@@ -17,10 +17,13 @@ import com.tencent.supersonic.chat.api.pojo.request.QueryReq;
|
||||
import com.tencent.supersonic.chat.api.pojo.request.RecommendedQuestionReq;
|
||||
import com.tencent.supersonic.chat.api.pojo.response.ParseResp;
|
||||
import com.tencent.supersonic.chat.plugin.Plugin;
|
||||
import com.tencent.supersonic.chat.plugin.PluginParseConfig;
|
||||
import com.tencent.supersonic.chat.query.plugin.ParamOption;
|
||||
import com.tencent.supersonic.chat.query.plugin.WebBase;
|
||||
import com.tencent.supersonic.chat.service.*;
|
||||
import com.tencent.supersonic.chat.service.QueryService;
|
||||
import com.tencent.supersonic.chat.service.ChatService;
|
||||
import com.tencent.supersonic.chat.service.ConfigService;
|
||||
import com.tencent.supersonic.chat.service.PluginService;
|
||||
import com.tencent.supersonic.chat.service.AgentService;
|
||||
import com.tencent.supersonic.common.util.JsonUtil;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
@@ -35,33 +38,35 @@ import org.springframework.stereotype.Component;
|
||||
@Component
|
||||
@Slf4j
|
||||
public class ConfigureDemo implements ApplicationListener<ApplicationReadyEvent> {
|
||||
|
||||
private User user = User.getFakeUser();
|
||||
@Qualifier("chatQueryService")
|
||||
@Autowired
|
||||
private QueryService queryService;
|
||||
@Autowired
|
||||
private ChatService chatService;
|
||||
@Autowired
|
||||
protected ConfigService configService;
|
||||
private ConfigService configService;
|
||||
@Autowired
|
||||
private PluginService pluginService;
|
||||
@Autowired
|
||||
private AgentService agentService;
|
||||
|
||||
private User user = User.getFakeUser();
|
||||
|
||||
private void parseAndExecute(int chatId, String queryText) throws Exception {
|
||||
QueryReq queryRequest = new QueryReq();
|
||||
queryRequest.setQueryText(queryText);
|
||||
queryRequest.setChatId(chatId);
|
||||
queryRequest.setAgentId(1);
|
||||
queryRequest.setUser(User.getFakeUser());
|
||||
ParseResp parseResp = queryService.performParsing(queryRequest);
|
||||
|
||||
ExecuteQueryReq executeReq = new ExecuteQueryReq();
|
||||
executeReq.setQueryId(parseResp.getQueryId());
|
||||
executeReq.setParseId(parseResp.getSelectedParses().get(0).getId());
|
||||
executeReq.setQueryText(queryRequest.getQueryText());
|
||||
executeReq.setParseInfo(parseResp.getSelectedParses().get(0));
|
||||
executeReq.setChatId(parseResp.getChatId());
|
||||
executeReq.setUser(queryRequest.getUser());
|
||||
executeReq.setAgentId(1);
|
||||
queryService.performExecution(executeReq);
|
||||
}
|
||||
|
||||
@@ -87,38 +92,39 @@ public class ConfigureDemo implements ApplicationListener<ApplicationReadyEvent>
|
||||
|
||||
ChatDetailConfigReq chatDetailConfig = new ChatDetailConfigReq();
|
||||
ChatDefaultConfigReq chatDefaultConfigDetail = new ChatDefaultConfigReq();
|
||||
List<Long> dimensionIds_0 = Arrays.asList(1L, 2L);
|
||||
List<Long> metricIds_0 = Arrays.asList(1L);
|
||||
chatDefaultConfigDetail.setDimensionIds(dimensionIds_0);
|
||||
chatDefaultConfigDetail.setMetricIds(metricIds_0);
|
||||
List<Long> dimensionIds0 = Arrays.asList(1L, 2L);
|
||||
List<Long> metricIds0 = Arrays.asList(1L);
|
||||
chatDefaultConfigDetail.setDimensionIds(dimensionIds0);
|
||||
chatDefaultConfigDetail.setMetricIds(metricIds0);
|
||||
chatDefaultConfigDetail.setUnit(7);
|
||||
chatDefaultConfigDetail.setPeriod("DAY");
|
||||
chatDetailConfig.setChatDefaultConfig(chatDefaultConfigDetail);
|
||||
ItemVisibility visibility_0 = new ItemVisibility();
|
||||
chatDetailConfig.setVisibility(visibility_0);
|
||||
ItemVisibility visibility0 = new ItemVisibility();
|
||||
chatDetailConfig.setVisibility(visibility0);
|
||||
chatConfigBaseReq.setChatDetailConfig(chatDetailConfig);
|
||||
|
||||
|
||||
ChatAggConfigReq chatAggConfig = new ChatAggConfigReq();
|
||||
ChatDefaultConfigReq chatDefaultConfigAgg = new ChatDefaultConfigReq();
|
||||
List<Long> dimensionIds_1 = Arrays.asList(1L, 2L);
|
||||
List<Long> metricIds_1 = Arrays.asList(1L);
|
||||
chatDefaultConfigAgg.setDimensionIds(dimensionIds_1);
|
||||
chatDefaultConfigAgg.setMetricIds(metricIds_1);
|
||||
List<Long> dimensionIds1 = Arrays.asList(1L, 2L);
|
||||
List<Long> metricIds1 = Arrays.asList(1L);
|
||||
chatDefaultConfigAgg.setDimensionIds(dimensionIds1);
|
||||
chatDefaultConfigAgg.setMetricIds(metricIds1);
|
||||
chatDefaultConfigAgg.setUnit(7);
|
||||
chatDefaultConfigAgg.setPeriod("DAY");
|
||||
chatDefaultConfigAgg.setTimeMode(ChatDefaultConfigReq.TimeMode.RECENT);
|
||||
chatAggConfig.setChatDefaultConfig(chatDefaultConfigAgg);
|
||||
ItemVisibility visibility_1 = new ItemVisibility();
|
||||
chatAggConfig.setVisibility(visibility_1);
|
||||
ItemVisibility visibility1 = new ItemVisibility();
|
||||
chatAggConfig.setVisibility(visibility1);
|
||||
chatConfigBaseReq.setChatAggConfig(chatAggConfig);
|
||||
|
||||
List<RecommendedQuestionReq> recommendedQuestions = new ArrayList<>();
|
||||
RecommendedQuestionReq recommendedQuestionReq_0 = new RecommendedQuestionReq("超音数访问次数");
|
||||
RecommendedQuestionReq recommendedQuestionReq_1 = new RecommendedQuestionReq("超音数访问人数");
|
||||
RecommendedQuestionReq recommendedQuestionReq_2 = new RecommendedQuestionReq("超音数按部门访问次数");
|
||||
recommendedQuestions.add(recommendedQuestionReq_0);
|
||||
recommendedQuestions.add(recommendedQuestionReq_1);
|
||||
recommendedQuestions.add(recommendedQuestionReq_2);
|
||||
RecommendedQuestionReq recommendedQuestionReq0 = new RecommendedQuestionReq("超音数访问次数");
|
||||
RecommendedQuestionReq recommendedQuestionReq1 = new RecommendedQuestionReq("超音数访问人数");
|
||||
RecommendedQuestionReq recommendedQuestionReq2 = new RecommendedQuestionReq("超音数按部门访问次数");
|
||||
recommendedQuestions.add(recommendedQuestionReq0);
|
||||
recommendedQuestions.add(recommendedQuestionReq1);
|
||||
recommendedQuestions.add(recommendedQuestionReq2);
|
||||
chatConfigBaseReq.setRecommendedQuestions(recommendedQuestions);
|
||||
|
||||
configService.addConfig(chatConfigBaseReq, user);
|
||||
@@ -130,29 +136,30 @@ public class ConfigureDemo implements ApplicationListener<ApplicationReadyEvent>
|
||||
|
||||
ChatDetailConfigReq chatDetailConfig = new ChatDetailConfigReq();
|
||||
ChatDefaultConfigReq chatDefaultConfigDetail = new ChatDefaultConfigReq();
|
||||
List<Long> dimensionIds_0 = Arrays.asList(4L, 5L, 6L, 7L);
|
||||
List<Long> metricIds_0 = Arrays.asList(4L);
|
||||
chatDefaultConfigDetail.setDimensionIds(dimensionIds_0);
|
||||
chatDefaultConfigDetail.setMetricIds(metricIds_0);
|
||||
List<Long> dimensionIds0 = Arrays.asList(4L, 5L, 6L, 7L);
|
||||
List<Long> metricIds0 = Arrays.asList(4L);
|
||||
chatDefaultConfigDetail.setDimensionIds(dimensionIds0);
|
||||
chatDefaultConfigDetail.setMetricIds(metricIds0);
|
||||
chatDefaultConfigDetail.setUnit(7);
|
||||
chatDefaultConfigDetail.setPeriod("DAY");
|
||||
chatDetailConfig.setChatDefaultConfig(chatDefaultConfigDetail);
|
||||
ItemVisibility visibility_0 = new ItemVisibility();
|
||||
chatDetailConfig.setVisibility(visibility_0);
|
||||
ItemVisibility visibility0 = new ItemVisibility();
|
||||
chatDetailConfig.setVisibility(visibility0);
|
||||
chatConfigBaseReq.setChatDetailConfig(chatDetailConfig);
|
||||
|
||||
|
||||
ChatAggConfigReq chatAggConfig = new ChatAggConfigReq();
|
||||
ChatDefaultConfigReq chatDefaultConfigAgg = new ChatDefaultConfigReq();
|
||||
List<Long> dimensionIds_1 = Arrays.asList(4L, 5L, 6L, 7L);
|
||||
List<Long> metricIds_1 = Arrays.asList(4L);
|
||||
chatDefaultConfigAgg.setDimensionIds(dimensionIds_1);
|
||||
chatDefaultConfigAgg.setMetricIds(metricIds_1);
|
||||
List<Long> dimensionIds1 = Arrays.asList(4L, 5L, 6L, 7L);
|
||||
List<Long> metricIds1 = Arrays.asList(4L);
|
||||
chatDefaultConfigAgg.setDimensionIds(dimensionIds1);
|
||||
chatDefaultConfigAgg.setMetricIds(metricIds1);
|
||||
chatDefaultConfigAgg.setUnit(7);
|
||||
chatDefaultConfigAgg.setPeriod("DAY");
|
||||
chatDefaultConfigAgg.setTimeMode(ChatDefaultConfigReq.TimeMode.RECENT);
|
||||
chatAggConfig.setChatDefaultConfig(chatDefaultConfigAgg);
|
||||
ItemVisibility visibility_1 = new ItemVisibility();
|
||||
chatAggConfig.setVisibility(visibility_1);
|
||||
ItemVisibility visibility1 = new ItemVisibility();
|
||||
chatAggConfig.setVisibility(visibility1);
|
||||
chatConfigBaseReq.setChatAggConfig(chatAggConfig);
|
||||
|
||||
List<RecommendedQuestionReq> recommendedQuestions = new ArrayList<>();
|
||||
@@ -162,12 +169,12 @@ public class ConfigureDemo implements ApplicationListener<ApplicationReadyEvent>
|
||||
}
|
||||
|
||||
private void addPlugin_1() {
|
||||
Plugin plugin_1 = new Plugin();
|
||||
plugin_1.setType("WEB_PAGE");
|
||||
plugin_1.setModelList(Arrays.asList(1L));
|
||||
plugin_1.setPattern("访问情况");
|
||||
plugin_1.setParseModeConfig(null);
|
||||
plugin_1.setName("访问情况");
|
||||
Plugin plugin1 = new Plugin();
|
||||
plugin1.setType("WEB_PAGE");
|
||||
plugin1.setModelList(Arrays.asList(1L));
|
||||
plugin1.setPattern("访问情况");
|
||||
plugin1.setParseModeConfig(null);
|
||||
plugin1.setName("访问情况");
|
||||
WebBase webBase = new WebBase();
|
||||
webBase.setUrl("www.test.com");
|
||||
ParamOption paramOption = new ParamOption();
|
||||
@@ -177,23 +184,23 @@ public class ConfigureDemo implements ApplicationListener<ApplicationReadyEvent>
|
||||
paramOption.setModelId(1L);
|
||||
List<ParamOption> paramOptions = Arrays.asList(paramOption);
|
||||
webBase.setParamOptions(paramOptions);
|
||||
plugin_1.setConfig(JsonUtil.toString(webBase));
|
||||
plugin1.setConfig(JsonUtil.toString(webBase));
|
||||
|
||||
pluginService.createPlugin(plugin_1, user);
|
||||
pluginService.createPlugin(plugin1, user);
|
||||
}
|
||||
|
||||
|
||||
private void addAgent() {
|
||||
Agent agent = new Agent();
|
||||
agent.setId(1);
|
||||
agent.setName("查信息");
|
||||
agent.setDescription("查信息");
|
||||
agent.setName("查指标");
|
||||
agent.setDescription("查指标");
|
||||
agent.setStatus(1);
|
||||
agent.setEnableSearch(1);
|
||||
agent.setExamples(Lists.newArrayList("超音数访问次数", "超音数访问人数", "alice 停留时长"));
|
||||
AgentConfig agentConfig = new AgentConfig();
|
||||
RuleQueryTool ruleQueryTool = new RuleQueryTool();
|
||||
ruleQueryTool.setType(AgentToolType.RULE);
|
||||
ruleQueryTool.setModelIds(Lists.newArrayList(1L, 2L));
|
||||
ruleQueryTool.setQueryModes(Lists.newArrayList(
|
||||
"ENTITY_DETAIL", "ENTITY_LIST_FILTER", "ENTITY_ID", "METRIC_ENTITY",
|
||||
"METRIC_FILTER", "METRIC_GROUPBY", "METRIC_MODEL", "METRIC_ORDERBY"
|
||||
|
||||
@@ -3,30 +3,38 @@ com.tencent.supersonic.chat.api.component.SchemaMapper=\
|
||||
com.tencent.supersonic.chat.mapper.FuzzyNameMapper, \
|
||||
com.tencent.supersonic.chat.mapper.QueryFilterMapper, \
|
||||
com.tencent.supersonic.chat.mapper.EntityMapper
|
||||
|
||||
com.tencent.supersonic.chat.api.component.SemanticParser=\
|
||||
com.tencent.supersonic.chat.parser.rule.QueryModeParser, \
|
||||
com.tencent.supersonic.chat.parser.rule.ContextInheritParser, \
|
||||
com.tencent.supersonic.chat.parser.rule.AgentCheckParser, \
|
||||
com.tencent.supersonic.chat.parser.rule.TimeRangeParser, \
|
||||
com.tencent.supersonic.chat.parser.rule.AggregateTypeParser, \
|
||||
com.tencent.supersonic.chat.parser.llm.dsl.LLMDSLParser, \
|
||||
com.tencent.supersonic.chat.parser.embedding.EmbeddingBasedParser, \
|
||||
com.tencent.supersonic.chat.parser.function.FunctionBasedParser
|
||||
com.tencent.supersonic.chat.parser.llm.dsl.LLMDslParser, \
|
||||
com.tencent.supersonic.chat.parser.plugin.embedding.EmbeddingBasedParser, \
|
||||
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.query.QuerySelector=\
|
||||
com.tencent.supersonic.chat.query.HeuristicQuerySelector
|
||||
com.tencent.supersonic.chat.parser.function.ModelResolver=\
|
||||
com.tencent.supersonic.chat.parser.function.HeuristicModelResolver
|
||||
|
||||
com.tencent.supersonic.chat.parser.plugin.function.ModelResolver=\
|
||||
com.tencent.supersonic.chat.parser.plugin.function.HeuristicModelResolver
|
||||
|
||||
com.tencent.supersonic.auth.authentication.interceptor.AuthenticationInterceptor=\
|
||||
com.tencent.supersonic.auth.authentication.interceptor.DefaultAuthenticationInterceptor
|
||||
|
||||
com.tencent.supersonic.auth.api.authentication.adaptor.UserAdaptor=\
|
||||
com.tencent.supersonic.auth.authentication.adaptor.DefaultUserAdaptor
|
||||
|
||||
com.tencent.supersonic.chat.api.component.DSLOptimizer=\
|
||||
com.tencent.supersonic.chat.query.dsl.optimizer.DateFieldCorrector, \
|
||||
com.tencent.supersonic.chat.query.dsl.optimizer.FieldCorrector, \
|
||||
com.tencent.supersonic.chat.query.dsl.optimizer.FunctionCorrector, \
|
||||
com.tencent.supersonic.chat.query.dsl.optimizer.TableNameCorrector, \
|
||||
com.tencent.supersonic.chat.query.dsl.optimizer.QueryFilterAppend, \
|
||||
com.tencent.supersonic.chat.query.dsl.optimizer.SelectFieldAppendCorrector
|
||||
com.tencent.supersonic.chat.api.component.SemanticCorrector=\
|
||||
com.tencent.supersonic.chat.corrector.DateFieldCorrector, \
|
||||
com.tencent.supersonic.chat.corrector.FieldValueCorrector, \
|
||||
com.tencent.supersonic.chat.corrector.FieldCorrector, \
|
||||
com.tencent.supersonic.chat.corrector.FunctionCorrector, \
|
||||
com.tencent.supersonic.chat.corrector.TableNameCorrector, \
|
||||
com.tencent.supersonic.chat.corrector.QueryFilterAppend, \
|
||||
com.tencent.supersonic.chat.corrector.SelectFieldAppendCorrector
|
||||
|
||||
@@ -28,5 +28,8 @@ semantic:
|
||||
url:
|
||||
prefix: http://127.0.0.1:9081
|
||||
|
||||
time:
|
||||
threshold: 100
|
||||
|
||||
mybatis:
|
||||
mapper-locations=classpath:mappers/custom/*.xml,classpath*:/mappers/*.xml
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,5 +1,4 @@
|
||||
alter table s2_domain
|
||||
add column `entity` varchar(500) DEFAULT NULL COMMENT '主题域实体信息';
|
||||
alter table s2_domain add column `entity`varchar(500) DEFAULT NULL COMMENT '主题域实体信息';
|
||||
|
||||
|
||||
--20230808
|
||||
@@ -9,19 +8,19 @@ create table s2_model
|
||||
(
|
||||
id bigint auto_increment
|
||||
primary key,
|
||||
name varchar(100) null,
|
||||
name varchar(100) null,
|
||||
biz_name varchar(100) null,
|
||||
domain_id bigint null,
|
||||
domain_id bigint null,
|
||||
viewer varchar(500) null,
|
||||
view_org varchar(500) null,
|
||||
view_org varchar(500) null,
|
||||
admin varchar(500) null,
|
||||
admin_org varchar(500) null,
|
||||
is_open int null,
|
||||
admin_org varchar(500) null,
|
||||
is_open int null,
|
||||
created_by varchar(100) null,
|
||||
created_at datetime null,
|
||||
updated_by varchar(100) null,
|
||||
updated_at datetime null,
|
||||
entity text null
|
||||
created_at datetime null,
|
||||
updated_by varchar(100) null,
|
||||
updated_at datetime null,
|
||||
entity text null
|
||||
) collate = utf8_unicode_ci;
|
||||
|
||||
alter table s2_datasource change column domain_id model_id bigint;
|
||||
@@ -31,8 +30,11 @@ alter table s2_datasource_rela change column domain_id model_id bigint;
|
||||
alter table s2_view_info change column domain_id model_id bigint;
|
||||
alter table s2_domain_extend change column domain_id model_id bigint;
|
||||
alter table s2_chat_config change column domain_id model_id bigint;
|
||||
alter table s2_plugin change column domain model varchar (100);
|
||||
alter table s2_plugin change column domain model varchar(100);
|
||||
alter table s2_query_stat_info change column domain_id model_id bigint;
|
||||
|
||||
update s2_plugin
|
||||
set config = replace(config, 'domain', 'model');
|
||||
update s2_plugin set config = replace(config, 'domain', 'model');
|
||||
|
||||
--20230823
|
||||
alter table s2_chat_query add column agent_id int after question_id;
|
||||
alter table s2_chat_query change column query_response query_result mediumtext;
|
||||
|
||||
@@ -51,6 +51,8 @@ public class BaseQueryTest {
|
||||
ParseResp parseResp = submitParse(queryText);
|
||||
|
||||
ExecuteQueryReq request = new ExecuteQueryReq();
|
||||
request.setQueryId(parseResp.getQueryId());
|
||||
request.setParseId(parseResp.getSelectedParses().get(0).getId());
|
||||
request.setChatId(parseResp.getChatId());
|
||||
request.setQueryText(parseResp.getQueryText());
|
||||
request.setUser(DataUtils.getUser());
|
||||
@@ -63,6 +65,8 @@ public class BaseQueryTest {
|
||||
ParseResp parseResp = submitParse(queryText);
|
||||
|
||||
ExecuteQueryReq request = new ExecuteQueryReq();
|
||||
request.setQueryId(parseResp.getQueryId());
|
||||
request.setParseId(parseResp.getSelectedParses().get(0).getId());
|
||||
request.setChatId(parseResp.getChatId());
|
||||
request.setQueryText(parseResp.getQueryText());
|
||||
request.setUser(DataUtils.getUser());
|
||||
|
||||
@@ -18,7 +18,7 @@ import org.junit.Test;
|
||||
public class EntityQueryTest extends BaseQueryTest {
|
||||
|
||||
@Test
|
||||
public void queryTest_METRIC_ENTITY_QUERY() throws Exception {
|
||||
public void queryTest_metric_entity_query() throws Exception {
|
||||
QueryResult actualResult = submitNewChat("艺人周杰伦的播放量");
|
||||
|
||||
QueryResult expectedResult = new QueryResult();
|
||||
@@ -41,7 +41,7 @@ public class EntityQueryTest extends BaseQueryTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void queryTest_ENTITY_LIST_FILTER() throws Exception {
|
||||
public void queryTest_entity_list_filter() throws Exception {
|
||||
QueryResult actualResult = submitNewChat("爱情、流行类型的艺人");
|
||||
|
||||
QueryResult expectedResult = new QueryResult();
|
||||
|
||||
@@ -4,9 +4,9 @@ import com.alibaba.fastjson.JSONObject;
|
||||
import com.tencent.supersonic.StandaloneLauncher;
|
||||
import com.tencent.supersonic.chat.api.pojo.request.QueryReq;
|
||||
import com.tencent.supersonic.chat.api.pojo.response.QueryResult;
|
||||
import com.tencent.supersonic.chat.parser.embedding.EmbeddingConfig;
|
||||
import com.tencent.supersonic.chat.parser.plugin.embedding.EmbeddingConfig;
|
||||
import com.tencent.supersonic.chat.plugin.PluginManager;
|
||||
import com.tencent.supersonic.chat.query.metricInterpret.LLmAnswerResp;
|
||||
import com.tencent.supersonic.chat.query.metricinterpret.LLmAnswerResp;
|
||||
import com.tencent.supersonic.chat.service.AgentService;
|
||||
import com.tencent.supersonic.chat.service.QueryService;
|
||||
import com.tencent.supersonic.util.DataUtils;
|
||||
@@ -44,13 +44,13 @@ public class MetricInterpretTest {
|
||||
MockConfiguration.mockAgent(agentService);
|
||||
MockConfiguration.mockEmbeddingUrl(embeddingConfig);
|
||||
LLmAnswerResp lLmAnswerResp = new LLmAnswerResp();
|
||||
lLmAnswerResp.setAssistant_message("alice最近在超音数的访问情况有增多");
|
||||
lLmAnswerResp.setAssistantMessage("alice最近在超音数的访问情况有增多");
|
||||
MockConfiguration.mockPluginManagerDoRequest(pluginManager, "answer_with_plugin_call",
|
||||
ResponseEntity.ok(JSONObject.toJSONString(lLmAnswerResp)));
|
||||
QueryReq queryReq = DataUtils.getQueryReqWithAgent(1000, "能不能帮我解读分析下最近alice在超音数的访问情况",
|
||||
DataUtils.getAgent().getId());
|
||||
QueryResult queryResult = queryService.executeQuery(queryReq);
|
||||
Assert.assertEquals(queryResult.getQueryResults().get(0).get("answer"), lLmAnswerResp.getAssistant_message());
|
||||
Assert.assertEquals(queryResult.getQueryResults().get(0).get("answer"), lLmAnswerResp.getAssistantMessage());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -21,16 +21,18 @@ import org.springframework.beans.BeanUtils;
|
||||
|
||||
import java.text.DateFormat;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.*;
|
||||
import java.util.List;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static com.tencent.supersonic.common.pojo.enums.AggregateTypeEnum.*;
|
||||
import static com.tencent.supersonic.common.pojo.enums.AggregateTypeEnum.SUM;
|
||||
import static com.tencent.supersonic.common.pojo.enums.AggregateTypeEnum.NONE;
|
||||
|
||||
|
||||
public class MetricQueryTest extends BaseQueryTest {
|
||||
|
||||
@Test
|
||||
public void queryTest_METRIC_FILTER() throws Exception {
|
||||
public void queryTest_metric_filter() throws Exception {
|
||||
QueryResult actualResult = submitNewChat("alice的访问次数");
|
||||
|
||||
QueryResult expectedResult = new QueryResult();
|
||||
@@ -52,7 +54,7 @@ public class MetricQueryTest extends BaseQueryTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void queryTest_METRIC_FILTER_with_agent() {
|
||||
public void queryTest_metric_filter_with_agent() {
|
||||
//agent only support METRIC_ENTITY, METRIC_FILTER
|
||||
MockConfiguration.mockAgent(agentService);
|
||||
ParseResp parseResp = submitParseWithAgent("alice的访问次数", DataUtils.getAgent().getId());
|
||||
@@ -63,7 +65,7 @@ public class MetricQueryTest extends BaseQueryTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void queryTest_METRIC_DOMAIN() throws Exception {
|
||||
public void queryTest_metric_domain() throws Exception {
|
||||
QueryResult actualResult = submitNewChat("超音数的访问次数");
|
||||
|
||||
QueryResult expectedResult = new QueryResult();
|
||||
@@ -82,7 +84,7 @@ public class MetricQueryTest extends BaseQueryTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void queryTest_METRIC_MODEL_with_agent() {
|
||||
public void queryTest_metric_model_with_agent() {
|
||||
//agent only support METRIC_ENTITY, METRIC_FILTER
|
||||
MockConfiguration.mockAgent(agentService);
|
||||
ParseResp parseResp = submitParseWithAgent("超音数的访问次数", DataUtils.getAgent().getId());
|
||||
@@ -92,7 +94,7 @@ public class MetricQueryTest extends BaseQueryTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void queryTest_METRIC_GROUPBY() throws Exception {
|
||||
public void queryTest_metric_groupby() throws Exception {
|
||||
QueryResult actualResult = submitNewChat("超音数各部门的访问次数");
|
||||
|
||||
QueryResult expectedResult = new QueryResult();
|
||||
@@ -112,7 +114,7 @@ public class MetricQueryTest extends BaseQueryTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void queryTest_METRIC_FILTER_COMPARE() throws Exception {
|
||||
public void queryTest_metric_filter_compare() throws Exception {
|
||||
QueryResult actualResult = submitNewChat("对比alice和lucy的访问次数");
|
||||
|
||||
QueryResult expectedResult = new QueryResult();
|
||||
@@ -137,7 +139,7 @@ public class MetricQueryTest extends BaseQueryTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void queryTest_METRIC_TOPN() throws Exception {
|
||||
public void queryTest_metric_topn() throws Exception {
|
||||
QueryResult actualResult = submitNewChat("近3天访问次数最多的用户");
|
||||
|
||||
QueryResult expectedResult = new QueryResult();
|
||||
@@ -157,7 +159,7 @@ public class MetricQueryTest extends BaseQueryTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void queryTest_METRIC_GROUPBY_SUM() throws Exception {
|
||||
public void queryTest_metric_groupby_sum() throws Exception {
|
||||
QueryResult actualResult = submitNewChat("超音数各部门的访问次数总和");
|
||||
QueryResult expectedResult = new QueryResult();
|
||||
SemanticParseInfo expectedParseInfo = new SemanticParseInfo();
|
||||
@@ -176,7 +178,7 @@ public class MetricQueryTest extends BaseQueryTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void queryTest_METRIC_FILTER_TIME() throws Exception {
|
||||
public void queryTest_metric_filter_time() throws Exception {
|
||||
DateFormat format = new SimpleDateFormat("yyyy-mm-dd");
|
||||
DateFormat textFormat = new SimpleDateFormat("yyyy年mm月dd日");
|
||||
String dateStr = textFormat.format(format.parse(startDay));
|
||||
@@ -202,7 +204,7 @@ public class MetricQueryTest extends BaseQueryTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void queryTest_CONFIG_VISIBILITY() throws Exception {
|
||||
public void queryTest_config_visibility() throws Exception {
|
||||
// 1. round_1 use blacklist
|
||||
ChatConfigResp chatConfig = configService.fetchConfigByModelId(1L);
|
||||
ChatConfigEditReqReq extendEditCmd = new ChatConfigEditReqReq();
|
||||
|
||||
@@ -2,9 +2,9 @@ package com.tencent.supersonic.integration;
|
||||
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import com.tencent.supersonic.chat.parser.embedding.EmbeddingConfig;
|
||||
import com.tencent.supersonic.chat.parser.embedding.EmbeddingResp;
|
||||
import com.tencent.supersonic.chat.parser.embedding.RecallRetrieval;
|
||||
import com.tencent.supersonic.chat.parser.plugin.embedding.EmbeddingConfig;
|
||||
import com.tencent.supersonic.chat.parser.plugin.embedding.EmbeddingResp;
|
||||
import com.tencent.supersonic.chat.parser.plugin.embedding.RecallRetrieval;
|
||||
import com.tencent.supersonic.chat.plugin.PluginManager;
|
||||
import com.tencent.supersonic.chat.service.AgentService;
|
||||
import com.tencent.supersonic.util.DataUtils;
|
||||
@@ -34,7 +34,8 @@ public class MockConfiguration {
|
||||
when(embeddingConfig.getUrl()).thenReturn("test");
|
||||
}
|
||||
|
||||
public static void mockPluginManagerDoRequest(PluginManager pluginManager, String path, ResponseEntity<String> responseEntity) {
|
||||
public static void mockPluginManagerDoRequest(PluginManager pluginManager, String path,
|
||||
ResponseEntity<String> responseEntity) {
|
||||
when(pluginManager.doRequest(eq(path), notNull(String.class))).thenReturn(responseEntity);
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
package com.tencent.supersonic.integration.llm;
|
||||
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import com.tencent.supersonic.chat.api.component.SemanticParser;
|
||||
import com.tencent.supersonic.chat.api.pojo.ChatContext;
|
||||
import com.tencent.supersonic.chat.api.pojo.QueryContext;
|
||||
import com.tencent.supersonic.chat.api.pojo.request.QueryReq;
|
||||
import com.tencent.supersonic.chat.config.LLMConfig;
|
||||
import com.tencent.supersonic.chat.parser.llm.dsl.LLMDslParser;
|
||||
import com.tencent.supersonic.chat.utils.ComponentFactory;
|
||||
import com.tencent.supersonic.integration.BaseQueryTest;
|
||||
import com.tencent.supersonic.util.DataUtils;
|
||||
import org.junit.Test;
|
||||
import org.springframework.boot.test.mock.mockito.MockBean;
|
||||
|
||||
public class LLMDslParserTest extends BaseQueryTest {
|
||||
|
||||
@MockBean
|
||||
protected LLMConfig llmConfig;
|
||||
|
||||
@Test
|
||||
public void parse() throws Exception {
|
||||
String queryText = "周杰伦专辑十一月的萧邦有哪些歌曲";
|
||||
QueryReq queryReq = DataUtils.getQueryContextReq(10, queryText);
|
||||
QueryContext queryContext = new QueryContext();
|
||||
queryContext.setRequest(queryReq);
|
||||
SemanticParser dslParser = ComponentFactory.getSemanticParsers().stream().filter(parser -> {
|
||||
if (parser instanceof LLMDslParser) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
).findFirst().get();
|
||||
|
||||
when(llmConfig.getUrl()).thenReturn("llmUrl");
|
||||
|
||||
ChatContext chatCtx = new ChatContext();
|
||||
dslParser.parse(queryContext, chatCtx);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
package com.tencent.supersonic.integration.mapper;
|
||||
|
||||
import static com.tencent.supersonic.common.pojo.enums.AggregateTypeEnum.NONE;
|
||||
|
||||
import com.tencent.supersonic.chat.api.pojo.SchemaElement;
|
||||
import com.tencent.supersonic.chat.api.pojo.SemanticParseInfo;
|
||||
import com.tencent.supersonic.chat.api.pojo.request.QueryFilter;
|
||||
import com.tencent.supersonic.chat.api.pojo.request.QueryReq;
|
||||
import com.tencent.supersonic.chat.api.pojo.response.QueryResult;
|
||||
import com.tencent.supersonic.chat.query.rule.metric.MetricEntityQuery;
|
||||
import com.tencent.supersonic.common.pojo.DateConf;
|
||||
import com.tencent.supersonic.integration.BaseQueryTest;
|
||||
import com.tencent.supersonic.semantic.api.query.enums.FilterOperatorEnum;
|
||||
import com.tencent.supersonic.util.DataUtils;
|
||||
import org.junit.Test;
|
||||
|
||||
public class MapperTest extends BaseQueryTest {
|
||||
|
||||
@Test
|
||||
public void hanlp() throws Exception {
|
||||
|
||||
QueryReq queryContextReq = DataUtils.getQueryContextReq(10, "艺人周杰伦的播放量");
|
||||
queryContextReq.setAgentId(1);
|
||||
|
||||
QueryResult actualResult = submitNewChat("艺人周杰伦的播放量");
|
||||
|
||||
QueryResult expectedResult = new QueryResult();
|
||||
SemanticParseInfo expectedParseInfo = new SemanticParseInfo();
|
||||
expectedResult.setChatContext(expectedParseInfo);
|
||||
|
||||
expectedResult.setQueryMode(MetricEntityQuery.QUERY_MODE);
|
||||
expectedParseInfo.setAggType(NONE);
|
||||
|
||||
QueryFilter dimensionFilter = DataUtils.getFilter("singer_name", FilterOperatorEnum.EQUALS, "周杰伦", "歌手名", 7L);
|
||||
expectedParseInfo.getDimensionFilters().add(dimensionFilter);
|
||||
|
||||
SchemaElement metric = SchemaElement.builder().name("播放量").build();
|
||||
expectedParseInfo.getMetrics().add(metric);
|
||||
|
||||
expectedParseInfo.setDateInfo(DataUtils.getDateConf(DateConf.DateMode.RECENT, 7, period, startDay, endDay));
|
||||
expectedParseInfo.setNativeQuery(false);
|
||||
|
||||
assertQueryResult(expectedResult, actualResult);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -29,4 +29,4 @@ public class BasePluginTest {
|
||||
Assert.assertEquals("alice", webPage.getParams().get(0).getValue());
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ import com.tencent.supersonic.chat.api.pojo.request.QueryFilters;
|
||||
import com.tencent.supersonic.chat.api.pojo.request.QueryReq;
|
||||
import com.tencent.supersonic.chat.api.pojo.response.ParseResp;
|
||||
import com.tencent.supersonic.chat.api.pojo.response.QueryResult;
|
||||
import com.tencent.supersonic.chat.parser.embedding.EmbeddingConfig;
|
||||
import com.tencent.supersonic.chat.parser.plugin.embedding.EmbeddingConfig;
|
||||
import com.tencent.supersonic.chat.plugin.PluginManager;
|
||||
import com.tencent.supersonic.chat.service.AgentService;
|
||||
import com.tencent.supersonic.chat.service.QueryService;
|
||||
@@ -17,16 +17,16 @@ import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.boot.test.mock.mockito.MockBean;
|
||||
|
||||
public class PluginRecognizeTest extends BasePluginTest{
|
||||
|
||||
@MockBean
|
||||
private EmbeddingConfig embeddingConfig;
|
||||
public class PluginRecognizeTest extends BasePluginTest {
|
||||
|
||||
@MockBean
|
||||
protected PluginManager pluginManager;
|
||||
|
||||
@MockBean
|
||||
protected AgentService agentService;
|
||||
private EmbeddingConfig embeddingConfig;
|
||||
|
||||
@MockBean
|
||||
private AgentService agentService;
|
||||
|
||||
@Autowired
|
||||
@Qualifier("chatQueryService")
|
||||
@@ -34,7 +34,7 @@ public class PluginRecognizeTest extends BasePluginTest{
|
||||
|
||||
@Test
|
||||
public void webPageRecognize() throws Exception {
|
||||
MockConfiguration.mockEmbeddingRecognize(pluginManager, "alice最近的访问情况怎么样","1");
|
||||
MockConfiguration.mockEmbeddingRecognize(pluginManager, "alice最近的访问情况怎么样", "1");
|
||||
MockConfiguration.mockEmbeddingUrl(embeddingConfig);
|
||||
QueryReq queryContextReq = DataUtils.getQueryContextReq(1000, "alice最近的访问情况怎么样");
|
||||
QueryResult queryResult = queryService.executeQuery(queryContextReq);
|
||||
@@ -43,7 +43,7 @@ public class PluginRecognizeTest extends BasePluginTest{
|
||||
|
||||
@Test
|
||||
public void webPageRecognizeWithQueryFilter() throws Exception {
|
||||
MockConfiguration.mockEmbeddingRecognize(pluginManager, "在超音数最近的情况怎么样","1");
|
||||
MockConfiguration.mockEmbeddingRecognize(pluginManager, "在超音数最近的情况怎么样", "1");
|
||||
MockConfiguration.mockEmbeddingUrl(embeddingConfig);
|
||||
QueryReq queryRequest = DataUtils.getQueryContextReq(1000, "在超音数最近的情况怎么样");
|
||||
QueryFilters queryFilters = new QueryFilters();
|
||||
@@ -59,7 +59,7 @@ public class PluginRecognizeTest extends BasePluginTest{
|
||||
|
||||
@Test
|
||||
public void pluginRecognizeWithAgent() {
|
||||
MockConfiguration.mockEmbeddingRecognize(pluginManager, "alice最近的访问情况怎么样","1");
|
||||
MockConfiguration.mockEmbeddingRecognize(pluginManager, "alice最近的访问情况怎么样", "1");
|
||||
MockConfiguration.mockEmbeddingUrl(embeddingConfig);
|
||||
MockConfiguration.mockAgent(agentService);
|
||||
QueryReq queryContextReq = DataUtils.getQueryReqWithAgent(1000, "alice最近的访问情况怎么样",
|
||||
|
||||
@@ -31,7 +31,7 @@ public class DataUtils {
|
||||
|
||||
public static QueryReq getQueryContextReq(Integer id, String query) {
|
||||
QueryReq queryContextReq = new QueryReq();
|
||||
queryContextReq.setQueryText(query);//"alice的访问次数"
|
||||
queryContextReq.setQueryText(query);
|
||||
queryContextReq.setChatId(id);
|
||||
queryContextReq.setUser(user_test);
|
||||
return queryContextReq;
|
||||
@@ -39,7 +39,7 @@ public class DataUtils {
|
||||
|
||||
public static QueryReq getQueryReqWithAgent(Integer id, String query, Integer agentId) {
|
||||
QueryReq queryReq = new QueryReq();
|
||||
queryReq.setQueryText(query);//"alice的访问次数"
|
||||
queryReq.setQueryText(query);
|
||||
queryReq.setChatId(id);
|
||||
queryReq.setUser(user_test);
|
||||
queryReq.setAgentId(agentId);
|
||||
@@ -74,8 +74,8 @@ public class DataUtils {
|
||||
.build();
|
||||
}
|
||||
|
||||
public static QueryFilter getFilter(String bizName, FilterOperatorEnum filterOperatorEnum, Object value, String name,
|
||||
Long elementId) {
|
||||
public static QueryFilter getFilter(String bizName, FilterOperatorEnum filterOperatorEnum,
|
||||
Object value, String name, Long elementId) {
|
||||
QueryFilter filter = new QueryFilter();
|
||||
filter.setBizName(bizName);
|
||||
filter.setOperator(filterOperatorEnum);
|
||||
@@ -95,7 +95,8 @@ public class DataUtils {
|
||||
return dateInfo;
|
||||
}
|
||||
|
||||
public static DateConf getDateConf(DateConf.DateMode dateMode, Integer unit, String period, String startDate, String endDate) {
|
||||
public static DateConf getDateConf(DateConf.DateMode dateMode, Integer unit,
|
||||
String period, String startDate, String endDate) {
|
||||
DateConf dateInfo = new DateConf();
|
||||
dateInfo.setUnit(unit);
|
||||
dateInfo.setDateMode(dateMode);
|
||||
@@ -114,9 +115,9 @@ public class DataUtils {
|
||||
}
|
||||
|
||||
public static Boolean compareDate(DateConf dateInfo1, DateConf dateInfo2) {
|
||||
Boolean timeFilterExist = dateInfo1.getUnit().equals(dateInfo2.getUnit()) &&
|
||||
dateInfo1.getDateMode().equals(dateInfo2.getDateMode()) &&
|
||||
dateInfo1.getPeriod().equals(dateInfo2.getPeriod());
|
||||
Boolean timeFilterExist = dateInfo1.getUnit().equals(dateInfo2.getUnit())
|
||||
&& dateInfo1.getDateMode().equals(dateInfo2.getDateMode())
|
||||
&& dateInfo1.getPeriod().equals(dateInfo2.getPeriod());
|
||||
return timeFilterExist;
|
||||
}
|
||||
|
||||
@@ -135,11 +136,11 @@ public class DataUtils {
|
||||
public static Boolean compareDimensionFilter(Set<QueryFilter> dimensionFilters, QueryFilter dimensionFilter) {
|
||||
Boolean dimensionFilterExist = false;
|
||||
for (QueryFilter filter : dimensionFilters) {
|
||||
if (filter.getBizName().equals(dimensionFilter.getBizName()) &&
|
||||
filter.getOperator().equals(dimensionFilter.getOperator()) &&
|
||||
filter.getValue().toString().equals(dimensionFilter.getValue().toString()) &&
|
||||
filter.getElementID().equals(dimensionFilter.getElementID()) &&
|
||||
filter.getName().equals(dimensionFilter.getName())) {
|
||||
if (filter.getBizName().equals(dimensionFilter.getBizName())
|
||||
&& filter.getOperator().equals(dimensionFilter.getOperator())
|
||||
&& filter.getValue().toString().equals(dimensionFilter.getValue().toString())
|
||||
&& filter.getElementID().equals(dimensionFilter.getElementID())
|
||||
&& filter.getName().equals(dimensionFilter.getName())) {
|
||||
dimensionFilterExist = true;
|
||||
}
|
||||
}
|
||||
@@ -163,6 +164,7 @@ public class DataUtils {
|
||||
private static RuleQueryTool getRuleQueryTool() {
|
||||
RuleQueryTool ruleQueryTool = new RuleQueryTool();
|
||||
ruleQueryTool.setType(AgentToolType.RULE);
|
||||
ruleQueryTool.setModelIds(Lists.newArrayList(1L, 2L));
|
||||
ruleQueryTool.setQueryModes(Lists.newArrayList("METRIC_ENTITY", "METRIC_FILTER", "METRIC_MODEL"));
|
||||
return ruleQueryTool;
|
||||
}
|
||||
|
||||
@@ -24,5 +24,8 @@ semantic:
|
||||
url:
|
||||
prefix: http://127.0.0.1:9081
|
||||
|
||||
time:
|
||||
threshold: 100
|
||||
|
||||
mybatis:
|
||||
mapper-locations=classpath:mappers/custom/*.xml,classpath*:/mappers/*.xml
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user