(improvement)(chat) The large model parsing supports SQL result verification and adds three retries (#1194)

This commit is contained in:
lexluo09
2024-06-22 22:21:51 +08:00
committed by GitHub
parent 32e2c1e39d
commit 29694be64e
10 changed files with 131 additions and 87 deletions

View File

@@ -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;
}
}
}

View File

@@ -11,7 +11,7 @@ class ChatModelProperties {
String apiKey;
Double temperature;
Double topP;
String model;
String modelName;
Integer maxRetries;
Integer maxToken;
Boolean logRequests;

View File

@@ -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())

View File

@@ -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);
}
}