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

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

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方法代码:

  1. class DefaultSQLParser(BaseSQLParser):
  2. """Default SQL Parser."""
  3. def parse_response_to_sql(self, response: str, query_bundle: QueryBundle) -> str:
  4. """Parse response to SQL."""
  5. sql_query_start = response.find("SQLQuery:")
  6. if sql_query_start != -1:
  7. response = response[sql_query_start:]
  8. # TODO: move to removeprefix after Python 3.9+
  9. if response.startswith("SQLQuery:"):
  10. response = response[len("SQLQuery:") :]
  11. sql_result_start = response.find("SQLResult:")
  12. if sql_result_start != -1:
  13. response = response[:sql_result_start]
  14. # Remove 'sql' keyword if it appears at the beginning
  15. response = response.strip().strip("```").strip()
  16. if response.lower().startswith("sql"):
  17. response = response[3:].strip()
  18. return response

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

  • 要继续与Dosu交流,请提及@dosu。*
展开查看全部
busg9geu

busg9geu2#

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

相关问题