From 82cfb3050d0e7304825f566486aaa6d9e8ec30ff Mon Sep 17 00:00:00 2001 From: jerryjzhang Date: Wed, 29 Nov 2023 16:57:48 +0800 Subject: [PATCH] [improvement][chat]Rename LLMInterpreter as LLMProxy --- .../supersonic/chat/agent/DataAnalyticsTool.java | 2 +- .../parser/{LLMInterpreter.java => LLMProxy.java} | 7 ++++--- .../{HttpLLMInterpreter.java => PythonLLMProxy.java} | 5 ++++- .../MetricAnalyzeParser.java} | 6 +++--- .../llm/{interpret => analytics}/MetricOption.java | 2 +- .../chat/parser/llm/s2sql/LLMRequestService.java | 6 +++--- .../plugin/embedding/EmbeddingBasedParser.java | 8 ++++---- .../parser/plugin/function/FunctionBasedParser.java | 8 ++++---- .../supersonic/chat/utils/ComponentFactory.java | 12 ++++++------ .../src/main/resources/META-INF/spring.factories | 4 ++-- .../src/main/resources/META-INF/spring.factories | 4 ++-- .../java/com/tencent/supersonic/util/DataUtils.java | 2 +- 12 files changed, 35 insertions(+), 31 deletions(-) rename chat/core/src/main/java/com/tencent/supersonic/chat/parser/{LLMInterpreter.java => LLMProxy.java} (69%) rename chat/core/src/main/java/com/tencent/supersonic/chat/parser/{HttpLLMInterpreter.java => PythonLLMProxy.java} (96%) rename chat/core/src/main/java/com/tencent/supersonic/chat/parser/llm/{interpret/MetricInterpretParser.java => analytics/MetricAnalyzeParser.java} (97%) rename chat/core/src/main/java/com/tencent/supersonic/chat/parser/llm/{interpret => analytics}/MetricOption.java (76%) diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/agent/DataAnalyticsTool.java b/chat/core/src/main/java/com/tencent/supersonic/chat/agent/DataAnalyticsTool.java index b86ee44d9..a31643668 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/agent/DataAnalyticsTool.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/agent/DataAnalyticsTool.java @@ -1,6 +1,6 @@ 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 java.util.List; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/LLMInterpreter.java b/chat/core/src/main/java/com/tencent/supersonic/chat/parser/LLMProxy.java similarity index 69% rename from chat/core/src/main/java/com/tencent/supersonic/chat/parser/LLMInterpreter.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/parser/LLMProxy.java index e92c40b77..8f242f102 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/LLMInterpreter.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/parser/LLMProxy.java @@ -6,10 +6,11 @@ import com.tencent.supersonic.chat.query.llm.s2sql.LLMReq; 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); diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/HttpLLMInterpreter.java b/chat/core/src/main/java/com/tencent/supersonic/chat/parser/PythonLLMProxy.java similarity index 96% rename from chat/core/src/main/java/com/tencent/supersonic/chat/parser/HttpLLMInterpreter.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/parser/PythonLLMProxy.java index 1795845aa..4b457499e 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/HttpLLMInterpreter.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/parser/PythonLLMProxy.java @@ -20,8 +20,11 @@ import org.springframework.http.ResponseEntity; import org.springframework.web.client.RestTemplate; import org.springframework.web.util.UriComponentsBuilder; +/** + * PythonLLMProxy sends requests to LangChain-based python service. + */ @Slf4j -public class HttpLLMInterpreter implements LLMInterpreter { +public class PythonLLMProxy implements LLMProxy { public LLMResp query2sql(LLMReq llmReq, String modelClusterKey) { diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/llm/interpret/MetricInterpretParser.java b/chat/core/src/main/java/com/tencent/supersonic/chat/parser/llm/analytics/MetricAnalyzeParser.java similarity index 97% rename from chat/core/src/main/java/com/tencent/supersonic/chat/parser/llm/interpret/MetricInterpretParser.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/parser/llm/analytics/MetricAnalyzeParser.java index c406b6dfb..941816efa 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/llm/interpret/MetricInterpretParser.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/parser/llm/analytics/MetricAnalyzeParser.java @@ -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.google.common.collect.Sets; @@ -34,12 +34,12 @@ import java.util.Set; import java.util.stream.Collectors; @Slf4j -public class MetricInterpretParser implements SemanticParser { +public class MetricAnalyzeParser implements SemanticParser { @Override public void parse(QueryContext queryContext, ChatContext chatContext) { if (SatisfactionChecker.check(queryContext)) { - log.info("skip MetricInterpretParser"); + log.info("skip MetricAnalyzeParser"); return; } Map metricInterpretToolMap = diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/llm/interpret/MetricOption.java b/chat/core/src/main/java/com/tencent/supersonic/chat/parser/llm/analytics/MetricOption.java similarity index 76% rename from chat/core/src/main/java/com/tencent/supersonic/chat/parser/llm/interpret/MetricOption.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/parser/llm/analytics/MetricOption.java index 46811ff97..a13e85f4e 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/llm/interpret/MetricOption.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/parser/llm/analytics/MetricOption.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.parser.llm.interpret; +package com.tencent.supersonic.chat.parser.llm.analytics; import lombok.AllArgsConstructor; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/llm/s2sql/LLMRequestService.java b/chat/core/src/main/java/com/tencent/supersonic/chat/parser/llm/s2sql/LLMRequestService.java index 9346d61dc..4016a899a 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/llm/s2sql/LLMRequestService.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/parser/llm/s2sql/LLMRequestService.java @@ -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.config.LLMParserConfig; 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.query.llm.s2sql.LLMReq; import com.tencent.supersonic.chat.query.llm.s2sql.LLMReq.ElementValue; @@ -47,7 +47,7 @@ import java.util.stream.Collectors; @Service public class LLMRequestService { - protected LLMInterpreter llmInterpreter = ComponentFactory.getLLMInterpreter(); + protected LLMProxy llmProxy = ComponentFactory.getLLMProxy(); protected SemanticInterpreter semanticInterpreter = ComponentFactory.getSemanticLayer(); @Autowired @@ -143,7 +143,7 @@ public class LLMRequestService { } public LLMResp requestLLM(LLMReq llmReq, String modelClusterKey) { - return llmInterpreter.query2sql(llmReq, modelClusterKey); + return llmProxy.query2sql(llmReq, modelClusterKey); } protected List getFieldNameList(QueryContext queryCtx, ModelCluster modelCluster, diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/plugin/embedding/EmbeddingBasedParser.java b/chat/core/src/main/java/com/tencent/supersonic/chat/parser/plugin/embedding/EmbeddingBasedParser.java index ec102b85b..0c95959da 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/plugin/embedding/EmbeddingBasedParser.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/parser/plugin/embedding/EmbeddingBasedParser.java @@ -2,8 +2,8 @@ package com.tencent.supersonic.chat.parser.plugin.embedding; import com.google.common.collect.Lists; import com.tencent.supersonic.chat.api.pojo.QueryContext; -import com.tencent.supersonic.chat.parser.HttpLLMInterpreter; -import com.tencent.supersonic.chat.parser.LLMInterpreter; +import com.tencent.supersonic.chat.parser.PythonLLMProxy; +import com.tencent.supersonic.chat.parser.LLMProxy; import com.tencent.supersonic.chat.parser.ParseMode; import com.tencent.supersonic.chat.parser.plugin.PluginParser; import com.tencent.supersonic.chat.plugin.Plugin; @@ -25,12 +25,12 @@ import org.springframework.util.CollectionUtils; @Slf4j public class EmbeddingBasedParser extends PluginParser { - protected LLMInterpreter llmInterpreter = ComponentFactory.getLLMInterpreter(); + protected LLMProxy llmInterpreter = ComponentFactory.getLLMProxy(); @Override public boolean checkPreCondition(QueryContext queryContext) { EmbeddingConfig embeddingConfig = ContextUtils.getBean(EmbeddingConfig.class); - if (StringUtils.isBlank(embeddingConfig.getUrl()) && llmInterpreter instanceof HttpLLMInterpreter) { + if (StringUtils.isBlank(embeddingConfig.getUrl()) && llmInterpreter instanceof PythonLLMProxy) { return false; } List plugins = getPluginList(queryContext); diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/plugin/function/FunctionBasedParser.java b/chat/core/src/main/java/com/tencent/supersonic/chat/parser/plugin/function/FunctionBasedParser.java index ccd1f008e..8c11c101e 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/plugin/function/FunctionBasedParser.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/parser/plugin/function/FunctionBasedParser.java @@ -1,8 +1,8 @@ package com.tencent.supersonic.chat.parser.plugin.function; import com.tencent.supersonic.chat.api.pojo.QueryContext; -import com.tencent.supersonic.chat.parser.HttpLLMInterpreter; -import com.tencent.supersonic.chat.parser.LLMInterpreter; +import com.tencent.supersonic.chat.parser.PythonLLMProxy; +import com.tencent.supersonic.chat.parser.LLMProxy; import com.tencent.supersonic.chat.parser.ParseMode; import com.tencent.supersonic.chat.parser.plugin.PluginParser; import com.tencent.supersonic.chat.plugin.Plugin; @@ -27,13 +27,13 @@ import org.springframework.util.CollectionUtils; @Slf4j public class FunctionBasedParser extends PluginParser { - protected LLMInterpreter llmInterpreter = ComponentFactory.getLLMInterpreter(); + protected LLMProxy llmInterpreter = ComponentFactory.getLLMProxy(); @Override public boolean checkPreCondition(QueryContext queryContext) { FunctionCallConfig functionCallConfig = ContextUtils.getBean(FunctionCallConfig.class); 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, queryContext.getRequest().getQueryText()); return false; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/utils/ComponentFactory.java b/chat/core/src/main/java/com/tencent/supersonic/chat/utils/ComponentFactory.java index 123626b20..14f2ba3e8 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/utils/ComponentFactory.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/utils/ComponentFactory.java @@ -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.SemanticInterpreter; 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.processor.ResponseProcessor; import com.tencent.supersonic.chat.responder.QueryResponder; @@ -21,7 +21,7 @@ public class ComponentFactory { private static List semanticCorrectors = new ArrayList<>(); private static SemanticInterpreter semanticInterpreter; - private static LLMInterpreter llmInterpreter; + private static LLMProxy llmProxy; private static List responseProcessors = new ArrayList<>(); private static List executeResponders = new ArrayList<>(); private static ModelResolver modelResolver; @@ -56,11 +56,11 @@ public class ComponentFactory { return semanticInterpreter; } - public static LLMInterpreter getLLMInterpreter() { - if (Objects.isNull(llmInterpreter)) { - llmInterpreter = init(LLMInterpreter.class); + public static LLMProxy getLLMProxy() { + if (Objects.isNull(llmProxy)) { + llmProxy = init(LLMProxy.class); } - return llmInterpreter; + return llmProxy; } public static ModelResolver getModelResolver() { diff --git a/launchers/chat/src/main/resources/META-INF/spring.factories b/launchers/chat/src/main/resources/META-INF/spring.factories index 2c741b70d..2f4c24a2c 100644 --- a/launchers/chat/src/main/resources/META-INF/spring.factories +++ b/launchers/chat/src/main/resources/META-INF/spring.factories @@ -19,8 +19,8 @@ com.tencent.supersonic.chat.api.component.SemanticCorrector=\ com.tencent.supersonic.chat.corrector.GroupByCorrector, \ com.tencent.supersonic.chat.corrector.HavingCorrector -com.tencent.supersonic.chat.parser.LLMInterpreter=\ - com.tencent.supersonic.chat.parser.HttpLLMInterpreter +com.tencent.supersonic.chat.parser.LLMProxy=\ + com.tencent.supersonic.chat.parser.PythonLLMProxy com.tencent.supersonic.chat.api.component.SemanticInterpreter=\ com.tencent.supersonic.knowledge.semantic.RemoteSemanticInterpreter diff --git a/launchers/standalone/src/main/resources/META-INF/spring.factories b/launchers/standalone/src/main/resources/META-INF/spring.factories index 5e8d5378c..c229b6e49 100644 --- a/launchers/standalone/src/main/resources/META-INF/spring.factories +++ b/launchers/standalone/src/main/resources/META-INF/spring.factories @@ -30,8 +30,8 @@ com.tencent.supersonic.chat.processor.ResponseProcessor=\ com.tencent.supersonic.chat.processor.TimeCostProcessor, \ com.tencent.supersonic.chat.processor.RespBuildProcessor -com.tencent.supersonic.chat.parser.LLMInterpreter=\ - com.tencent.supersonic.chat.parser.HttpLLMInterpreter +com.tencent.supersonic.chat.parser.LLMProxy=\ + com.tencent.supersonic.chat.parser.PythonLLMProxy com.tencent.supersonic.chat.api.component.SemanticInterpreter=\ com.tencent.supersonic.knowledge.semantic.LocalSemanticInterpreter diff --git a/launchers/standalone/src/test/java/com/tencent/supersonic/util/DataUtils.java b/launchers/standalone/src/test/java/com/tencent/supersonic/util/DataUtils.java index 4361bc9a9..caf6ec50a 100644 --- a/launchers/standalone/src/test/java/com/tencent/supersonic/util/DataUtils.java +++ b/launchers/standalone/src/test/java/com/tencent/supersonic/util/DataUtils.java @@ -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.request.QueryFilter; 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.enums.FilterOperatorEnum;