文章介绍如何使用LlamaIndex框架构建Text-to-SQL查询引擎,实现自然语言到SQL的转换。通过NLSQLTableQueryEngine组件,用户可用自然语言查询数据库无需编写SQL。文章详细讲解了组件功能、使用方法、代码实现,分析了上下文限制、SQL注入风险等局限性,提供了基于表检索的优化方案和安全防护建议。该技术降低了数据库查询门槛,使非专业人员也能轻松获取和分析结构化数据。


二、测试表和数据

我们使用本地的一个 Postgres 数据库来进行测试,user_search_history表和chat_session表,结构如下:

user_search_history表(用户的搜索记录表)结构:

chat_session表(多轮对话会话表)结构:

两个表里有若干条数据。接下来我们使用LlamaIndex框架中强大的组件来实现Text2SQL查询。

三、 使用 NLSQLTableQueryEngine 组件

NLSQLTableQueryEngine 是 LlamaIndex(以前叫 GPT-Index)里的一个组件,用来把人类的自然语言查询 (“哪个城市人口最多?”、“给我过去一周销售额最高的产品”等)转换为 SQL 查询语句,然后执行这些 SQL,从数据库里取出结构化结果,最后把结果返回给用户。

(一)、功能 & 用处

  • 自然语言 → SQL

用户可以用普通语言发问,NLSQLTableQueryEngine 将其“翻译 (synthesize)”成 SQL 查询。这样你就不用写 SQL,也不用熟悉数据库 schema 的细节。

  • 执行结构化查询

翻译出的 SQL 可以在真实的数据库上执行,从表中读取准确的数据,比如最大、最小、平均、排序、过滤等操作。

  • 节省学习成本,简化接口

对于非数据库专家,或者只想快速应用数据的人来说,不用写 SQL 是大好事。这样系统变得更友好,也更容易集成到聊天机器人、BI 工具、Dashboard 模块等。

  • 可指定表以控制上下文

在创建这个引擎时,可以指定哪些表 (“tables”) 是此次查询可用的。这样引擎只加载这些表的 schema(结构信息),避免把所有表拉进 prompt(提示)里导致上下文窗口(context window)过大,性能或成本崩掉。

(二)、实例代码

完整的代码如下:

# ================== 初始化 大模型 Langfuse ==================

结果如下:

...

采用该方法时,需预先准备三类参数:一是 SQLDatabase 对象,二是待查询的目标数据表,三是所选用的大模型。参数就绪后,可直接完成查询引擎的构造。引擎搭建完毕,用户便能以自然语言与数据库交互,即便不掌握 SQL 语句,也可对数据库内的数据执行查询、统计乃至分析操作。

SQL 查询引擎的技术原理是:将用户输入的问题与数据库表的结构及相关描述信息整合为 Prompt,输入大模型;借助大模型的理解与生成能力,将其转换为关系数据库可执行的 SQL 语句并运行;最终对执行结果进行总结后输出答案。

(三)局限 &风险

  • 上下文窗口 / 提示长度限制

如果数据库中表太多或者每个表 schema 很复杂,把所有的 schema 放进 prompt 会把语言模型的上下文搞爆。LLM 输入限制一满就可能出错或者生成不准确的 SQL。指定表或做动态检索表模式是必要策略。

  • SQL 安全 / 注入风险

因为生成的 SQL 是自动的,如果不加限制就可能被滥用。例如用户问的问题可能被“引导”生成恶意查询或破坏数据库的查询。通常建议只用只读权限、受限制角色、审查生成 SQL、避免执行危险操作。

  • LLM 出错或「幻觉性回答」

LLM 有可能误解自然语言意图、生成无效的 SQL、引用表/列名错误、漏掉过滤条件等。引擎本身不是完美的“语义理解器”;对于复杂 query,尤其是涉及多个表 JOIN、嵌套子查询等,错误率会上升。要有验证机制。

  • 效率问题

每次自然语言查询都要生成 SQL 并执行数据库访问,这在大表、大数据量或高频查询场景下可能慢或成本高。要注意缓存、索引、查询优化等常规数据库性能调优。

四、基于实时表检索的查询引擎

大型数据库支持 SQL 查询时,需为所有数据表配置参数。但表过多可能导致大模型上下文溢出,这是因 NLSQLTableQueryEngine 组件需将表的 Schema 信息(结构及描述)整合到 Prompt 中实现 Text-to-SQL。 因此,可在 Text-to-SQL 前先根据问题检索所需表,再基于这些表生成 SQL,即每次仅用相关 Schema,以节约空间、减少干扰。

通过框架的 SQLTableRetrieverQueryEngine 组件可实现这一功能,传入 object_index 参数即可检索相关 SQLTableSchema 对象。

示例代码:

# ================== 初始化 大模型 Langfuse ==================

