Skip to main content
这将帮助您开始使用 SQL 数据库工具包。有关所有 SQLDatabaseToolkit 功能和配置的详细文档,请前往 API 参考 SQLDatabaseToolkit 中的工具旨在与 SQL 数据库进行交互。 一个常见的应用是使代理能够使用关系数据库中的数据来回答问题,可能以迭代的方式进行(例如,从错误中恢复)。 ⚠️ 安全提示 ⚠️ 构建 SQL 数据库的问答系统需要执行模型生成的 SQL 查询。这样做存在固有风险。请确保您的数据库连接权限始终尽可能地限定在您的链/代理所需范围内。这将减轻(但不能消除)构建模型驱动系统的风险。

设置

要启用单个工具的自动跟踪,请设置您的 LangSmith API 密钥:

安装

此工具包位于 langchain-community 包中:
出于演示目的,我们将访问 LangChain Hub 中的一个提示。我们还需要 langgraph 来演示如何将工具包与代理一起使用。使用该工具包本身并不需要它。

实例化

SQLDatabaseToolkit 工具包需要: 下面,我们使用这些对象实例化工具包。让我们首先创建一个数据库对象。 本指南使用基于这些说明的示例 Chinook 数据库。 下面我们将使用 requests 库来拉取 .sql 文件并创建一个内存中的 SQLite 数据库。请注意,这种方法很轻量级,但它是临时的且非线程安全的。如果您愿意,可以按照说明将文件本地保存为 Chinook.db,并通过 db = SQLDatabase.from_uri("sqlite:///Chinook.db") 实例化数据库。
我们还需要一个 LLM 或聊天模型:
我们现在可以实例化工具包了:

工具

查看可用工具:
您可以直接使用单个工具:

在代理中使用

遵循 SQL 问答教程,下面我们为一个简单的问答代理配备我们工具包中的工具。首先,我们拉取一个相关的提示并填充其所需的参数:
然后我们实例化代理:
并向其发出查询:
我们还可以观察到代理从错误中恢复:

特定功能

SQLDatabaseToolkit 实现了一个 .get_context 方法,作为在提示或其他上下文中使用的便捷工具。 ⚠️ 免责声明 ⚠️:代理可能会生成插入/更新/删除查询。当不期望发生这种情况时,请使用自定义提示或创建没有写入权限的 SQL 用户。 最终用户可能会通过提出一个简单的问题(例如“运行可能的最大查询”)来使您的 SQL 数据库过载。生成的查询可能如下所示:
对于事务性 SQL 数据库,如果上述表之一包含数百万行,该查询可能会对使用同一数据库的其他应用程序造成问题。 大多数面向数据仓库的数据库支持用户级配额,以限制资源使用。

API 参考

有关所有 SQLDatabaseToolkit 功能和配置的详细文档,请前往 API 参考