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 参考