可见输出结果与第三章示例的输出结果一致。在执行查询前,你也可直接调用 retriever 方法查看检索到的 Schema 信息,以此验证检索结果的准确性。

# 调用 retriever 方法来查看检索出的 Schema 信息,

这段代码的底层使用Embedding大模型,找到最接近的一个表名。这样在后面的查询时候只需要1个表的schema信息即可。

五、防护建议

  • 安全风险:text to SQL 最大隐患是 prompt injection 和 SQL 注入。LLM 可能被诱导生成如 DROP/DELETE/UPDATE 等危险语句,导致数据丢失或泄露。即使只允许 SELECT,攻击者也可能通过构造查询窃取敏感信息。社区已披露多例实际攻击案例,官方建议务必限制数据库账号权限、只开放只读视图、在生产环境中严格审查和过滤 LLM 生成的 SQL 语句。
  • 准确性与可控性:LLM 生成 SQL 受 prompt、表结构、上下文窗口等影响,复杂查询(如多表 join、嵌套子查询、权限过滤)容易出错或遗漏条件,可能导致数据误用或越权访问。建议对 LLM 生成的 SQL 进行二次校验(如正则限制只允许 SELECT),或采用 sql_only=True 先人工审核再执行。
  • 防护建议:

数据库层面:只用只读账号,限制权限,必要时只暴露视图。

应用层面:对 LLM 生成的 SQL 做白名单校验(如只允许 SELECT),可用正则或 AST 解析。

业务层面:对敏感表/字段做脱敏或隐藏,避免 LLM 生成涉及敏感信息的 SQL。

交互层面:对用户输入和 LLM 输出都做内容安全检测,防 prompt injection。

审计与监控:记录所有 SQL 执行日志,及时发现异常操作。

读者福利大放送:如果你对大模型感兴趣,想更加深入的学习大模型**,那么这份精心整理的大模型学习资料,绝对能帮你少走弯路、快速入门**

如果你是零基础小白,别担心——大模型入门真的没那么难,你完全可以学得会

👉 不用你懂任何算法和数学知识,公式推导、复杂原理这些都不用操心;
👉 也不挑电脑配置,普通家用电脑完全能 hold 住,不用额外花钱升级设备;
👉 更不用你提前学 Python 之类的编程语言,零基础照样能上手。

你要做的特别简单:跟着我的讲解走,照着教程里的步骤一步步操作就行。

包括:大模型学习线路汇总、学习阶段,大模型实战案例,大模型学习视频,人工智能、机器学习、大模型书籍PDF。带你从零基础系统性的学好大模型!

现在这份资料免费分享给大家,有需要的小伙伴,直接VX扫描下方二维码就能领取啦😝↓↓↓
在这里插入图片描述

为什么要学习大模型?

数据显示,2023 年我国大模型相关人才缺口已突破百万,这一数字直接暴露了人才培养体系的严重滞后与供给不足。而随着人工智能技术的飞速迭代,产业对专业人才的需求将呈爆发式增长,据预测,到 2025 年这一缺口将急剧扩大至 400 万!!
在这里插入图片描述

大模型学习路线汇总

整体的学习路线分成L1到L4四个阶段,一步步带你从入门到进阶,从理论到实战,跟着学习路线一步步打卡,小白也能轻松学会!
在这里插入图片描述

大模型实战项目&配套源码

光学理论可不够,这套学习资料还包含了丰富的实战案例,让你在实战中检验成果巩固所学知识
在这里插入图片描述

大模型学习必看书籍PDF

我精选了一系列大模型技术的书籍和学习文档(电子版),它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础。
在这里插入图片描述

大模型超全面试题汇总

在面试过程中可能遇到的问题,我都给大家汇总好了,能让你们在面试中游刃有余
在这里插入图片描述

这些资料真的有用吗?

这份资料由我和鲁为民博士(北京清华大学学士和美国加州理工学院博士)共同整理,现任上海殷泊信息科技CEO,其创立的MoPaaS云平台获Forrester全球’强劲表现者’认证,服务航天科工、国家电网等1000+企业,以第一作者在IEEE Transactions发表论文50+篇,获NASA JPL火星探测系统强化学习专利等35项中美专利。本套AI大模型课程由清华大学-加州理工双料博士、吴文俊人工智能奖得主鲁为民教授领衔研发。

资料内容涵盖了从入门到进阶的各类视频教程和实战项目,无论你是小白还是有些技术基础的技术人员,这份资料都绝对能帮助你提升薪资待遇,转行大模型岗位。
在这里插入图片描述
👉获取方式

😝有需要的小伙伴,可以保存图片到VX扫描下方二维码免费领取【保证100%免费】
在这里插入图片描述
相信我,这套大模型系统教程将会是全网最齐全 最适合零基础的!!

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