langchain4j [BUG] SqlDatabaseContentRetriever.isSelect() Not supported in Chinese

5vf7fwbs  于 4个月前  发布在  其他
关注(0)|答案(3)|浏览(38)

SqlDatabaseContentRetriever.isSelect()
JSQLParser 不支持中文,例如 "select user_id as 用户ID from user"

请填写以下信息:

  • LangChain4j 版本:0.31.0
  • 使用的 LLM(s):
  • Java 版本: jdk17
  • Spring Boot 版本(如果适用):
55ooxyrt

55ooxyrt1#

由于:net.sf.jsqlparser.parser.TokenMgrException:词法错误,位于第1行,第19列。遇到:'29992' (29992)。
在 net.sf.jsqlparser.parser.CCJSqlParserTokenManager.getNextToken(CCJSqlParserTokenManager.java:6898) 处。
在 net.sf.jsqlparser.parser.CCJSqlParser.jj_scan_token(CCJSqlParser.java:38711) 处。
在 net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_RelObjectNameWithoutValue_1864_5_155(CCJSqlParser.java:31976) 处。
在 net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_RelObjectNameWithoutStart_1886_6_759(CCJSqlParser.java:31853) 处。
在 net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_RelObjectNameWithoutStart_1886_5_635(CCJSqlParser.java:31861) 处。
在 net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_Alias_2315_11_364(CCJSqlParser.java:30058) 处。
在 net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_Alias_2314_5_165(CCJSqlParser.java:30107) 处。
在 net.sf.jsqlparser.parser.CCJSqlParser.jj_3_115(CCJSqlParser.java:30240) 处。
在 net.sf.jsqlparser.parser.CCJSqlParser.jj_2_115(CCJSqlParser.java:25067) 处。
在 net.sf.jsqlparser.parser.CCJSqlParser.SelectExpressionItem(CCJSqlParser.java:8571) 处。
在 net.sf.jsqlparser.parser.CCJSqlParser.SelectItem(CCJSqlParser.java:8597) 处。
在 net.sf.jsqlparser.parser.CCJSqlParser.SelectItemsList(CCJSqlParser.java:8541) 处。
在 net.sf.jsqlparser.parser.CCJSqlParser.PlainSelect(CCJSqlParser.java:7838) 处。
在 net.sf.jsqlparser.parser.CCJSqlParser.SetOperationList(CCJSqlParser.java:8107) 处。
在 net.sf

rdlzhqv9

rdlzhqv92#

嘿,@yushengliao ,我在这里帮助你解决你面临的任何问题。我可以协助修复bug、回答问题,并指导你成为贡献者。
要解决LangChain4j版本0.31.0中不支持用中文编写的SQL查询的SqlDatabaseContentRetriever.isSelect()方法的问题,你可以修改isSelect方法以正确处理中文字符。TokenMgrException通常是由于SQL查询中的无法识别的字符引起的。
以下是修改后的isSelect方法:

protected boolean isSelect(String sqlQuery) {
    try {
        // Ensure the SQL query is in UTF-8 encoding to handle Chinese characters
        byte[] utf8Bytes = sqlQuery.getBytes("UTF-8");
        String utf8SqlQuery = new String(utf8Bytes, "UTF-8");

        net.sf.jsqlparser.statement.Statement statement = CCJSqlParserUtil.parse(utf8SqlQuery);
        return statement instanceof Select;
    } catch (JSQLParserException | UnsupportedEncodingException e) {
        return false;
    }
}

此修改确保SQL查询以UTF-8正确编码,这应该有助于处理中文字符并防止TokenMgrException错误1(https://github.com/langchain4j/langchain4j/blob/main/experimental/langchain4j-experimental-sql/src/main/java/dev/langchain4j/experimental/rag/content/retriever/sql/SqlDatabaseContentRetriever.java)。
@langchain4j,你能帮忙解决这个问题吗?

详细信息

关于Dosu

这个回复是为了方便你,节省时间。它不是精确的解决方案,而是你自己研究的一个起点。
帮助我变得更有用!如果这个有帮助,请留下一个👍,如果不相关,请留下一个👎。

  • 要继续对话,请提及@dosu。*
bprjcwpo

bprjcwpo3#

yushengliao,你能提供一个提示来解决这个问题吗?
同时,你可以重写isSelect()方法,要么跳过它,要么自己重新实现。

相关问题