通过自然语言简化数据库查询”的实用指南 | 豆包MarsCode AI刷题

86 阅读3分钟

在这次 LangChain 实战课中,我们深入了解了通过大语言模型(LLM)如何实现从自然语言查询到数据库操作的转变。这种新范式为数据库交互提供了一种直观且高效的方式,尤其适合不具备深入编程背景的用户。接下来,我将详细说明如何使用 LangChain 连接数据库并通过链(Chain)和代理(Agent)查询鲜花信息的过程。

一、新的数据库查询范式

自然语言驱动的数据库查询

传统的数据库查询需要使用结构化查询语言(SQL),这对于非技术人员来说是一个不小的挑战。但是,随着 LLM 的进步,我们可以通过自然语言来表达查询请求,系统能够自动转换成 SQL 语句并执行,从而获取结果。这种方式降低了技术门槛,使得数据库查询更加友好和直接。

示例:创建数据库和插入数据

使用 SQLite 和 Python 的 sqlite3 模块,我们可以轻松创建数据库和数据表。以下是创建 Flowers 数据表的 SQL 代码示例:

sql
复制代码
CREATE TABLE Flowers (
    ID INTEGER PRIMARY KEY,
    Name TEXT NOT NULL,
    Type TEXT NOT NULL,
    Source TEXT NOT NULL,
    PurchasePrice REAL,
    SalePrice REAL,
    StockQuantity INTEGER,
    SoldQuantity INTEGER,
    ExpiryDate DATE,
    Description TEXT,
    EntryDate DATE DEFAULT CURRENT_DATE
);

然后,我们插入鲜花数据到表中:

sql
复制代码
INSERT INTO Flowers (Name, Type, Source, PurchasePrice, SalePrice, StockQuantity, SoldQuantity, ExpiryDate, Description)
VALUES ('Rose', 'Flower', 'France', 1.2, 2.5, 100, 10, '2023-12-31', 'A beautiful red rose');

二、通过 LangChain 查询数据库

使用 Chain 查询

SQLDatabaseChain 允许我们直接通过 LLM 将自然语言问题转换为 SQL 查询。这个过程包括解析问题、生成 SQL、执行查询并返回结果。

以下是通过 Chain 进行查询的代码:

python
复制代码
from langchain.utilities import SQLDatabase
from langchain.llms import OpenAI
from langchain_experimental.sql import SQLDatabaseChain

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

response = db_chain.run("有多少种不同的鲜花?")
print(response)

使用 Agent 查询

与 Chain 相比,Agent 提供了更复杂的查询能力,包括错误处理和更精细的操作。Agent 在执行查询时会考虑数据库架构和内容,能够更智能地处理自然语言的模糊性。

Agent 查询示例代码:

python
复制代码
from langchain.agents import create_sql_agent
from langchain.agents.agent_toolkits import SQLDatabaseToolkit
from langchain.agents.agent_types import AgentType

agent_executor = create_sql_agent(
    llm=llm,
    toolkit=SQLDatabaseToolkit(db=db, llm=llm),
    verbose=True,
    agent_type=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
)

response = agent_executor.run("平均销售价格是多少?")
print(response)

三、思考与总结

这种新范式的出现不仅简化了数据库操作,还提高了交互的直观性和效率。然而,这也带来了对数据准确理解的挑战,尤其是在处理模糊的自然语言时。此外,过度依赖自动化可能会降低用户对数据处理过程的理解深度。

结语

通过本课程,我们见证了如何将传统的 SQL 查询转变为更加直观和用户友好的自然语言查询。LangChain 提供的工具和方法大大降低了技术门槛,使得更多非技术背景的用户能够轻松地与数据库进行交互。未来,随着技术的进一步发展,我们期待这种新范式能够带来更多的创新和便利。