(improvement)(Chat) Move chat-core to headless (#805)

Co-authored-by: jolunoluo
This commit is contained in:
LXW
2024-03-12 22:20:30 +08:00
committed by GitHub
parent f152deeb81
commit f93bee81cb
301 changed files with 2256 additions and 4527 deletions

View File

@@ -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>

View File

@@ -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>

View File

@@ -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 {

View File

@@ -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

View File

@@ -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

View File

@@ -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) {

View File

@@ -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 {

View File

@@ -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;

View File

@@ -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

View File

@@ -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;

View File

@@ -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);

View File

@@ -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());
}
}

View File

@@ -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);
}
}

View File

@@ -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());

View File

@@ -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);

View File

@@ -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