mirror of
https://github.com/tencentmusic/supersonic.git
synced 2025-12-11 03:58:14 +00:00
[improvement][chat]Rename LLMInterpreter as LLMProxy
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
package com.tencent.supersonic.chat.agent;
|
package com.tencent.supersonic.chat.agent;
|
||||||
|
|
||||||
import com.tencent.supersonic.chat.parser.llm.interpret.MetricOption;
|
import com.tencent.supersonic.chat.parser.llm.analytics.MetricOption;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|||||||
@@ -6,10 +6,11 @@ import com.tencent.supersonic.chat.query.llm.s2sql.LLMReq;
|
|||||||
import com.tencent.supersonic.chat.query.llm.s2sql.LLMResp;
|
import com.tencent.supersonic.chat.query.llm.s2sql.LLMResp;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Unified interpreter for invoking the llm layer.
|
* LLMProxy encapsulates functions performed by LLMs so that multiple
|
||||||
|
* orchestration frameworks (e.g. LangChain in python, LangChain4j in java)
|
||||||
|
* could be used.
|
||||||
*/
|
*/
|
||||||
public interface LLMInterpreter {
|
public interface LLMProxy {
|
||||||
|
|
||||||
|
|
||||||
LLMResp query2sql(LLMReq llmReq, String modelClusterKey);
|
LLMResp query2sql(LLMReq llmReq, String modelClusterKey);
|
||||||
|
|
||||||
@@ -20,8 +20,11 @@ import org.springframework.http.ResponseEntity;
|
|||||||
import org.springframework.web.client.RestTemplate;
|
import org.springframework.web.client.RestTemplate;
|
||||||
import org.springframework.web.util.UriComponentsBuilder;
|
import org.springframework.web.util.UriComponentsBuilder;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* PythonLLMProxy sends requests to LangChain-based python service.
|
||||||
|
*/
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class HttpLLMInterpreter implements LLMInterpreter {
|
public class PythonLLMProxy implements LLMProxy {
|
||||||
|
|
||||||
public LLMResp query2sql(LLMReq llmReq, String modelClusterKey) {
|
public LLMResp query2sql(LLMReq llmReq, String modelClusterKey) {
|
||||||
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.tencent.supersonic.chat.parser.llm.interpret;
|
package com.tencent.supersonic.chat.parser.llm.analytics;
|
||||||
|
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import com.google.common.collect.Sets;
|
import com.google.common.collect.Sets;
|
||||||
@@ -34,12 +34,12 @@ import java.util.Set;
|
|||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class MetricInterpretParser implements SemanticParser {
|
public class MetricAnalyzeParser implements SemanticParser {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void parse(QueryContext queryContext, ChatContext chatContext) {
|
public void parse(QueryContext queryContext, ChatContext chatContext) {
|
||||||
if (SatisfactionChecker.check(queryContext)) {
|
if (SatisfactionChecker.check(queryContext)) {
|
||||||
log.info("skip MetricInterpretParser");
|
log.info("skip MetricAnalyzeParser");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Map<Long, DataAnalyticsTool> metricInterpretToolMap =
|
Map<Long, DataAnalyticsTool> metricInterpretToolMap =
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.tencent.supersonic.chat.parser.llm.interpret;
|
package com.tencent.supersonic.chat.parser.llm.analytics;
|
||||||
|
|
||||||
|
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
@@ -12,7 +12,7 @@ import com.tencent.supersonic.chat.api.pojo.SemanticSchema;
|
|||||||
import com.tencent.supersonic.chat.api.pojo.request.QueryReq;
|
import com.tencent.supersonic.chat.api.pojo.request.QueryReq;
|
||||||
import com.tencent.supersonic.chat.config.LLMParserConfig;
|
import com.tencent.supersonic.chat.config.LLMParserConfig;
|
||||||
import com.tencent.supersonic.chat.config.OptimizationConfig;
|
import com.tencent.supersonic.chat.config.OptimizationConfig;
|
||||||
import com.tencent.supersonic.chat.parser.LLMInterpreter;
|
import com.tencent.supersonic.chat.parser.LLMProxy;
|
||||||
import com.tencent.supersonic.chat.parser.SatisfactionChecker;
|
import com.tencent.supersonic.chat.parser.SatisfactionChecker;
|
||||||
import com.tencent.supersonic.chat.query.llm.s2sql.LLMReq;
|
import com.tencent.supersonic.chat.query.llm.s2sql.LLMReq;
|
||||||
import com.tencent.supersonic.chat.query.llm.s2sql.LLMReq.ElementValue;
|
import com.tencent.supersonic.chat.query.llm.s2sql.LLMReq.ElementValue;
|
||||||
@@ -47,7 +47,7 @@ import java.util.stream.Collectors;
|
|||||||
@Service
|
@Service
|
||||||
public class LLMRequestService {
|
public class LLMRequestService {
|
||||||
|
|
||||||
protected LLMInterpreter llmInterpreter = ComponentFactory.getLLMInterpreter();
|
protected LLMProxy llmProxy = ComponentFactory.getLLMProxy();
|
||||||
|
|
||||||
protected SemanticInterpreter semanticInterpreter = ComponentFactory.getSemanticLayer();
|
protected SemanticInterpreter semanticInterpreter = ComponentFactory.getSemanticLayer();
|
||||||
@Autowired
|
@Autowired
|
||||||
@@ -143,7 +143,7 @@ public class LLMRequestService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public LLMResp requestLLM(LLMReq llmReq, String modelClusterKey) {
|
public LLMResp requestLLM(LLMReq llmReq, String modelClusterKey) {
|
||||||
return llmInterpreter.query2sql(llmReq, modelClusterKey);
|
return llmProxy.query2sql(llmReq, modelClusterKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected List<String> getFieldNameList(QueryContext queryCtx, ModelCluster modelCluster,
|
protected List<String> getFieldNameList(QueryContext queryCtx, ModelCluster modelCluster,
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ package com.tencent.supersonic.chat.parser.plugin.embedding;
|
|||||||
|
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import com.tencent.supersonic.chat.api.pojo.QueryContext;
|
import com.tencent.supersonic.chat.api.pojo.QueryContext;
|
||||||
import com.tencent.supersonic.chat.parser.HttpLLMInterpreter;
|
import com.tencent.supersonic.chat.parser.PythonLLMProxy;
|
||||||
import com.tencent.supersonic.chat.parser.LLMInterpreter;
|
import com.tencent.supersonic.chat.parser.LLMProxy;
|
||||||
import com.tencent.supersonic.chat.parser.ParseMode;
|
import com.tencent.supersonic.chat.parser.ParseMode;
|
||||||
import com.tencent.supersonic.chat.parser.plugin.PluginParser;
|
import com.tencent.supersonic.chat.parser.plugin.PluginParser;
|
||||||
import com.tencent.supersonic.chat.plugin.Plugin;
|
import com.tencent.supersonic.chat.plugin.Plugin;
|
||||||
@@ -25,12 +25,12 @@ import org.springframework.util.CollectionUtils;
|
|||||||
@Slf4j
|
@Slf4j
|
||||||
public class EmbeddingBasedParser extends PluginParser {
|
public class EmbeddingBasedParser extends PluginParser {
|
||||||
|
|
||||||
protected LLMInterpreter llmInterpreter = ComponentFactory.getLLMInterpreter();
|
protected LLMProxy llmInterpreter = ComponentFactory.getLLMProxy();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean checkPreCondition(QueryContext queryContext) {
|
public boolean checkPreCondition(QueryContext queryContext) {
|
||||||
EmbeddingConfig embeddingConfig = ContextUtils.getBean(EmbeddingConfig.class);
|
EmbeddingConfig embeddingConfig = ContextUtils.getBean(EmbeddingConfig.class);
|
||||||
if (StringUtils.isBlank(embeddingConfig.getUrl()) && llmInterpreter instanceof HttpLLMInterpreter) {
|
if (StringUtils.isBlank(embeddingConfig.getUrl()) && llmInterpreter instanceof PythonLLMProxy) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
List<Plugin> plugins = getPluginList(queryContext);
|
List<Plugin> plugins = getPluginList(queryContext);
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
package com.tencent.supersonic.chat.parser.plugin.function;
|
package com.tencent.supersonic.chat.parser.plugin.function;
|
||||||
|
|
||||||
import com.tencent.supersonic.chat.api.pojo.QueryContext;
|
import com.tencent.supersonic.chat.api.pojo.QueryContext;
|
||||||
import com.tencent.supersonic.chat.parser.HttpLLMInterpreter;
|
import com.tencent.supersonic.chat.parser.PythonLLMProxy;
|
||||||
import com.tencent.supersonic.chat.parser.LLMInterpreter;
|
import com.tencent.supersonic.chat.parser.LLMProxy;
|
||||||
import com.tencent.supersonic.chat.parser.ParseMode;
|
import com.tencent.supersonic.chat.parser.ParseMode;
|
||||||
import com.tencent.supersonic.chat.parser.plugin.PluginParser;
|
import com.tencent.supersonic.chat.parser.plugin.PluginParser;
|
||||||
import com.tencent.supersonic.chat.plugin.Plugin;
|
import com.tencent.supersonic.chat.plugin.Plugin;
|
||||||
@@ -27,13 +27,13 @@ import org.springframework.util.CollectionUtils;
|
|||||||
@Slf4j
|
@Slf4j
|
||||||
public class FunctionBasedParser extends PluginParser {
|
public class FunctionBasedParser extends PluginParser {
|
||||||
|
|
||||||
protected LLMInterpreter llmInterpreter = ComponentFactory.getLLMInterpreter();
|
protected LLMProxy llmInterpreter = ComponentFactory.getLLMProxy();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean checkPreCondition(QueryContext queryContext) {
|
public boolean checkPreCondition(QueryContext queryContext) {
|
||||||
FunctionCallConfig functionCallConfig = ContextUtils.getBean(FunctionCallConfig.class);
|
FunctionCallConfig functionCallConfig = ContextUtils.getBean(FunctionCallConfig.class);
|
||||||
String functionUrl = functionCallConfig.getUrl();
|
String functionUrl = functionCallConfig.getUrl();
|
||||||
if (StringUtils.isBlank(functionUrl) && llmInterpreter instanceof HttpLLMInterpreter) {
|
if (StringUtils.isBlank(functionUrl) && llmInterpreter instanceof PythonLLMProxy) {
|
||||||
log.info("functionUrl:{}, skip function parser, queryText:{}", functionUrl,
|
log.info("functionUrl:{}, skip function parser, queryText:{}", functionUrl,
|
||||||
queryContext.getRequest().getQueryText());
|
queryContext.getRequest().getQueryText());
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import com.tencent.supersonic.chat.api.component.SchemaMapper;
|
|||||||
import com.tencent.supersonic.chat.api.component.SemanticCorrector;
|
import com.tencent.supersonic.chat.api.component.SemanticCorrector;
|
||||||
import com.tencent.supersonic.chat.api.component.SemanticInterpreter;
|
import com.tencent.supersonic.chat.api.component.SemanticInterpreter;
|
||||||
import com.tencent.supersonic.chat.api.component.SemanticParser;
|
import com.tencent.supersonic.chat.api.component.SemanticParser;
|
||||||
import com.tencent.supersonic.chat.parser.LLMInterpreter;
|
import com.tencent.supersonic.chat.parser.LLMProxy;
|
||||||
import com.tencent.supersonic.chat.parser.llm.s2sql.ModelResolver;
|
import com.tencent.supersonic.chat.parser.llm.s2sql.ModelResolver;
|
||||||
import com.tencent.supersonic.chat.processor.ResponseProcessor;
|
import com.tencent.supersonic.chat.processor.ResponseProcessor;
|
||||||
import com.tencent.supersonic.chat.responder.QueryResponder;
|
import com.tencent.supersonic.chat.responder.QueryResponder;
|
||||||
@@ -21,7 +21,7 @@ public class ComponentFactory {
|
|||||||
private static List<SemanticCorrector> semanticCorrectors = new ArrayList<>();
|
private static List<SemanticCorrector> semanticCorrectors = new ArrayList<>();
|
||||||
private static SemanticInterpreter semanticInterpreter;
|
private static SemanticInterpreter semanticInterpreter;
|
||||||
|
|
||||||
private static LLMInterpreter llmInterpreter;
|
private static LLMProxy llmProxy;
|
||||||
private static List<ResponseProcessor> responseProcessors = new ArrayList<>();
|
private static List<ResponseProcessor> responseProcessors = new ArrayList<>();
|
||||||
private static List<QueryResponder> executeResponders = new ArrayList<>();
|
private static List<QueryResponder> executeResponders = new ArrayList<>();
|
||||||
private static ModelResolver modelResolver;
|
private static ModelResolver modelResolver;
|
||||||
@@ -56,11 +56,11 @@ public class ComponentFactory {
|
|||||||
return semanticInterpreter;
|
return semanticInterpreter;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static LLMInterpreter getLLMInterpreter() {
|
public static LLMProxy getLLMProxy() {
|
||||||
if (Objects.isNull(llmInterpreter)) {
|
if (Objects.isNull(llmProxy)) {
|
||||||
llmInterpreter = init(LLMInterpreter.class);
|
llmProxy = init(LLMProxy.class);
|
||||||
}
|
}
|
||||||
return llmInterpreter;
|
return llmProxy;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ModelResolver getModelResolver() {
|
public static ModelResolver getModelResolver() {
|
||||||
|
|||||||
@@ -19,8 +19,8 @@ com.tencent.supersonic.chat.api.component.SemanticCorrector=\
|
|||||||
com.tencent.supersonic.chat.corrector.GroupByCorrector, \
|
com.tencent.supersonic.chat.corrector.GroupByCorrector, \
|
||||||
com.tencent.supersonic.chat.corrector.HavingCorrector
|
com.tencent.supersonic.chat.corrector.HavingCorrector
|
||||||
|
|
||||||
com.tencent.supersonic.chat.parser.LLMInterpreter=\
|
com.tencent.supersonic.chat.parser.LLMProxy=\
|
||||||
com.tencent.supersonic.chat.parser.HttpLLMInterpreter
|
com.tencent.supersonic.chat.parser.PythonLLMProxy
|
||||||
|
|
||||||
com.tencent.supersonic.chat.api.component.SemanticInterpreter=\
|
com.tencent.supersonic.chat.api.component.SemanticInterpreter=\
|
||||||
com.tencent.supersonic.knowledge.semantic.RemoteSemanticInterpreter
|
com.tencent.supersonic.knowledge.semantic.RemoteSemanticInterpreter
|
||||||
|
|||||||
@@ -30,8 +30,8 @@ com.tencent.supersonic.chat.processor.ResponseProcessor=\
|
|||||||
com.tencent.supersonic.chat.processor.TimeCostProcessor, \
|
com.tencent.supersonic.chat.processor.TimeCostProcessor, \
|
||||||
com.tencent.supersonic.chat.processor.RespBuildProcessor
|
com.tencent.supersonic.chat.processor.RespBuildProcessor
|
||||||
|
|
||||||
com.tencent.supersonic.chat.parser.LLMInterpreter=\
|
com.tencent.supersonic.chat.parser.LLMProxy=\
|
||||||
com.tencent.supersonic.chat.parser.HttpLLMInterpreter
|
com.tencent.supersonic.chat.parser.PythonLLMProxy
|
||||||
|
|
||||||
com.tencent.supersonic.chat.api.component.SemanticInterpreter=\
|
com.tencent.supersonic.chat.api.component.SemanticInterpreter=\
|
||||||
com.tencent.supersonic.knowledge.semantic.LocalSemanticInterpreter
|
com.tencent.supersonic.knowledge.semantic.LocalSemanticInterpreter
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import com.tencent.supersonic.chat.api.pojo.SchemaElement;
|
|||||||
import com.tencent.supersonic.chat.api.pojo.SchemaElementType;
|
import com.tencent.supersonic.chat.api.pojo.SchemaElementType;
|
||||||
import com.tencent.supersonic.chat.api.pojo.request.QueryFilter;
|
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.request.QueryReq;
|
||||||
import com.tencent.supersonic.chat.parser.llm.interpret.MetricOption;
|
import com.tencent.supersonic.chat.parser.llm.analytics.MetricOption;
|
||||||
import com.tencent.supersonic.common.pojo.DateConf;
|
import com.tencent.supersonic.common.pojo.DateConf;
|
||||||
import com.tencent.supersonic.common.pojo.enums.FilterOperatorEnum;
|
import com.tencent.supersonic.common.pojo.enums.FilterOperatorEnum;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user