langchain V2.0 create_react_agent 无法在 SQL 数据库上执行生成的查询,

mnowg1ta  于 4个月前  发布在  React
关注(0)|答案(2)|浏览(67)

检查其他资源

  • 为这个问题添加了一个非常描述性的标题。
  • 使用集成搜索在LangChain文档中搜索。
  • 使用GitHub搜索查找类似的问题,但没有找到。
  • 我确信这是LangChain中的一个bug,而不是我的代码。
  • 通过更新到LangChain的最新稳定版本(或特定集成包)无法解决此错误。

示例代码

从这个教程:https://python.langchain.com/v0.2/docs/tutorials/sql_qa/

from langchain_community.agent_toolkits import SQLDatabaseToolkit
from langchain_core.messages import SystemMessage
from langchain_core.messages import HumanMessage
from langgraph.prebuilt import create_react_agent
toolkit = SQLDatabaseToolkit(db=db, llm=llm)
tools = toolkit.get_tools()
SQL_PREFIX = """You are an agent designed to interact with a SQL database.
 Given an input question, create a syntactically correct SQLite query to run, then look at the results of the query and return the answer.
 Unless the user specifies a specific number of examples they wish to obtain, always limit your query to at most 5 results.
 You can order the results by a relevant column to return the most interesting examples in the database.
 Never query for all the columns from a specific table, only ask for the relevant columns given the question.
 You have access to tools for interacting with the database.
 Only use the below tools. Only use the information returned by the below tools to construct your final answer.
 You MUST double check your query before executing it. If you get an error while executing a query, rewrite the query and try again.
DO NOT make any DML statements (INSERT, UPDATE, DELETE, DROP etc.) to the database.
To start you should ALWAYS look at the tables in the database to see what you can query.
 Do NOT skip this step.
 Then you should query the schema of the most relevant tables."""
system_message = SystemMessage(content=SQL_PREFIX)
agent_executor = create_react_agent(llm, tools, messages_modifier=system_message)
for s in agent_executor.stream(
 {"messages": [HumanMessage(content="Which country's customers spent the most?")]}
):
 print(s)
 print("----")

错误信息和堆栈跟踪(如果适用)

llm返回了幻想般的查询结果,但生成的sql查询看起来是合理的。没有出现任何错误信息。

描述

我正在使用上面的代码创建sql代理,代码运行,它生成合理的sql查询,但查询结果都是幻想般的,而不是基于数据库的实际结果。想知道代理是如何连接到数据库的,因为代理参数中不包括数据库,为什么sql_db_query工具无法在sql数据库上执行。

7kjnsjlb

7kjnsjlb1#

有任何更新吗?

p8ekf7hl

p8ekf7hl2#

你好,我也遇到了类似的SQL生成问题。但我的问题主要集中在错误的表名格式(将双引号添加到传递给SQL_DB_SCHEMA的表名中),导致执行不完整,向用户显示中间结果。关于将数据库详细信息传递给代理的问题,变量"tools"包含了有关数据库的详细信息以及用于SQL生成所需的各个函数/工具。以下是我的建议:

  1. 检查调试控制台中的日志(print(s)),请检查在传递给SQL_DB_SCHEMA函数时表名是否格式正确。
  2. 您可以为无法执行预期任务的单个工具添加描述(在我的情况下是InfoSQLDatabaseTool)。因此,我修改了工具的描述如下(可能有更好的方法):
    desc = (
    """始终在'sql_db_list_tables'之后使用此工具。此工具的输入是一个没有模式、没有双引号或单引号的逗号分隔的表列表。输出是为这些表提供的模式和示例行。请确保首先调用'sql_db_list_tables'以确认表确实存在!示例输入:table1, table2, table3"""
    )
tools[1].description = desc
  1. 使用Langsmith跟踪create_react_agent函数。这有助于您了解流程并可能解决该问题
    希望这对您有所帮助。
    祝好,
    Kiran

相关问题