mirror of
https://github.com/tencentmusic/supersonic.git
synced 2025-12-14 05:43:51 +00:00
(improvement)(chat) The large model parsing supports SQL result verification and adds three retries (#1194)
This commit is contained in:
@@ -2,13 +2,15 @@ package com.tencent.supersonic.common.jsqlparser;
|
||||
|
||||
import java.util.List;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import net.sf.jsqlparser.JSQLParserException;
|
||||
import net.sf.jsqlparser.parser.CCJSqlParserUtil;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
|
||||
/**
|
||||
* Sql Parser equal Helper
|
||||
* Sql Parser valid Helper
|
||||
*/
|
||||
@Slf4j
|
||||
public class SqlEqualHelper {
|
||||
public class SqlValidHelper {
|
||||
|
||||
/**
|
||||
* determine if two SQL statements are equal.
|
||||
@@ -63,5 +65,15 @@ public class SqlEqualHelper {
|
||||
return true;
|
||||
}
|
||||
|
||||
public static boolean isValidSQL(String sql) {
|
||||
try {
|
||||
CCJSqlParserUtil.parse(sql);
|
||||
return true;
|
||||
} catch (JSQLParserException e) {
|
||||
log.error("isValidSQL parse:{}", e);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -11,7 +11,7 @@ class ChatModelProperties {
|
||||
String apiKey;
|
||||
Double temperature;
|
||||
Double topP;
|
||||
String model;
|
||||
String modelName;
|
||||
Integer maxRetries;
|
||||
Integer maxToken;
|
||||
Boolean logRequests;
|
||||
|
||||
@@ -21,7 +21,7 @@ public class ZhipuAutoConfig {
|
||||
return ZhipuAiChatModel.builder()
|
||||
.baseUrl(chatModelProperties.getBaseUrl())
|
||||
.apiKey(chatModelProperties.getApiKey())
|
||||
.model(chatModelProperties.getModel())
|
||||
.model(chatModelProperties.getModelName())
|
||||
.temperature(chatModelProperties.getTemperature())
|
||||
.topP(chatModelProperties.getTopP())
|
||||
.maxRetries(chatModelProperties.getMaxRetries())
|
||||
@@ -38,7 +38,7 @@ public class ZhipuAutoConfig {
|
||||
return ZhipuAiStreamingChatModel.builder()
|
||||
.baseUrl(chatModelProperties.getBaseUrl())
|
||||
.apiKey(chatModelProperties.getApiKey())
|
||||
.model(chatModelProperties.getModel())
|
||||
.model(chatModelProperties.getModelName())
|
||||
.temperature(chatModelProperties.getTemperature())
|
||||
.topP(chatModelProperties.getTopP())
|
||||
.maxToken(chatModelProperties.getMaxToken())
|
||||
|
||||
@@ -4,39 +4,33 @@ package com.tencent.supersonic.common.jsqlparser;
|
||||
import org.junit.Assert;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
/**
|
||||
* @author lex luo
|
||||
* @date 2023/11/15 15:04
|
||||
*/
|
||||
class SqlEqualHelperTest {
|
||||
class SqlValidHelperTest {
|
||||
|
||||
@Test
|
||||
void testEquals() {
|
||||
String sql1 = "SELECT * FROM table1 WHERE column1 = 1 AND column2 = 2";
|
||||
String sql2 = "SELECT * FROM table1 WHERE column2 = 2 AND column1 = 1";
|
||||
Assert.assertEquals(SqlEqualHelper.equals(sql1, sql2), true);
|
||||
Assert.assertEquals(SqlValidHelper.equals(sql1, sql2), true);
|
||||
|
||||
sql1 = "SELECT a,b,c,d FROM table1 WHERE column1 = 1 AND column2 = 2 order by a";
|
||||
sql2 = "SELECT d,c,b,a FROM table1 WHERE column2 = 2 AND column1 = 1 order by a";
|
||||
Assert.assertEquals(SqlEqualHelper.equals(sql1, sql2), true);
|
||||
Assert.assertEquals(SqlValidHelper.equals(sql1, sql2), true);
|
||||
|
||||
sql1 = "SELECT a,sum(b),sum(c),sum(d) FROM table1 WHERE column1 = 1 AND column2 = 2 group by a order by a";
|
||||
|
||||
sql2 = "SELECT sum(d),sum(c),sum(b),a FROM table1 WHERE column2 = 2 AND column1 = 1 group by a order by a";
|
||||
|
||||
Assert.assertEquals(SqlEqualHelper.equals(sql1, sql2), true);
|
||||
Assert.assertEquals(SqlValidHelper.equals(sql1, sql2), true);
|
||||
|
||||
sql1 = "SELECT a,sum(b),sum(c),sum(d) FROM table1 WHERE column1 = 1 AND column2 = 2 group by a order by a";
|
||||
|
||||
sql2 = "SELECT sum(d),sum(c),sum(b),a FROM table1 WHERE column2 = 2 AND column1 = 1 group by a order by a";
|
||||
|
||||
Assert.assertEquals(SqlEqualHelper.equals(sql1, sql2), true);
|
||||
|
||||
Assert.assertEquals(SqlValidHelper.equals(sql1, sql2), true);
|
||||
|
||||
sql1 = "SELECT a,b,c,d FROM table1 WHERE column1 = 1 AND column2 = 2 order by a";
|
||||
sql2 = "SELECT d,c,b,f FROM table1 WHERE column2 = 2 AND column1 = 1 order by a";
|
||||
Assert.assertEquals(SqlEqualHelper.equals(sql1, sql2), false);
|
||||
|
||||
Assert.assertEquals(SqlValidHelper.equals(sql1, sql2), false);
|
||||
|
||||
sql1 = "SELECT\n"
|
||||
+ "页面,\n"
|
||||
@@ -65,6 +59,27 @@ class SqlEqualHelperTest {
|
||||
+ "页面\n"
|
||||
+ "LIMIT\n"
|
||||
+ "365";
|
||||
Assert.assertEquals(SqlEqualHelper.equals(sql1, sql2), true);
|
||||
Assert.assertEquals(SqlValidHelper.equals(sql1, sql2), true);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testIsValidSQL() {
|
||||
String sql1 = "SELECT * FROM table1 WHERE column1 = 1 AND column2 = 2";
|
||||
Assert.assertEquals(SqlValidHelper.isValidSQL(sql1), true);
|
||||
|
||||
sql1 = "SELECT sum(b),sum(c),sum(d) FROM table1 WHERE column1 = 1 AND column2 = 2";
|
||||
|
||||
Assert.assertEquals(SqlValidHelper.isValidSQL(sql1), true);
|
||||
|
||||
sql1 = "SELECT a,b,c, FROM table1 WHERE column1 = 1 AND column2 = 2 order by a";
|
||||
Assert.assertEquals(SqlValidHelper.isValidSQL(sql1), false);
|
||||
|
||||
sql1 = "SELECTa,b,c,d FROM table1";
|
||||
|
||||
Assert.assertEquals(SqlValidHelper.isValidSQL(sql1), false);
|
||||
|
||||
sql1 = "SELECT sum(b),sum(c),sum(d) FROM table1 WHERE";
|
||||
|
||||
Assert.assertEquals(SqlValidHelper.isValidSQL(sql1), false);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user