mirror of
https://github.com/tencentmusic/supersonic.git
synced 2025-12-15 22:46:49 +00:00
(improvement)(Chat) Move chat-core to headless (#805)
Co-authored-by: jolunoluo
This commit is contained in:
@@ -24,12 +24,6 @@
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.tencent.supersonic</groupId>
|
||||
<artifactId>chat-core</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.tencent.supersonic</groupId>
|
||||
<artifactId>auth-authorization</artifactId>
|
||||
|
||||
@@ -22,12 +22,6 @@
|
||||
<artifactId>launchers-common</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.tencent.supersonic</groupId>
|
||||
<artifactId>chat-core</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.tencent.supersonic</groupId>
|
||||
<artifactId>chat-server</artifactId>
|
||||
|
||||
@@ -3,30 +3,28 @@ package com.tencent.supersonic;
|
||||
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.pojo.request.ExecuteQueryReq;
|
||||
import com.tencent.supersonic.chat.api.pojo.request.QueryReq;
|
||||
import com.tencent.supersonic.chat.api.pojo.response.ParseResp;
|
||||
import com.tencent.supersonic.chat.core.agent.Agent;
|
||||
import com.tencent.supersonic.chat.core.agent.AgentConfig;
|
||||
import com.tencent.supersonic.chat.core.agent.AgentToolType;
|
||||
import com.tencent.supersonic.chat.core.agent.LLMParserTool;
|
||||
import com.tencent.supersonic.chat.core.agent.RuleParserTool;
|
||||
import com.tencent.supersonic.chat.core.plugin.Plugin;
|
||||
import com.tencent.supersonic.chat.core.plugin.PluginParseConfig;
|
||||
import com.tencent.supersonic.chat.core.query.plugin.ParamOption;
|
||||
import com.tencent.supersonic.chat.core.query.plugin.WebBase;
|
||||
import com.tencent.supersonic.chat.api.pojo.request.ChatExecuteReq;
|
||||
import com.tencent.supersonic.chat.api.pojo.request.ChatParseReq;
|
||||
import com.tencent.supersonic.chat.server.agent.Agent;
|
||||
import com.tencent.supersonic.chat.server.agent.AgentConfig;
|
||||
import com.tencent.supersonic.chat.server.agent.AgentToolType;
|
||||
import com.tencent.supersonic.chat.server.agent.LLMParserTool;
|
||||
import com.tencent.supersonic.chat.server.agent.RuleParserTool;
|
||||
import com.tencent.supersonic.chat.server.plugin.Plugin;
|
||||
import com.tencent.supersonic.chat.server.plugin.PluginParseConfig;
|
||||
import com.tencent.supersonic.chat.server.plugin.build.ParamOption;
|
||||
import com.tencent.supersonic.chat.server.plugin.build.WebBase;
|
||||
import com.tencent.supersonic.chat.server.service.AgentService;
|
||||
import com.tencent.supersonic.chat.server.service.ChatService;
|
||||
import com.tencent.supersonic.chat.server.service.PluginService;
|
||||
import com.tencent.supersonic.chat.server.service.QueryService;
|
||||
import com.tencent.supersonic.common.pojo.SysParameter;
|
||||
import com.tencent.supersonic.common.service.SysParameterService;
|
||||
import com.tencent.supersonic.common.util.JsonUtil;
|
||||
import com.tencent.supersonic.headless.api.pojo.response.ParseResp;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.boot.CommandLineRunner;
|
||||
import org.springframework.core.annotation.Order;
|
||||
@@ -39,9 +37,6 @@ import org.springframework.util.CollectionUtils;
|
||||
public class ChatDemoLoader implements CommandLineRunner {
|
||||
|
||||
private User user = User.getFakeUser();
|
||||
@Qualifier("chatQueryService")
|
||||
@Autowired
|
||||
private QueryService queryService;
|
||||
@Autowired
|
||||
private ChatService chatService;
|
||||
@Autowired
|
||||
@@ -84,26 +79,24 @@ public class ChatDemoLoader implements CommandLineRunner {
|
||||
}
|
||||
|
||||
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);
|
||||
ChatParseReq chatParseReq = new ChatParseReq();
|
||||
chatParseReq.setQueryText(queryText);
|
||||
chatParseReq.setChatId(chatId);
|
||||
chatParseReq.setAgentId(1);
|
||||
chatParseReq.setUser(User.getFakeUser());
|
||||
ParseResp parseResp = chatService.performParsing(chatParseReq);
|
||||
if (CollectionUtils.isEmpty(parseResp.getSelectedParses())) {
|
||||
log.info("parseResp.getSelectedParses() is empty");
|
||||
return;
|
||||
}
|
||||
ExecuteQueryReq executeReq = ExecuteQueryReq.builder().build();
|
||||
ChatExecuteReq executeReq = new ChatExecuteReq();
|
||||
executeReq.setQueryId(parseResp.getQueryId());
|
||||
executeReq.setParseId(parseResp.getSelectedParses().get(0).getId());
|
||||
executeReq.setQueryText(queryRequest.getQueryText());
|
||||
executeReq.setParseInfo(parseResp.getSelectedParses().get(0));
|
||||
executeReq.setQueryText(queryText);
|
||||
executeReq.setChatId(parseResp.getChatId());
|
||||
executeReq.setUser(queryRequest.getUser());
|
||||
executeReq.setAgentId(1);
|
||||
executeReq.setUser(User.getFakeUser());
|
||||
executeReq.setSaveAnswer(true);
|
||||
queryService.performExecution(executeReq);
|
||||
chatService.performExecution(executeReq);
|
||||
}
|
||||
|
||||
public void addSampleChats() throws Exception {
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
package com.tencent.supersonic;
|
||||
|
||||
import com.tencent.supersonic.chat.core.parser.JavaLLMProxy;
|
||||
import com.tencent.supersonic.chat.core.parser.sql.llm.SqlExamplarLoader;
|
||||
import com.tencent.supersonic.chat.core.parser.sql.llm.SqlExample;
|
||||
import com.tencent.supersonic.chat.core.utils.ComponentFactory;
|
||||
import com.tencent.supersonic.common.config.EmbeddingConfig;
|
||||
import java.util.List;
|
||||
import com.tencent.supersonic.headless.core.chat.parser.JavaLLMProxy;
|
||||
import com.tencent.supersonic.headless.core.chat.parser.llm.SqlExamplarLoader;
|
||||
import com.tencent.supersonic.headless.core.chat.parser.llm.SqlExample;
|
||||
import com.tencent.supersonic.headless.core.utils.ComponentFactory;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.CommandLineRunner;
|
||||
import org.springframework.core.annotation.Order;
|
||||
import org.springframework.stereotype.Component;
|
||||
import java.util.List;
|
||||
|
||||
@Slf4j
|
||||
@Component
|
||||
|
||||
@@ -1,35 +1,28 @@
|
||||
com.tencent.supersonic.chat.core.mapper.SchemaMapper=\
|
||||
com.tencent.supersonic.chat.core.mapper.EmbeddingMapper, \
|
||||
com.tencent.supersonic.chat.core.mapper.KeywordMapper, \
|
||||
com.tencent.supersonic.chat.core.mapper.QueryFilterMapper, \
|
||||
com.tencent.supersonic.chat.core.mapper.EntityMapper
|
||||
com.tencent.supersonic.headless.core.chat.mapper.SchemaMapper=\
|
||||
com.tencent.supersonic.headless.core.chat.mapper.EmbeddingMapper, \
|
||||
com.tencent.supersonic.headless.core.chat.mapper.KeywordMapper, \
|
||||
com.tencent.supersonic.headless.core.chat.mapper.QueryFilterMapper, \
|
||||
com.tencent.supersonic.headless.core.chat.mapper.EntityMapper
|
||||
|
||||
com.tencent.supersonic.chat.core.parser.SemanticParser=\
|
||||
com.tencent.supersonic.chat.core.parser.sql.rule.RuleSqlParser, \
|
||||
com.tencent.supersonic.chat.core.parser.sql.llm.LLMSqlParser, \
|
||||
com.tencent.supersonic.chat.core.parser.plugin.embedding.EmbeddingRecallParser, \
|
||||
com.tencent.supersonic.chat.core.parser.plugin.function.FunctionCallParser, \
|
||||
com.tencent.supersonic.chat.core.parser.QueryTypeParser
|
||||
com.tencent.supersonic.headless.core.chat.parser.SemanticParser=\
|
||||
com.tencent.supersonic.headless.core.chat.parser.rule.RuleSqlParser, \
|
||||
com.tencent.supersonic.headless.core.chat.parser.llm.LLMSqlParser, \
|
||||
com.tencent.supersonic.headless.core.chat.parser.QueryTypeParser
|
||||
|
||||
com.tencent.supersonic.chat.core.corrector.SemanticCorrector=\
|
||||
com.tencent.supersonic.chat.core.corrector.SchemaCorrector, \
|
||||
com.tencent.supersonic.chat.core.corrector.TimeCorrector, \
|
||||
com.tencent.supersonic.chat.core.corrector.GrammarCorrector
|
||||
com.tencent.supersonic.headless.core.chat.corrector.SemanticCorrector=\
|
||||
com.tencent.supersonic.headless.core.chat.corrector.SchemaCorrector, \
|
||||
com.tencent.supersonic.headless.core.chat.corrector.TimeCorrector, \
|
||||
com.tencent.supersonic.headless.core.chat.corrector.GrammarCorrector
|
||||
|
||||
com.tencent.supersonic.chat.server.processor.parse.ParseResultProcessor=\
|
||||
com.tencent.supersonic.chat.server.processor.parse.ParseInfoProcessor, \
|
||||
com.tencent.supersonic.chat.server.processor.parse.QueryRankProcessor, \
|
||||
com.tencent.supersonic.chat.server.processor.parse.EntityInfoProcessor, \
|
||||
com.tencent.supersonic.chat.server.processor.parse.SqlInfoProcessor, \
|
||||
com.tencent.supersonic.chat.server.processor.parse.TimeCostProcessor, \
|
||||
com.tencent.supersonic.chat.server.processor.parse.RespBuildProcessor, \
|
||||
com.tencent.supersonic.chat.server.processor.parse.QueryRecommendProcessor
|
||||
com.tencent.supersonic.headless.server.processor.ResultProcessor=\
|
||||
com.tencent.supersonic.headless.server.processor.ParseInfoProcessor, \
|
||||
com.tencent.supersonic.headless.server.processor.QueryRankProcessor, \
|
||||
com.tencent.supersonic.headless.server.processor.SqlInfoProcessor, \
|
||||
com.tencent.supersonic.headless.server.processor.TimeCostProcessor, \
|
||||
com.tencent.supersonic.headless.server.processor.RespBuildProcessor
|
||||
|
||||
com.tencent.supersonic.chat.core.query.semantic.SemanticInterpreter=\
|
||||
com.tencent.supersonic.chat.core.query.semantic.LocalSemanticInterpreter
|
||||
|
||||
com.tencent.supersonic.chat.core.parser.sql.llm.DataSetResolver=\
|
||||
com.tencent.supersonic.chat.core.parser.sql.llm.HeuristicDataSetResolver
|
||||
com.tencent.supersonic.headless.core.chat.parser.llm.DataSetResolver=\
|
||||
com.tencent.supersonic.headless.core.chat.parser.llm.HeuristicDataSetResolver
|
||||
|
||||
com.tencent.supersonic.auth.authentication.interceptor.AuthenticationInterceptor=\
|
||||
com.tencent.supersonic.auth.authentication.interceptor.DefaultAuthenticationInterceptor
|
||||
|
||||
@@ -1,21 +1,18 @@
|
||||
package com.tencent.supersonic.chat;
|
||||
|
||||
import com.tencent.supersonic.BaseApplication;
|
||||
import com.tencent.supersonic.headless.api.pojo.SchemaElement;
|
||||
import com.tencent.supersonic.chat.api.pojo.SemanticParseInfo;
|
||||
import com.tencent.supersonic.chat.api.pojo.request.ExecuteQueryReq;
|
||||
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.api.pojo.response.QueryState;
|
||||
import com.tencent.supersonic.chat.core.pojo.ChatContext;
|
||||
import com.tencent.supersonic.util.DataUtils;
|
||||
import com.tencent.supersonic.chat.api.pojo.request.ChatExecuteReq;
|
||||
import com.tencent.supersonic.chat.api.pojo.request.ChatParseReq;
|
||||
import com.tencent.supersonic.chat.server.service.AgentService;
|
||||
import com.tencent.supersonic.chat.server.service.ChatService;
|
||||
import com.tencent.supersonic.chat.server.service.ConfigService;
|
||||
import com.tencent.supersonic.chat.server.service.QueryService;
|
||||
import com.tencent.supersonic.headless.api.pojo.SchemaElement;
|
||||
import com.tencent.supersonic.headless.api.pojo.SemanticParseInfo;
|
||||
import com.tencent.supersonic.headless.api.pojo.response.ParseResp;
|
||||
import com.tencent.supersonic.headless.api.pojo.response.QueryResult;
|
||||
import com.tencent.supersonic.headless.api.pojo.response.QueryState;
|
||||
import com.tencent.supersonic.util.DataUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.boot.test.mock.mockito.MockBean;
|
||||
|
||||
import java.time.LocalDate;
|
||||
@@ -32,9 +29,6 @@ public class BaseTest extends BaseApplication {
|
||||
protected final String endDay = LocalDate.now().plusDays(-1).toString();
|
||||
protected final String period = "DAY";
|
||||
|
||||
@Autowired
|
||||
@Qualifier("chatQueryService")
|
||||
protected QueryService queryService;
|
||||
@Autowired
|
||||
protected ChatService chatService;
|
||||
@Autowired
|
||||
@@ -46,17 +40,15 @@ public class BaseTest extends BaseApplication {
|
||||
ParseResp parseResp = submitParse(queryText, agentId, chatId);
|
||||
|
||||
SemanticParseInfo semanticParseInfo = parseResp.getSelectedParses().get(0);
|
||||
ExecuteQueryReq request = ExecuteQueryReq.builder()
|
||||
.agentId(agentId)
|
||||
.queryId(parseResp.getQueryId())
|
||||
.parseId(semanticParseInfo.getId())
|
||||
ChatExecuteReq request = ChatExecuteReq.builder()
|
||||
.chatId(parseResp.getChatId())
|
||||
.queryText(parseResp.getQueryText())
|
||||
.user(DataUtils.getUser())
|
||||
.parseInfo(semanticParseInfo)
|
||||
.parseId(semanticParseInfo.getId())
|
||||
.queryId(parseResp.getQueryId())
|
||||
.saveAnswer(true)
|
||||
.build();
|
||||
QueryResult queryResult = queryService.performExecution(request);
|
||||
QueryResult queryResult = chatService.performExecution(request);
|
||||
queryResult.setChatContext(semanticParseInfo);
|
||||
return queryResult;
|
||||
}
|
||||
@@ -65,22 +57,16 @@ public class BaseTest extends BaseApplication {
|
||||
ParseResp parseResp = submitParse(queryText, agentId);
|
||||
|
||||
SemanticParseInfo parseInfo = parseResp.getSelectedParses().get(0);
|
||||
ExecuteQueryReq request = ExecuteQueryReq.builder()
|
||||
.agentId(agentId)
|
||||
.queryId(parseResp.getQueryId())
|
||||
.parseId(parseInfo.getId())
|
||||
ChatExecuteReq request = ChatExecuteReq.builder()
|
||||
.chatId(parseResp.getChatId())
|
||||
.queryText(parseResp.getQueryText())
|
||||
.user(DataUtils.getUser())
|
||||
.parseInfo(parseInfo)
|
||||
.saveAnswer(true)
|
||||
.parseId(parseInfo.getId())
|
||||
.queryId(parseResp.getQueryId())
|
||||
.saveAnswer(false)
|
||||
.build();
|
||||
|
||||
QueryResult result = queryService.performExecution(request);
|
||||
|
||||
ChatContext chatContext = chatService.getOrCreateContext(parseResp.getChatId());
|
||||
chatContext.setParseInfo(new SemanticParseInfo());
|
||||
chatService.updateContext(chatContext);
|
||||
QueryResult result = chatService.performExecution(request);
|
||||
result.setChatContext(parseInfo);
|
||||
return result;
|
||||
}
|
||||
@@ -89,9 +75,9 @@ public class BaseTest extends BaseApplication {
|
||||
if (Objects.isNull(chatId)) {
|
||||
chatId = 10;
|
||||
}
|
||||
QueryReq queryContextReq = DataUtils.getQueryContextReq(chatId, queryText);
|
||||
queryContextReq.setAgentId(agentId);
|
||||
return queryService.performParsing(queryContextReq);
|
||||
ChatParseReq chatParseReq = DataUtils.getChatParseReq(chatId, queryText);
|
||||
chatParseReq.setAgentId(agentId);
|
||||
return chatService.performParsing(chatParseReq);
|
||||
}
|
||||
|
||||
protected ParseResp submitParse(String queryText, Integer agentId) {
|
||||
@@ -99,8 +85,8 @@ public class BaseTest extends BaseApplication {
|
||||
}
|
||||
|
||||
protected ParseResp submitParseWithAgent(String queryText, Integer agentId) {
|
||||
QueryReq queryContextReq = DataUtils.getQueryReqWithAgent(10, queryText, agentId);
|
||||
return queryService.performParsing(queryContextReq);
|
||||
ChatParseReq chatParseReq = DataUtils.getChatParseReqWithAgent(10, queryText, agentId);
|
||||
return chatService.performParsing(chatParseReq);
|
||||
}
|
||||
|
||||
protected void assertSchemaElements(Set<SchemaElement> expected, Set<SchemaElement> actual) {
|
||||
|
||||
@@ -1,27 +1,28 @@
|
||||
package com.tencent.supersonic.chat;
|
||||
|
||||
import static com.tencent.supersonic.common.pojo.enums.AggregateTypeEnum.NONE;
|
||||
import static com.tencent.supersonic.common.pojo.enums.AggregateTypeEnum.SUM;
|
||||
|
||||
import com.tencent.supersonic.chat.api.pojo.SemanticParseInfo;
|
||||
import com.tencent.supersonic.chat.api.pojo.request.QueryFilter;
|
||||
import com.tencent.supersonic.chat.api.pojo.response.ParseResp;
|
||||
import com.tencent.supersonic.chat.api.pojo.response.QueryResult;
|
||||
import com.tencent.supersonic.chat.core.query.rule.metric.MetricFilterQuery;
|
||||
import com.tencent.supersonic.chat.core.query.rule.metric.MetricGroupByQuery;
|
||||
import com.tencent.supersonic.chat.core.query.rule.metric.MetricModelQuery;
|
||||
import com.tencent.supersonic.chat.core.query.rule.metric.MetricTopNQuery;
|
||||
import com.tencent.supersonic.common.pojo.DateConf;
|
||||
import com.tencent.supersonic.common.pojo.enums.FilterOperatorEnum;
|
||||
import com.tencent.supersonic.common.pojo.enums.QueryType;
|
||||
import com.tencent.supersonic.headless.api.pojo.SemanticParseInfo;
|
||||
import com.tencent.supersonic.headless.api.pojo.request.QueryFilter;
|
||||
import com.tencent.supersonic.headless.api.pojo.response.ParseResp;
|
||||
import com.tencent.supersonic.headless.api.pojo.response.QueryResult;
|
||||
import com.tencent.supersonic.headless.core.chat.query.rule.metric.MetricFilterQuery;
|
||||
import com.tencent.supersonic.headless.core.chat.query.rule.metric.MetricGroupByQuery;
|
||||
import com.tencent.supersonic.headless.core.chat.query.rule.metric.MetricModelQuery;
|
||||
import com.tencent.supersonic.headless.core.chat.query.rule.metric.MetricTopNQuery;
|
||||
import com.tencent.supersonic.util.DataUtils;
|
||||
import org.junit.Assert;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.text.DateFormat;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
import org.junit.Assert;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static com.tencent.supersonic.common.pojo.enums.AggregateTypeEnum.NONE;
|
||||
import static com.tencent.supersonic.common.pojo.enums.AggregateTypeEnum.SUM;
|
||||
|
||||
|
||||
public class MetricTest extends BaseTest {
|
||||
|
||||
@@ -2,7 +2,7 @@ package com.tencent.supersonic.chat;
|
||||
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import com.tencent.supersonic.chat.core.plugin.PluginManager;
|
||||
import com.tencent.supersonic.chat.server.plugin.PluginManager;
|
||||
import com.tencent.supersonic.chat.server.service.AgentService;
|
||||
import com.tencent.supersonic.common.config.EmbeddingConfig;
|
||||
import com.tencent.supersonic.common.util.embedding.Retrieval;
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
package com.tencent.supersonic.chat;
|
||||
|
||||
import static com.tencent.supersonic.common.pojo.enums.AggregateTypeEnum.NONE;
|
||||
|
||||
import com.tencent.supersonic.chat.api.pojo.SemanticParseInfo;
|
||||
import com.tencent.supersonic.chat.api.pojo.response.QueryResult;
|
||||
import com.tencent.supersonic.chat.core.query.rule.metric.MetricFilterQuery;
|
||||
import com.tencent.supersonic.util.DataUtils;
|
||||
import com.tencent.supersonic.common.pojo.DateConf;
|
||||
import com.tencent.supersonic.common.pojo.enums.FilterOperatorEnum;
|
||||
import com.tencent.supersonic.common.pojo.enums.QueryType;
|
||||
import com.tencent.supersonic.headless.api.pojo.SemanticParseInfo;
|
||||
import com.tencent.supersonic.headless.api.pojo.response.QueryResult;
|
||||
import com.tencent.supersonic.headless.core.chat.query.rule.metric.MetricFilterQuery;
|
||||
import com.tencent.supersonic.util.DataUtils;
|
||||
import org.junit.jupiter.api.Order;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static com.tencent.supersonic.common.pojo.enums.AggregateTypeEnum.NONE;
|
||||
|
||||
public class MultiTurnsTest extends BaseTest {
|
||||
|
||||
@Test
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
package com.tencent.supersonic.chat;
|
||||
|
||||
import com.tencent.supersonic.headless.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.response.QueryResult;
|
||||
import com.tencent.supersonic.chat.core.query.rule.metric.MetricTagQuery;
|
||||
import com.tencent.supersonic.chat.core.query.rule.tag.TagFilterQuery;
|
||||
import com.tencent.supersonic.util.DataUtils;
|
||||
import com.tencent.supersonic.common.pojo.DateConf;
|
||||
import com.tencent.supersonic.common.pojo.DateConf.DateMode;
|
||||
import com.tencent.supersonic.common.pojo.enums.AggregateTypeEnum;
|
||||
import com.tencent.supersonic.common.pojo.enums.FilterOperatorEnum;
|
||||
import com.tencent.supersonic.common.pojo.enums.QueryType;
|
||||
import com.tencent.supersonic.headless.api.pojo.SchemaElement;
|
||||
import com.tencent.supersonic.headless.api.pojo.SemanticParseInfo;
|
||||
import com.tencent.supersonic.headless.api.pojo.request.QueryFilter;
|
||||
import com.tencent.supersonic.headless.api.pojo.response.QueryResult;
|
||||
import com.tencent.supersonic.headless.core.chat.query.rule.metric.MetricTagQuery;
|
||||
import com.tencent.supersonic.headless.core.chat.query.rule.tag.TagFilterQuery;
|
||||
import com.tencent.supersonic.util.DataUtils;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
package com.tencent.supersonic.chat.mapper;
|
||||
|
||||
import com.tencent.supersonic.headless.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.core.query.rule.metric.MetricTagQuery;
|
||||
import com.tencent.supersonic.chat.BaseTest;
|
||||
import com.tencent.supersonic.util.DataUtils;
|
||||
import com.tencent.supersonic.chat.api.pojo.request.ChatParseReq;
|
||||
import com.tencent.supersonic.common.pojo.DateConf;
|
||||
import com.tencent.supersonic.common.pojo.enums.FilterOperatorEnum;
|
||||
import com.tencent.supersonic.common.pojo.enums.QueryType;
|
||||
import com.tencent.supersonic.headless.api.pojo.SchemaElement;
|
||||
import com.tencent.supersonic.headless.api.pojo.SemanticParseInfo;
|
||||
import com.tencent.supersonic.headless.api.pojo.request.QueryFilter;
|
||||
import com.tencent.supersonic.headless.api.pojo.response.QueryResult;
|
||||
import com.tencent.supersonic.headless.core.chat.query.rule.metric.MetricTagQuery;
|
||||
import com.tencent.supersonic.util.DataUtils;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static com.tencent.supersonic.common.pojo.enums.AggregateTypeEnum.NONE;
|
||||
@@ -20,8 +20,8 @@ public class MapperTest extends BaseTest {
|
||||
@Test
|
||||
public void hanlp() throws Exception {
|
||||
|
||||
QueryReq queryContextReq = DataUtils.getQueryContextReq(10, "艺人周杰伦的播放量");
|
||||
queryContextReq.setAgentId(DataUtils.tagAgentId);
|
||||
ChatParseReq chatParseReq = DataUtils.getChatParseReq(10, "艺人周杰伦的播放量");
|
||||
chatParseReq.setAgentId(DataUtils.tagAgentId);
|
||||
|
||||
QueryResult actualResult = submitNewChat("艺人周杰伦的播放量", DataUtils.tagAgentId);
|
||||
|
||||
|
||||
@@ -1,23 +0,0 @@
|
||||
package com.tencent.supersonic.chat.plugin;
|
||||
|
||||
import com.tencent.supersonic.BaseApplication;
|
||||
import com.tencent.supersonic.chat.api.pojo.response.QueryResult;
|
||||
import com.tencent.supersonic.chat.api.pojo.response.QueryState;
|
||||
import com.tencent.supersonic.chat.core.query.plugin.WebBase;
|
||||
import com.tencent.supersonic.chat.core.query.plugin.webpage.WebPageQuery;
|
||||
import com.tencent.supersonic.chat.core.query.plugin.webpage.WebPageResp;
|
||||
import org.junit.Assert;
|
||||
|
||||
public class BasePluginTest extends BaseApplication {
|
||||
|
||||
protected void assertPluginRecognizeResult(QueryResult queryResult) {
|
||||
Assert.assertEquals(queryResult.getQueryState(), QueryState.SUCCESS);
|
||||
Assert.assertEquals(queryResult.getQueryMode(), WebPageQuery.QUERY_MODE);
|
||||
WebPageResp webPageResponse = (WebPageResp) queryResult.getResponse();
|
||||
WebBase webPage = webPageResponse.getWebPage();
|
||||
Assert.assertEquals(webPage.getUrl(), "www.yourbi.com");
|
||||
Assert.assertEquals(1, webPage.getParams().size());
|
||||
Assert.assertEquals("alice", webPage.getParams().get(0).getValue());
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,87 +0,0 @@
|
||||
package com.tencent.supersonic.chat.plugin;
|
||||
|
||||
import com.tencent.supersonic.chat.api.pojo.request.ExecuteQueryReq;
|
||||
import com.tencent.supersonic.chat.api.pojo.request.QueryFilter;
|
||||
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.core.plugin.PluginManager;
|
||||
import com.tencent.supersonic.chat.MockConfiguration;
|
||||
import com.tencent.supersonic.util.DataUtils;
|
||||
import com.tencent.supersonic.chat.server.service.AgentService;
|
||||
import com.tencent.supersonic.chat.server.service.QueryService;
|
||||
import com.tencent.supersonic.common.config.EmbeddingConfig;
|
||||
import org.junit.Assert;
|
||||
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
|
||||
protected PluginManager pluginManager;
|
||||
|
||||
@MockBean
|
||||
private EmbeddingConfig embeddingConfig;
|
||||
|
||||
@MockBean
|
||||
private AgentService agentService;
|
||||
|
||||
@Autowired
|
||||
@Qualifier("chatQueryService")
|
||||
private QueryService queryService;
|
||||
|
||||
public void webPageRecognize() throws Exception {
|
||||
MockConfiguration.mockEmbeddingRecognize(pluginManager, "alice最近的访问情况怎么样", "1");
|
||||
MockConfiguration.mockEmbeddingUrl(embeddingConfig);
|
||||
QueryReq queryContextReq = DataUtils.getQueryReqWithAgent(1000, "alice最近的访问情况怎么样", 1);
|
||||
|
||||
ParseResp parseResp = queryService.performParsing(queryContextReq);
|
||||
ExecuteQueryReq executeReq = ExecuteQueryReq.builder().user(queryContextReq.getUser())
|
||||
.chatId(parseResp.getChatId())
|
||||
.queryId(parseResp.getQueryId())
|
||||
.queryText(parseResp.getQueryText())
|
||||
.parseInfo(parseResp.getSelectedParses().get(0))
|
||||
.build();
|
||||
QueryResult queryResult = queryService.performExecution(executeReq);
|
||||
|
||||
assertPluginRecognizeResult(queryResult);
|
||||
}
|
||||
|
||||
public void webPageRecognizeWithQueryFilter() throws Exception {
|
||||
MockConfiguration.mockEmbeddingRecognize(pluginManager, "在超音数最近的情况怎么样", "1");
|
||||
MockConfiguration.mockEmbeddingUrl(embeddingConfig);
|
||||
QueryReq queryRequest = DataUtils.getQueryReqWithAgent(1000, "在超音数最近的情况怎么样", 1);
|
||||
QueryFilters queryFilters = new QueryFilters();
|
||||
QueryFilter queryFilter = new QueryFilter();
|
||||
queryFilter.setElementID(2L);
|
||||
queryFilter.setValue("alice");
|
||||
// queryRequest.setModelId(1L);
|
||||
queryFilters.getFilters().add(queryFilter);
|
||||
queryRequest.setQueryFilters(queryFilters);
|
||||
|
||||
ParseResp parseResp = queryService.performParsing(queryRequest);
|
||||
ExecuteQueryReq executeReq = ExecuteQueryReq.builder().user(queryRequest.getUser())
|
||||
.chatId(parseResp.getChatId())
|
||||
.queryId(parseResp.getQueryId())
|
||||
.queryText(parseResp.getQueryText())
|
||||
.parseInfo(parseResp.getSelectedParses().get(0))
|
||||
.build();
|
||||
QueryResult queryResult = queryService.performExecution(executeReq);
|
||||
|
||||
assertPluginRecognizeResult(queryResult);
|
||||
}
|
||||
|
||||
public void pluginRecognizeWithAgent() {
|
||||
MockConfiguration.mockEmbeddingRecognize(pluginManager, "alice最近的访问情况怎么样", "1");
|
||||
MockConfiguration.mockEmbeddingUrl(embeddingConfig);
|
||||
MockConfiguration.mockMetricAgent(agentService);
|
||||
QueryReq queryContextReq = DataUtils.getQueryReqWithAgent(1000, "alice最近的访问情况怎么样",
|
||||
DataUtils.getMetricAgent().getId());
|
||||
ParseResp parseResp = queryService.performParsing(queryContextReq);
|
||||
Assert.assertTrue(parseResp.getSelectedParses() != null
|
||||
&& parseResp.getSelectedParses().size() > 0);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -2,12 +2,12 @@ package com.tencent.supersonic.headless;
|
||||
|
||||
|
||||
import com.tencent.supersonic.auth.api.authentication.pojo.User;
|
||||
import com.tencent.supersonic.chat.core.utils.QueryReqBuilder;
|
||||
import com.tencent.supersonic.headless.api.pojo.enums.QueryType;
|
||||
import com.tencent.supersonic.headless.api.pojo.enums.QueryMethod;
|
||||
import com.tencent.supersonic.headless.api.pojo.request.ExplainSqlReq;
|
||||
import com.tencent.supersonic.headless.api.pojo.request.QuerySqlReq;
|
||||
import com.tencent.supersonic.headless.api.pojo.request.QueryStructReq;
|
||||
import com.tencent.supersonic.headless.api.pojo.response.ExplainResp;
|
||||
import com.tencent.supersonic.headless.core.utils.QueryReqBuilder;
|
||||
import com.tencent.supersonic.util.DataUtils;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
@@ -22,7 +22,7 @@ public class ExplainTest extends BaseTest {
|
||||
public void testSqlExplain() throws Exception {
|
||||
String sql = "SELECT 部门, SUM(访问次数) AS 访问次数 FROM 超音数PVUV统计 GROUP BY 部门 ";
|
||||
ExplainSqlReq<QuerySqlReq> explainSqlReq = ExplainSqlReq.<QuerySqlReq>builder()
|
||||
.queryTypeEnum(QueryType.SQL)
|
||||
.queryTypeEnum(QueryMethod.SQL)
|
||||
.queryReq(QueryReqBuilder.buildS2SQLReq(sql, DataUtils.getMetricAgentView()))
|
||||
.build();
|
||||
ExplainResp explain = queryService.explain(explainSqlReq, User.getFakeUser());
|
||||
@@ -36,7 +36,7 @@ public class ExplainTest extends BaseTest {
|
||||
public void testStructExplain() throws Exception {
|
||||
QueryStructReq queryStructReq = buildQueryStructReq(Arrays.asList("department"));
|
||||
ExplainSqlReq<QueryStructReq> explainSqlReq = ExplainSqlReq.<QueryStructReq>builder()
|
||||
.queryTypeEnum(QueryType.STRUCT)
|
||||
.queryTypeEnum(QueryMethod.STRUCT)
|
||||
.queryReq(queryStructReq)
|
||||
.build();
|
||||
ExplainResp explain = queryService.explain(explainSqlReq, User.getFakeUser());
|
||||
|
||||
@@ -3,16 +3,17 @@ package com.tencent.supersonic.util;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.tencent.supersonic.auth.api.authentication.pojo.User;
|
||||
import com.tencent.supersonic.headless.api.pojo.SchemaElement;
|
||||
import com.tencent.supersonic.chat.api.pojo.request.QueryFilter;
|
||||
import com.tencent.supersonic.chat.api.pojo.request.QueryReq;
|
||||
import com.tencent.supersonic.chat.core.agent.Agent;
|
||||
import com.tencent.supersonic.chat.core.agent.AgentConfig;
|
||||
import com.tencent.supersonic.chat.core.agent.AgentToolType;
|
||||
import com.tencent.supersonic.chat.core.agent.PluginTool;
|
||||
import com.tencent.supersonic.chat.core.agent.RuleParserTool;
|
||||
import com.tencent.supersonic.chat.api.pojo.request.ChatParseReq;
|
||||
import com.tencent.supersonic.chat.server.agent.Agent;
|
||||
import com.tencent.supersonic.chat.server.agent.AgentConfig;
|
||||
import com.tencent.supersonic.chat.server.agent.AgentToolType;
|
||||
import com.tencent.supersonic.chat.server.agent.PluginTool;
|
||||
import com.tencent.supersonic.chat.server.agent.RuleParserTool;
|
||||
import com.tencent.supersonic.common.pojo.DateConf;
|
||||
import com.tencent.supersonic.common.pojo.enums.FilterOperatorEnum;
|
||||
import com.tencent.supersonic.headless.api.pojo.SchemaElement;
|
||||
import com.tencent.supersonic.headless.api.pojo.request.QueryFilter;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
@@ -41,16 +42,16 @@ public class DataUtils {
|
||||
return User.get(3L, "tom");
|
||||
}
|
||||
|
||||
public static QueryReq getQueryContextReq(Integer id, String query) {
|
||||
QueryReq queryContextReq = new QueryReq();
|
||||
queryContextReq.setQueryText(query);
|
||||
queryContextReq.setChatId(id);
|
||||
queryContextReq.setUser(user_test);
|
||||
return queryContextReq;
|
||||
public static ChatParseReq getChatParseReq(Integer id, String query) {
|
||||
ChatParseReq chatParseReq = new ChatParseReq();
|
||||
chatParseReq.setQueryText(query);
|
||||
chatParseReq.setChatId(id);
|
||||
chatParseReq.setUser(user_test);
|
||||
return chatParseReq;
|
||||
}
|
||||
|
||||
public static QueryReq getQueryReqWithAgent(Integer id, String query, Integer agentId) {
|
||||
QueryReq queryReq = new QueryReq();
|
||||
public static ChatParseReq getChatParseReqWithAgent(Integer id, String query, Integer agentId) {
|
||||
ChatParseReq queryReq = new ChatParseReq();
|
||||
queryReq.setQueryText(query);
|
||||
queryReq.setChatId(id);
|
||||
queryReq.setUser(user_test);
|
||||
|
||||
@@ -1,35 +1,28 @@
|
||||
com.tencent.supersonic.chat.core.mapper.SchemaMapper=\
|
||||
com.tencent.supersonic.chat.core.mapper.EmbeddingMapper, \
|
||||
com.tencent.supersonic.chat.core.mapper.KeywordMapper, \
|
||||
com.tencent.supersonic.chat.core.mapper.QueryFilterMapper, \
|
||||
com.tencent.supersonic.chat.core.mapper.EntityMapper
|
||||
com.tencent.supersonic.headless.core.chat.mapper.SchemaMapper=\
|
||||
com.tencent.supersonic.headless.core.chat.mapper.EmbeddingMapper, \
|
||||
com.tencent.supersonic.headless.core.chat.mapper.KeywordMapper, \
|
||||
com.tencent.supersonic.headless.core.chat.mapper.QueryFilterMapper, \
|
||||
com.tencent.supersonic.headless.core.chat.mapper.EntityMapper
|
||||
|
||||
com.tencent.supersonic.chat.core.parser.SemanticParser=\
|
||||
com.tencent.supersonic.chat.core.parser.sql.rule.RuleSqlParser, \
|
||||
com.tencent.supersonic.chat.core.parser.sql.llm.LLMSqlParser, \
|
||||
com.tencent.supersonic.chat.core.parser.plugin.embedding.EmbeddingRecallParser, \
|
||||
com.tencent.supersonic.chat.core.parser.plugin.function.FunctionCallParser, \
|
||||
com.tencent.supersonic.chat.core.parser.QueryTypeParser
|
||||
com.tencent.supersonic.headless.core.chat.parser.SemanticParser=\
|
||||
com.tencent.supersonic.headless.core.chat.parser.rule.RuleSqlParser, \
|
||||
com.tencent.supersonic.headless.core.chat.parser.llm.LLMSqlParser, \
|
||||
com.tencent.supersonic.headless.core.chat.parser.QueryTypeParser
|
||||
|
||||
com.tencent.supersonic.chat.core.corrector.SemanticCorrector=\
|
||||
com.tencent.supersonic.chat.core.corrector.SchemaCorrector, \
|
||||
com.tencent.supersonic.chat.core.corrector.TimeCorrector, \
|
||||
com.tencent.supersonic.chat.core.corrector.GrammarCorrector
|
||||
com.tencent.supersonic.headless.core.chat.corrector.SemanticCorrector=\
|
||||
com.tencent.supersonic.headless.core.chat.corrector.SchemaCorrector, \
|
||||
com.tencent.supersonic.headless.core.chat.corrector.TimeCorrector, \
|
||||
com.tencent.supersonic.headless.core.chat.corrector.GrammarCorrector
|
||||
|
||||
com.tencent.supersonic.chat.server.processor.parse.ParseResultProcessor=\
|
||||
com.tencent.supersonic.chat.server.processor.parse.ParseInfoProcessor, \
|
||||
com.tencent.supersonic.chat.server.processor.parse.QueryRankProcessor, \
|
||||
com.tencent.supersonic.chat.server.processor.parse.EntityInfoProcessor, \
|
||||
com.tencent.supersonic.chat.server.processor.parse.SqlInfoProcessor, \
|
||||
com.tencent.supersonic.chat.server.processor.parse.TimeCostProcessor, \
|
||||
com.tencent.supersonic.chat.server.processor.parse.RespBuildProcessor, \
|
||||
com.tencent.supersonic.chat.server.processor.parse.QueryRecommendProcessor
|
||||
com.tencent.supersonic.headless.server.processor.ResultProcessor=\
|
||||
com.tencent.supersonic.headless.server.processor.ParseInfoProcessor, \
|
||||
com.tencent.supersonic.headless.server.processor.QueryRankProcessor, \
|
||||
com.tencent.supersonic.headless.server.processor.SqlInfoProcessor, \
|
||||
com.tencent.supersonic.headless.server.processor.TimeCostProcessor, \
|
||||
com.tencent.supersonic.headless.server.processor.RespBuildProcessor
|
||||
|
||||
com.tencent.supersonic.chat.core.query.semantic.SemanticInterpreter=\
|
||||
com.tencent.supersonic.chat.core.query.semantic.LocalSemanticInterpreter
|
||||
|
||||
com.tencent.supersonic.chat.core.parser.sql.llm.ViewResolver=\
|
||||
com.tencent.supersonic.chat.core.parser.sql.llm.HeuristicViewResolver
|
||||
com.tencent.supersonic.headless.core.chat.parser.llm.DataSetResolver=\
|
||||
com.tencent.supersonic.headless.core.chat.parser.llm.HeuristicDataSetResolver
|
||||
|
||||
com.tencent.supersonic.auth.authentication.interceptor.AuthenticationInterceptor=\
|
||||
com.tencent.supersonic.auth.authentication.interceptor.DefaultAuthenticationInterceptor
|
||||
@@ -39,7 +32,8 @@ com.tencent.supersonic.auth.api.authentication.adaptor.UserAdaptor=\
|
||||
|
||||
com.tencent.supersonic.chat.server.processor.execute.ExecuteResultProcessor=\
|
||||
com.tencent.supersonic.chat.server.processor.execute.MetricRecommendProcessor,\
|
||||
com.tencent.supersonic.chat.server.processor.execute.DimensionRecommendProcessor
|
||||
com.tencent.supersonic.chat.server.processor.execute.DimensionRecommendProcessor,\
|
||||
com.tencent.supersonic.chat.server.processor.execute.MetricRatioProcessor
|
||||
|
||||
com.tencent.supersonic.common.util.embedding.S2EmbeddingStore=\
|
||||
com.tencent.supersonic.common.util.embedding.InMemoryS2EmbeddingStore
|
||||
com.tencent.supersonic.common.util.embedding.InMemoryS2EmbeddingStore
|
||||
|
||||
Reference in New Issue
Block a user