Skip to main content
在本教程中,我们将使用 LangGraph 构建一个自定义智能体,该智能体能够回答有关 SQL 数据库的问题。 LangChain 提供了内置的 智能体 实现,这些实现使用 LangGraph 基本结构实现。如果需要更深入的定制,智能体可以直接在 LangGraph 中实现。本指南演示了一个 SQL 智能体的示例实现。有关实际入门介绍,请参阅 使用更高层次的 LangChain 抽象构建 SQL 智能体。
构建 SQL 数据库的 Q&A 系统需要执行模型生成的 SQL 查询。这样做存在固有的风险。确保您的数据库连接权限始终尽可能狭窄地限制在智能体的需求范围内。这将减轻(尽管不能完全消除)构建模型驱动系统的风险。
预构建的智能体 可以让我们快速上手,但我们依赖于系统提示词来约束其行为——例如,我们指示智能体始终从 “列出表” 工具开始,并在执行查询之前始终运行查询检查器工具。 我们可以通过自定义智能体在 LangGraph 中实现更高程度的控制。在这里,我们实现了一个简单的 ReAct 智能体设置,为特定的工具调用设置了专用节点。我们将使用与预构建智能体相同的 [状态]。

概念

我们将涵盖以下概念:
  • 用于从 SQL 数据库读取的 工具
  • LangGraph 的 图 API,包括状态、节点、边和条件边。
  • 人工参与 流程

设置

安装

:::python
::: :::js
:::

LangSmith

设置 LangSmith 以检查链或智能体内部的运行情况。然后设置以下环境变量:

1. 选择 LLM

选择一个支持 工具调用 的模型: :::python
👉 请阅读 OpenAI 对话模型集成文档
::: :::js
👉 Read the OpenAI 对话模型集成文档
::: 示例中的输出使用了 OpenAI。

2. 配置数据库

在本教程中,您将创建一个 SQLite 数据库。SQLite 是一个轻量级数据库,易于设置和使用。我们将加载 chinook 数据库,这是一个表示数字媒体商店的示例数据库。 为了方便起见,我们将数据库(Chinook.db)托管在公共 GCS 存储桶上。 :::python
我们将使用 Python 的内置 sqlite3 模块与数据库交互:
::: :::js
我们将使用 sqlite3 库与数据库交互:
:::

3. 添加用于数据库交互的工具

以下数据库工具仅用于演示目的,是极简的包装器。它们不打算用于生产环境或保证安全性。在使用模型生成的 SQL 之前,请使用狭窄范围的数据库权限并添加应用程序特定的验证。
:::python 我们可以使用 @tool 装饰器从 langchain.tools 实现数据库 工具 作为薄包装器:
::: :::js 我们将创建自定义工具来与数据库交互:
:::

4. 定义应用步骤

我们为以下步骤构建专用节点:
  • 列出数据库表
  • 调用 “获取架构” 工具
  • 生成查询
  • 检查查询
将这些步骤放入专用节点让我们能够(1)在需要时强制执行工具调用,以及(2)自定义与每个步骤关联的提示词。 :::python
::: :::js
:::

5. 实现智能体

现在我们可以使用 Graph API 将这些步骤组装成一个工作流。我们在查询生成步骤定义了一个 条件边,如果生成了查询则路由到查询检查器,如果没有工具调用则结束,这样 LLM 就能对查询做出响应。 :::python
我们在下方可视化应用:
::: :::js
我们在下方可视化应用:
::: SQL 智能体图 现在我们可以调用图: :::python
::: :::js
:::
:::python
参见 LangSmith 跟踪 了解上述运行情况。
::: :::js
参见 LangSmith 跟踪 了解上述运行情况。
:::

6. 实现人工审核

在执行任何可能产生意外行为或低效性的 SQL 查询之前,检查智能体的 SQL 查询是明智的。 这里我们利用 LangGraph 的 人工审核 功能在执行 SQL 查询前暂停运行并等待人工审核。使用 LangGraph 的 持久化层,我们可以无限期地暂停运行(至少只要持久化层存活)。 让我们将 sql_db_query 工具封装在一个接收人类输入的节点中。我们可以使用 中断 函数实现这一点。下面,我们允许输入以批准工具调用、编辑其参数或提供用户反馈。 :::python
::: :::js
:::
上述实现遵循了 工具中断示例 在更广泛的 人工审核 指南中的内容。参考该指南了解详情和替代方案。
现在让我们重新组装我们的图。我们将程序化检查替换为人工审核。注意我们现在包含了一个 检查点;这是暂停和恢复运行所必需的。 :::python
::: :::js
::: 我们可以像之前一样调用图。这次执行被中断: :::python
::: :::js
:::
我们可以使用 Command 接受或编辑工具调用: :::python
::: :::js
:::
参考 人工审核指南 了解详情。

下一步

查阅 评估图 指南,了解如何使用 LangSmith 评估 LangGraph 应用,包括像这样的 SQL 智能体。
官方原文:src/oss/langgraph/sql-agent.mdx · 非官方翻译,译文由 AI 生成,以英文原文为准。
Last modified on November 3, 2026