大模型 LLM 在 Text2SQL 中的应用实践
一、前言
目前,大语言模型(LLM)的一个热门应用方向是 Text2SQL。它可以帮助用户快速生成想要查询的 SQL 语句,再结合可视化技术可以降低使用数据的门槛,更便捷地支持决策。本文将从以下四个方面介绍 LLM 在 Text2SQL 应用上的基础实践:
- Text2SQL 概述
- LangChain 基础知识
- 基于 SQLDatabaseChain 的 Text2SQL 实践
- 后续计划与最佳实践
二、Text2SQL 概述
Text-to-SQL(或 Text2SQL),顾名思义就是把文本转化为 SQL 语言。更学术一点的定义是:把数据库领域下的自然语言(Natural Language, NL)问题,转化为在关系型数据库中可以执行的结构化查询语言(Structured Query Language, SQL)。因此 Text-to-SQL 也可以被简写为 NL2SQL。

- 输入:自然语言问题,例如'查询表 t_user 的相关信息,结果按 id 降序排序,只保留前 10 个数据'。
- 输出:SQL 语句,例如
SELECT * FROM t_user ORDER BY id DESC LIMIT 10。
Text2SQL 应用主要是帮助用户减少开发时间,降低开发成本。'打破人与结构化数据之间的壁垒',即普通用户可以通过自然语言描述完成复杂数据库的查询工作,得到想要的结果。

基于 LLM 的应用开发基本架构如上图所示。本文介绍以 LangChain + OpenAI + RDB 的方式来实现 Text2SQL 的实践方案。
三、LangChain 基础知识
LangChain 是一个面向大语言模型的应用开发框架。如果将大语言模型比作人的大脑,那么可以将 LangChain 比作人的五官和四肢,它可以将外部数据源、工具和大语言模型连接在一起,既可以补充大语言模型的输入,也可以承接大语言模型的输出。
LangChain 提供各种不同的组件帮助使用 LLM,如下图所示,核心组件有 Models、Indexes、Chains、Memory、Prompt 以及 Agent。

3.1 Models
LangChain 本身不提供 LLM,提供通用的接口访问 LLM,可以很方便地更换底层的 LLM 以及自定义自己的 LLM。主要有两大类的 Models:
- LLM:将文本字符串作为输入并返回文本字符串的模型,类似 OpenAI 的 text-davinci-003。
- Chat Models:由语言模型支持将聊天消息列表作为输入并返回聊天消息的模型。一般使用的 ChatGPT 以及 Claude 为 Chat Models。
与模型交互可以通过给予 Prompt 的方式,LangChain 通过 PromptTemplate 的方式方便我们构建以及复用 Prompt。
代码示例如下:
langchain PromptTemplate
prompt = PromptTemplate(
input_variables=[],
template=
)
(prompt.format_prompt(question=))






