一架梯子,一头程序猿,仰望星空!
LangChain教程(Python版本) > 内容正文

LangChain SQL Chain通过自然语言操作数据库


LangChain SQL案例介绍

企业数据通常存储在 SQL 数据库中。

LLM 使使用自然语言与 SQL 数据库交互成为可能。

LangChain 提供 SQL 链和代理,可根据自然语言提示构建和运行 SQL 查询。

它们与 SQLAlchemy 支持的任何 SQL 方言(如 MySQL、PostgreSQL、Oracle SQL、Databricks、SQLite)兼容。

它们支持以下使用情况:

  • 生成根据自然语言问题运行的查询
  • 创建可根据数据库数据回答问题的聊天机器人
  • 根据用户希望分析的见解创建自定义仪表板

概述

LangChain 提供与 SQL 数据库交互的工具:

  1. 根据用户的自然语言问题创建 SQL 查询
  2. 使用链查询 SQL 数据库,以创建和执行查询
  3. 使用代理与 SQL 数据库交互,实现强大而灵活的查询

快速开始

首先,获取所需软件包并设置环境变量:

pip install langchain langchain-experimental openai

# 设置 env 变量 OPENAI_API_KEY,或从 .env 文件加载
# import dotenv
# dotenv.load_env()

下面的示例将使用 SQLite 连接 Chinook 数据库。

按照安装步骤在与本笔记本相同的目录下创建 Chinook.db:

  • 将此文件保存到 Chinook_Sqlite.sql 目录中
  • 运行 sqlite3 Chinook.db
  • 运行 .read Chinook_Sqlite.sql
  • 测试 SELECT * FROM Artist LIMIT 10;

现在,Chinhook.db 就在我们的目录中了。

让我们创建一个 SQLDatabaseChain 来创建和执行 SQL 查询。

from langchain.utilities import SQLDatabase
from langchain.llms import OpenAI
from langchain_experimental.sql import SQLDatabaseChain

db = SQLDatabase.from_uri("sqlite:///Chinook.db")
llm = OpenAI(temperature=0, verbose=True)
db_chain = SQLDatabaseChain.from_llm(llm, db, verbose=True)

通过自然语言查询数据库

db_chain.run("有多少员工?")

执行日志

    > Entering new SQLDatabaseChain chain...
    有多少员工?
    SQLQuery:SELECT COUNT(*) FROM "Employee";
    SQLResult: [(8,)]
    Answer:There are 8 employees.
    > Finished chain.





    'There are 8 employees.'

请注意,这既创建了查询,也执行了查询。

在下面的章节中,我们将介绍概述中提到的 3 种不同的使用情况。

案例 1:文本到 SQL 查询

from langchain.chat_models import ChatOpenAI
from langchain.chains import create_sql_query_chain

让我们创建建立 SQL 查询的链:

chain = create_sql_query_chain(ChatOpenAI(temperature=0), db)
response = chain.invoke({"question":"有多少员工"})
print(response)

返回

    SELECT COUNT(*) FROM Employee

根据用户问题创建 SQL 查询后,我们就可以执行查询了:

db.run(response)

返回

    '[(8,)]'

我们可以看到,SQL 查询生成器链只创建了查询,而我们单独处理了查询的执行。