Skip to main content

概述

在本教程中,你将学习如何使用 LangChain 智能体构建一个能够回答 SQL 数据库相关问题的智能体。 在高层面上,智能体将:
1

从数据库获取可用的表和 schema

2

决定哪些表与问题相关

3

获取相关表的 schema

4

基于问题和 schema 信息生成查询

5

使用 LLM 仔细检查查询中的常见错误

6

执行查询并返回结果

7

纠正数据库引擎发现的错误,直到查询成功

8

基于结果形成响应

构建 SQL 数据库的问答系统需要执行模型生成的 SQL 查询。这样做存在固有风险。确保你的数据库连接权限始终尽可能地缩小到智能体所需的范围。这将减轻(但不能消除)构建模型驱动系统的风险。

概念

我们将涵盖以下概念:

设置

安装

LangSmith

设置 LangSmith 来检查链或智能体内部发生了什么。然后设置以下环境变量:

1. 选择 LLM

选择一个支持工具调用的模型:
👉 Read the OpenAI chat model integration docs
以下示例中显示的输出使用了 OpenAI。

2. 配置数据库

本教程你将创建一个 SQLite 数据库。SQLite 是一个轻量级数据库,易于设置和使用。我们将加载 chinook 数据库,这是一个代表数字媒体商店的示例数据库。 为方便起见,我们已将数据库(Chinook.db)托管在公共 GCS 存储桶上。

3. 添加数据库交互工具

使用 langchain/sql_db 中可用的 SqlDatabase 包装器与数据库交互。该包装器提供了一个简单的接口来执行 SQL 查询和获取结果:

4. 执行 SQL 查询

在运行命令之前,对 LLM 生成的命令在 _safe_sql 中进行检查:
然后,使用 SQLDatabaserun 通过 execute_sql 工具执行命令:

5. 使用 createAgent

使用 createAgent 以最少的代码构建 ReAct 智能体。智能体将解释请求并生成 SQL 命令。工具将检查命令的安全性,然后尝试执行命令。如果命令出错,错误消息将返回给模型。然后模型可以检查原始请求和新的错误消息并生成新命令。这可以持续到 LLM 成功生成命令或达到结束计数。这种向模型提供反馈——在这种情况下是错误消息——的模式非常强大。 使用描述性系统提示初始化智能体以自定义其行为:
现在,使用模型、工具和提示创建智能体:

6. 运行智能体

在示例查询上运行智能体并观察其行为:
智能体正确地编写了查询、检查了查询并运行它以支持其最终响应。
你可以在 LangSmith 追踪中检查上述运行的所有方面,包括采取的步骤、调用的工具、LLM 看到的提示等。

(可选)使用 Studio

Studio 提供了”客户端”循环以及记忆功能,让你可以将其作为聊天界面运行并查询数据库。你可以问诸如”告诉我数据库的 schema”或”显示前 5 个客户的发票”之类的问题。你将看到生成的 SQL 命令和结果输出。下面是如何开始的详细信息。
除了前面提到的包之外,你还需要:
在你运行的目录中,你需要一个包含以下内容的 langgraph.json 文件:

后续步骤

如需更深入的自定义,请查看本教程,了解如何直接使用 LangGraph 原语实现 SQL 智能体。