From 50ba18d5d6d7acc485fc72ca5799814143b3f835 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 9 May 2025 17:17:11 +0800 Subject: [PATCH 1/3] =?UTF-8?q?(fix)(headless)=E4=BF=AE=E5=A4=8D=E7=94=9F?= =?UTF-8?q?=E6=88=90=E7=9A=84SQL=E5=AD=97=E6=AE=B5=E4=B8=8D=E5=9C=A8?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E9=9B=86=E5=86=85=EF=BC=8C=E5=AF=BC=E8=87=B4?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E5=BC=82=E5=B8=B8=E7=9A=84=E9=97=AE=E9=A2=98?= =?UTF-8?q?=EF=BC=8C=E7=94=B1=E5=8E=9F=E6=9D=A5=E7=9A=84=E5=AD=97=E6=AE=B5?= =?UTF-8?q?=E6=95=B0=E9=87=8F=E5=88=A4=E6=96=AD=E6=9B=B4=E6=94=B9=E4=B8=BA?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E5=AD=97=E6=AE=B5=E6=98=AF=E5=90=A6=E5=8C=85?= =?UTF-8?q?=E5=90=AB=E7=BB=B4=E5=BA=A6=E5=92=8C=E5=BA=A6=E9=87=8F=E5=AD=97?= =?UTF-8?q?=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../headless/core/translator/parser/SqlQueryParser.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/parser/SqlQueryParser.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/parser/SqlQueryParser.java index b52e9bbea..2aaef6b52 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/parser/SqlQueryParser.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/parser/SqlQueryParser.java @@ -47,12 +47,16 @@ public class SqlQueryParser implements QueryParser { SqlQuery sqlQuery = queryStatement.getSqlQuery(); List queryFields = SqlSelectHelper.getAllSelectFields(sqlQuery.getSql()); Set queryAliases = SqlSelectHelper.getAliasFields(sqlQuery.getSql()); + Set ontologyMetricsDimensions = Collections.synchronizedSet(new HashSet()); queryFields.removeAll(queryAliases); Ontology ontology = queryStatement.getOntology(); OntologyQuery ontologyQuery = buildOntologyQuery(ontology, queryFields); + Set queryFieldsSet = new HashSet<>(queryFields); + ontologyQuery.getMetrics().forEach(m -> ontologyMetricsDimensions.add(m.getName())); + ontologyQuery.getDimensions().forEach(d -> ontologyMetricsDimensions.add(d.getName())); // check if there are fields not matched with any metric or dimension - if (queryFields.size() > ontologyQuery.getMetrics().size() - + ontologyQuery.getDimensions().size()) { + + if (!queryFieldsSet.containsAll(ontologyMetricsDimensions)) { List semanticFields = Lists.newArrayList(); ontologyQuery.getMetrics().forEach(m -> semanticFields.add(m.getName())); ontologyQuery.getDimensions().forEach(d -> semanticFields.add(d.getName())); From 1ad6c9ddd750c1d1945e1f39573d3302ab2e396c Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 13 May 2025 13:55:20 +0800 Subject: [PATCH 2/3] =?UTF-8?q?(fix)(headless)=20<=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E5=BC=80=E5=90=AF=E5=A4=9A=E8=BD=AE=E5=AF=B9=E8=AF=9D=E4=BC=9A?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=E9=BB=98=E8=AE=A4=E7=9A=84gpt-4o-mini?= =?UTF-8?q?=E8=B4=A6=E5=8F=B7=E5=8E=BB=E8=BF=9B=E8=A1=8C=E8=BF=87=E7=A8=8B?= =?UTF-8?q?=E6=A3=80=E6=B5=8B=E8=80=8C=E4=B8=8D=E6=98=AF=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E5=A5=BD=E7=9A=84=E6=9C=AC=E5=9C=B0=E5=A4=A7?= =?UTF-8?q?=E6=A8=A1=E5=9E=8B=E7=9A=84=E9=97=AE=E9=A2=98>?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../supersonic/headless/chat/mapper/EmbeddingMatchStrategy.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/headless/chat/src/main/java/com/tencent/supersonic/headless/chat/mapper/EmbeddingMatchStrategy.java b/headless/chat/src/main/java/com/tencent/supersonic/headless/chat/mapper/EmbeddingMatchStrategy.java index 790b3bdd7..ee6f8c51a 100644 --- a/headless/chat/src/main/java/com/tencent/supersonic/headless/chat/mapper/EmbeddingMatchStrategy.java +++ b/headless/chat/src/main/java/com/tencent/supersonic/headless/chat/mapper/EmbeddingMatchStrategy.java @@ -167,7 +167,7 @@ public class EmbeddingMatchStrategy extends BatchMatchStrategy variable.put("retrievedInfo", JSONObject.toJSONString(results)); Prompt prompt = PromptTemplate.from(LLM_FILTER_PROMPT).apply(variable); - ChatLanguageModel chatLanguageModel = ModelProvider.getChatModel(); + ChatLanguageModel chatLanguageModel = ModelProvider.getChatModel(chatQueryContext.getRequest().getChatAppConfig().get("REWRITE_MULTI_TURN").getChatModelConfig()); String response = chatLanguageModel.generate(prompt.toUserMessage().singleText()); if (StringUtils.isBlank(response)) { From 83ba635bab7affd40a9e70cac198fed958dfce5e Mon Sep 17 00:00:00 2001 From: QJ_wonder <38885395+xinpiannanhai@users.noreply.github.com> Date: Wed, 14 May 2025 18:36:23 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=BB=B4=E5=BA=A6?= =?UTF-8?q?=E5=80=BC=E5=AF=BC=E5=85=A5=E5=AD=97=E5=85=B8=E6=97=B6=EF=BC=8C?= =?UTF-8?q?=E7=BB=B4=E5=BA=A6=E5=80=BC=E5=92=8C=E5=BA=A6=E9=87=8F=E5=80=BC?= =?UTF-8?q?=E4=B8=BA=E8=8B=B1=E6=96=87=E5=90=8D=E5=AF=BC=E8=87=B4=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=E4=B8=8D=E5=8C=B9=E9=85=8D=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修复维度值导入字典时,维度值和度量值为英文名导致字段不匹配的问题。 维度值导入字典时会遍历调用到SqlQueryParser方法,这时的维度值或度量值为Bizname而非name,新增一个set用于添加Bizname,并在判断中新加入Bizname名的判断,只要两个条件符合一个即可 --- .../headless/core/translator/parser/SqlQueryParser.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/parser/SqlQueryParser.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/parser/SqlQueryParser.java index 2aaef6b52..04b89ee5e 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/parser/SqlQueryParser.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/parser/SqlQueryParser.java @@ -48,15 +48,16 @@ public class SqlQueryParser implements QueryParser { List queryFields = SqlSelectHelper.getAllSelectFields(sqlQuery.getSql()); Set queryAliases = SqlSelectHelper.getAliasFields(sqlQuery.getSql()); Set ontologyMetricsDimensions = Collections.synchronizedSet(new HashSet()); + Set ontologyBizNameMetricsDimensions = Collections.synchronizedSet(new HashSet()); queryFields.removeAll(queryAliases); Ontology ontology = queryStatement.getOntology(); OntologyQuery ontologyQuery = buildOntologyQuery(ontology, queryFields); Set queryFieldsSet = new HashSet<>(queryFields); - ontologyQuery.getMetrics().forEach(m -> ontologyMetricsDimensions.add(m.getName())); - ontologyQuery.getDimensions().forEach(d -> ontologyMetricsDimensions.add(d.getName())); + ontologyQuery.getMetrics().forEach(m -> {ontologyMetricsDimensions.add(m.getName()); ontologyBizNameMetricsDimensions.add(m.getBizName());}); + ontologyQuery.getDimensions().forEach(d -> {ontologyMetricsDimensions.add(d.getName()); ontologyBizNameMetricsDimensions.add(d.getBizName());}); // check if there are fields not matched with any metric or dimension - if (!queryFieldsSet.containsAll(ontologyMetricsDimensions)) { + if (!(queryFieldsSet.containsAll(ontologyMetricsDimensions)||queryFieldsSet.containsAll(ontologyBizNameMetricsDimensions))) { List semanticFields = Lists.newArrayList(); ontologyQuery.getMetrics().forEach(m -> semanticFields.add(m.getName())); ontologyQuery.getDimensions().forEach(d -> semanticFields.add(d.getName()));