llama_index [Bug]: sql_retriever.py parse_response_to_sql返回的查询中包含'sql'关键字,

t8e9dugd  于 2个月前  发布在  其他
关注(0)|答案(2)|浏览(30)

Bug描述

当调用 parse_response_to_sql 时,它在查询的开头返回 'sql'。例如,如果查询是 'SELECT * from employee',它会返回 'sql SELECT * from employee'。

版本

0.10.55

重现步骤

使用 SQLJoinQueryEngine 和 MS SQL 服务器数据库查询数据。sql_tool = QueryEngineTool.from_defaults(
query_engine=sql_query_engine,
description="""用于从 Azure SQL 中的 Dashboard_Data 表查询结构化数据的工具。""",
return_direct=True
)

相关日志/回溯

  • 无响应*
qybjjes1

qybjjes11#

你好,@ShailendraSahu24!我在这里为您提供任何错误、问题或贡献方面的帮助。让我们一起解决您的问题。
要修复parse_response_to_sqlsql_retriever.py中返回的查询以'sql'关键字开头的问题,您需要修改DefaultSQLParser类中的parse_response_to_sql方法,如果查询以'sql'关键字开头,则删除该关键字。
以下是更新后的parse_response_to_sql方法代码:

class DefaultSQLParser(BaseSQLParser):
    """Default SQL Parser."""

    def parse_response_to_sql(self, response: str, query_bundle: QueryBundle) -> str:
        """Parse response to SQL."""
        sql_query_start = response.find("SQLQuery:")
        if sql_query_start != -1:
            response = response[sql_query_start:]
            # TODO: move to removeprefix after Python 3.9+
            if response.startswith("SQLQuery:"):
                response = response[len("SQLQuery:") :]
        sql_result_start = response.find("SQLResult:")
        if sql_result_start != -1:
            response = response[:sql_result_start]
        
        # Remove 'sql' keyword if it appears at the beginning
        response = response.strip().strip("```").strip()
        if response.lower().startswith("sql"):
            response = response[3:].strip()
        
        return response

此修改确保如果响应以'sql'关键字开头,它将在返回最终SQL查询之前被删除。

  • 要继续与Dosu交流,请提及@dosu。*
busg9geu

busg9geu2#

上述代码似乎在本地解决了问题。然而,我注意到最新版本(llama-index 0.10.57)仍然存在这个问题。这是否意味着需要提交PR来修复这个问题,以便在未来的版本中解决?

相关问题