From aa433baa06b794c5adc7aee7157635c1a60b9992 Mon Sep 17 00:00:00 2001
From: lexluo09 <39718951+lexluo09@users.noreply.github.com>
Date: Fri, 24 Nov 2023 15:59:29 +0800
Subject: [PATCH] [improvement](python) LLM parsing related services support
Python service and Java service invocation (#418)
---
chat/core/pom.xml | 13 +
.../chat/config/OptimizationConfig.java | 13 +
.../chat/llm/EmbedLLMInterpreter.java | 83 +++++
.../chat/llm/HttpLLMInterpreter.java | 71 ++++
.../supersonic/chat/llm/LLMInterpreter.java | 18 +
.../llm/listener/EmbeddingInitListener.java | 43 +++
.../prompt/FunctionCallPromptGenerator.java | 43 +++
.../chat/llm/prompt/InputFormat.java | 43 +++
.../chat/llm/prompt/OutputFormat.java | 54 +++
.../chat/llm/prompt/SqlExample.java | 32 ++
.../chat/llm/prompt/SqlExampleLoader.java | 50 +++
.../chat/llm/prompt/SqlPromptGenerator.java | 66 ++++
.../llm/vectordb/EmbeddingStoreFactory.java | 20 ++
.../llm/vectordb/EmbeddingStoreOperator.java | 55 +++
.../parser/llm/s2sql/LLMRequestService.java | 9 +-
.../embedding/EmbeddingBasedParser.java | 7 +-
.../plugin/function/FunctionBasedParser.java | 43 +--
.../chat/service/LLMParserLayer.java | 13 -
.../chat/service/impl/LLMParserLayerImpl.java | 47 ---
.../chat/utils/ComponentFactory.java | 11 +
.../main/resources/META-INF/spring.factories | 3 +
launchers/standalone/pom.xml | 14 +
.../supersonic/config/LangChain4jConfig.java | 15 +
.../main/resources/META-INF/spring.factories | 7 +-
.../src/main/resources/application-local.yaml | 15 +
.../src/main/resources/example.json | 312 ++++++++++++++++++
pom.xml | 52 +++
.../semantic/model/domain/pojo/Database.java | 5 +-
28 files changed, 1054 insertions(+), 103 deletions(-)
create mode 100644 chat/core/src/main/java/com/tencent/supersonic/chat/llm/EmbedLLMInterpreter.java
create mode 100644 chat/core/src/main/java/com/tencent/supersonic/chat/llm/HttpLLMInterpreter.java
create mode 100644 chat/core/src/main/java/com/tencent/supersonic/chat/llm/LLMInterpreter.java
create mode 100644 chat/core/src/main/java/com/tencent/supersonic/chat/llm/listener/EmbeddingInitListener.java
create mode 100644 chat/core/src/main/java/com/tencent/supersonic/chat/llm/prompt/FunctionCallPromptGenerator.java
create mode 100644 chat/core/src/main/java/com/tencent/supersonic/chat/llm/prompt/InputFormat.java
create mode 100644 chat/core/src/main/java/com/tencent/supersonic/chat/llm/prompt/OutputFormat.java
create mode 100644 chat/core/src/main/java/com/tencent/supersonic/chat/llm/prompt/SqlExample.java
create mode 100644 chat/core/src/main/java/com/tencent/supersonic/chat/llm/prompt/SqlExampleLoader.java
create mode 100644 chat/core/src/main/java/com/tencent/supersonic/chat/llm/prompt/SqlPromptGenerator.java
create mode 100644 chat/core/src/main/java/com/tencent/supersonic/chat/llm/vectordb/EmbeddingStoreFactory.java
create mode 100644 chat/core/src/main/java/com/tencent/supersonic/chat/llm/vectordb/EmbeddingStoreOperator.java
delete mode 100644 chat/core/src/main/java/com/tencent/supersonic/chat/service/LLMParserLayer.java
delete mode 100644 chat/core/src/main/java/com/tencent/supersonic/chat/service/impl/LLMParserLayerImpl.java
create mode 100644 launchers/standalone/src/main/java/com/tencent/supersonic/config/LangChain4jConfig.java
create mode 100644 launchers/standalone/src/main/resources/example.json
diff --git a/chat/core/pom.xml b/chat/core/pom.xml
index 42cc3a8ad..e42d719fc 100644
--- a/chat/core/pom.xml
+++ b/chat/core/pom.xml
@@ -116,6 +116,19 @@
${mockito-inline.version}
test
+
+
+ dev.langchain4j
+ langchain4j-open-ai
+
+
+ dev.langchain4j
+ langchain4j
+
+
+ dev.langchain4j
+ langchain4j-chroma
+
diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/config/OptimizationConfig.java b/chat/core/src/main/java/com/tencent/supersonic/chat/config/OptimizationConfig.java
index 630e9ec49..e3ac48b10 100644
--- a/chat/core/src/main/java/com/tencent/supersonic/chat/config/OptimizationConfig.java
+++ b/chat/core/src/main/java/com/tencent/supersonic/chat/config/OptimizationConfig.java
@@ -59,6 +59,19 @@ public class OptimizationConfig {
@Value("${s2SQL.use.switch:true}")
private boolean useS2SqlSwitch;
+
+ @Value("${text2sql.example.num:10}")
+ private int text2sqlExampleNum;
+
+ @Value("${text2sql.fewShots.num:10}")
+ private int text2sqlFewShotsNum;
+
+ @Value("${text2sql.self.consistency.num:5}")
+ private int text2sqlSelfConsistencyNum;
+
+ @Value("${text2sql.collection.name:text2dsl_agent_collection}")
+ private String text2sqlCollectionName;
+
@Autowired
private SysParameterService sysParameterService;
diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/llm/EmbedLLMInterpreter.java b/chat/core/src/main/java/com/tencent/supersonic/chat/llm/EmbedLLMInterpreter.java
new file mode 100644
index 000000000..bb5130a1e
--- /dev/null
+++ b/chat/core/src/main/java/com/tencent/supersonic/chat/llm/EmbedLLMInterpreter.java
@@ -0,0 +1,83 @@
+package com.tencent.supersonic.chat.llm;
+
+import com.tencent.supersonic.chat.config.OptimizationConfig;
+import com.tencent.supersonic.chat.llm.prompt.FunctionCallPromptGenerator;
+import com.tencent.supersonic.chat.llm.prompt.OutputFormat;
+import com.tencent.supersonic.chat.llm.prompt.SqlExampleLoader;
+import com.tencent.supersonic.chat.llm.prompt.SqlPromptGenerator;
+import com.tencent.supersonic.chat.parser.plugin.function.FunctionReq;
+import com.tencent.supersonic.chat.parser.plugin.function.FunctionResp;
+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.LLMResp;
+import com.tencent.supersonic.common.util.ContextUtils;
+import com.tencent.supersonic.common.util.JsonUtil;
+import dev.langchain4j.data.message.AiMessage;
+import dev.langchain4j.model.chat.ChatLanguageModel;
+import dev.langchain4j.model.input.Prompt;
+import dev.langchain4j.model.input.PromptTemplate;
+import dev.langchain4j.model.output.Response;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
+public class EmbedLLMInterpreter implements LLMInterpreter {
+
+ public LLMResp query2sql(LLMReq llmReq, Long modelId) {
+
+ ChatLanguageModel chatLanguageModel = ContextUtils.getBean(ChatLanguageModel.class);
+
+ SqlExampleLoader sqlExampleLoader = ContextUtils.getBean(SqlExampleLoader.class);
+
+ OptimizationConfig config = ContextUtils.getBean(OptimizationConfig.class);
+
+ List