diff --git a/chat/core/pom.xml b/chat/core/pom.xml
index 24806171f..f169048c2 100644
--- a/chat/core/pom.xml
+++ b/chat/core/pom.xml
@@ -104,6 +104,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/mapper/EmbeddingMatchStrategy.java b/chat/core/src/main/java/com/tencent/supersonic/chat/mapper/EmbeddingMatchStrategy.java
index 8163af681..739dadeab 100644
--- a/chat/core/src/main/java/com/tencent/supersonic/chat/mapper/EmbeddingMatchStrategy.java
+++ b/chat/core/src/main/java/com/tencent/supersonic/chat/mapper/EmbeddingMatchStrategy.java
@@ -4,10 +4,11 @@ import com.google.common.collect.Lists;
import com.tencent.supersonic.chat.api.pojo.QueryContext;
import com.tencent.supersonic.chat.config.OptimizationConfig;
import com.tencent.supersonic.common.pojo.Constants;
-import com.tencent.supersonic.common.util.embedding.EmbeddingUtils;
+import com.tencent.supersonic.common.util.ComponentFactory;
import com.tencent.supersonic.common.util.embedding.Retrieval;
import com.tencent.supersonic.common.util.embedding.RetrieveQuery;
import com.tencent.supersonic.common.util.embedding.RetrieveQueryResult;
+import com.tencent.supersonic.common.util.embedding.S2EmbeddingStore;
import com.tencent.supersonic.knowledge.dictionary.EmbeddingResult;
import com.tencent.supersonic.semantic.model.domain.listener.MetaEmbeddingListener;
import java.util.Comparator;
@@ -32,8 +33,8 @@ public class EmbeddingMatchStrategy extends BaseMatchStrategy {
@Autowired
private OptimizationConfig optimizationConfig;
- @Autowired
- private EmbeddingUtils embeddingUtils;
+
+ private S2EmbeddingStore s2EmbeddingStore = ComponentFactory.getS2EmbeddingStore();
@Override
public boolean needDelete(EmbeddingResult oneRoundResult, EmbeddingResult existResult) {
@@ -83,7 +84,7 @@ public class EmbeddingMatchStrategy extends BaseMatchStrategy {
.queryEmbeddings(null)
.build();
// step2. retrieveQuery by detectSegment
- List retrieveQueryResults = embeddingUtils.retrieveQuery(
+ List retrieveQueryResults = s2EmbeddingStore.retrieveQuery(
MetaEmbeddingListener.COLLECTION_NAME, retrieveQuery, embeddingNumber);
if (CollectionUtils.isEmpty(retrieveQueryResults)) {
@@ -97,7 +98,7 @@ public class EmbeddingMatchStrategy extends BaseMatchStrategy {
retrievals.removeIf(retrieval -> retrieval.getDistance() > distance.doubleValue());
if (CollectionUtils.isNotEmpty(detectModelIds)) {
retrievals.removeIf(retrieval -> {
- String modelIdStr = retrieval.getMetadata().get("modelId");
+ String modelIdStr = retrieval.getMetadata().get("modelId").toString();
if (StringUtils.isBlank(modelIdStr)) {
return true;
}
diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/EmbedLLMProxy.java b/chat/core/src/main/java/com/tencent/supersonic/chat/parser/EmbedLLMProxy.java
new file mode 100644
index 000000000..bb371c247
--- /dev/null
+++ b/chat/core/src/main/java/com/tencent/supersonic/chat/parser/EmbedLLMProxy.java
@@ -0,0 +1,84 @@
+package com.tencent.supersonic.chat.parser;
+
+import com.tencent.supersonic.chat.config.OptimizationConfig;
+import com.tencent.supersonic.chat.parser.plugin.function.FunctionCallPromptGenerator;
+import com.tencent.supersonic.chat.parser.sql.llm.prompt.OutputFormat;
+import com.tencent.supersonic.chat.parser.sql.llm.prompt.SqlExampleLoader;
+import com.tencent.supersonic.chat.parser.sql.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 lombok.extern.slf4j.Slf4j;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Slf4j
+public class EmbedLLMProxy implements LLMProxy {
+
+ public LLMResp query2sql(LLMReq llmReq, String modelClusterKey) {
+
+ ChatLanguageModel chatLanguageModel = ContextUtils.getBean(ChatLanguageModel.class);
+
+ SqlExampleLoader sqlExampleLoader = ContextUtils.getBean(SqlExampleLoader.class);
+
+ OptimizationConfig config = ContextUtils.getBean(OptimizationConfig.class);
+
+ List