2026年7月16日 周四晚上19:30,报名腾讯会议了解“如何构建自进化的动态知识库(Brain)”(限30人)
免费POC, 零成本试错
FDE知识库

FDE知识库

学习大模型的前沿技术与行业落地应用


收藏

DeepSeek与NL2SQL的完美结合:如何让数据库查询变得前所未有的简单

发布日期:2025-02-14 09:27:16 浏览次数: 4431
作者:HELLO程序员

微信搜一搜,关注“HELLO程序员”

推荐语

掌握前沿技术,让数据库查询变得轻松又高效。
核心内容:
1. SuperSQL:专为简化数据库查询设计的Java框架
2. 特性解析:自然语言到SQL的智能转换,RAG训练技术
3. 应用场景:AI赋能传统企业,提升数据库操作效率

杨芳贤
53AI创始人/腾讯云(TVP)最具价值专家

深耕AGI!!!!!
研究的越深越来越发现AI正在慢慢的影响着各行各业的人。因此我们做了些什么?
我们开源了一个Java的NL2SQL框架,我们一起来看看!

SuperSQL

中国人自己的生成式SQL Java框架!轻量,易用,易扩展!



今天,我们非常激动地向大家介绍一款全新的Java框架——SuperSQL 。这款框架专为简化复杂的数据库查询过程而设计,旨在让开发者和用户能够通过简单的自然语言描述获取所需数据。

Super-Sql 简介

Super-Sql 是一个基于国内外先进生成式大模型的Java框架,专注于将数据库表结构通过检索增强生成(RAG, Retrieval-Augmented Generation)技术进行训练,从而实现从自然语言文本到SQL查询的智能转换(Text to SQL)。该框架旨在简化复杂的数据库查询过程,使开发者和用户能够通过简单的自然语言描述获取所需数据。

主要特性包括:
  • 生成式SQL
    利用强大的生成式大模型,自动将自然语言问题转化为精确的SQL查询语句。
  • RAG训练
    通过检索增强生成技术对数据库表结构进行深度学习训练,提高SQL生成的准确性和效率。
  • 类型安全与灵活易用
    结合Java的泛型机制确保编译期类型检查,同时提供简洁直观的API设计,易于集成到现有项目中。
  • 多数据库支持
    兼容多种主流数据库系统,满足不同应用场景的需求。
  • 性能优化
    经过精心设计与调优,在保证高效执行的同时保持良好的可读性。

Super-Sql 适用于希望在Java应用程序中快速、安全地进行复杂数据库操作,并且希望通过自然语言处理技术为传统企业应用快速实现AI赋能的场景。

Super-Sql 工作原理

Super-Sql 的工作原理基于 RAG 技术,通过检索增强生成技术对数据库表结构进行深度学习训练,从而实现从自然语言文本到SQL查询的智能转换。具体来说,当用户提供一段自然语言描述时,框架会首先解析这段描述,并根据预训练的模型生成相应的SQL查询语句。这些查询语句可以进一步用于实际的数据库操作。



快速入门指南

想要快速上手?只需几个步骤即可开始您的SuperSQL之旅:

导入Super-Sql的工程
git clone https://gitee.com/guocjsh/supersql-open.git#进入super-sql-console工程

配置Super-Sql的配置文件

配置init-train配置项,默认为false,表示不进行训练,如果为true,则自动根据数据库连接配置进行全表训练。

super-sql:
  init-train: false
大语言模型配置
Azure OpenAI
<!--spring ai azure openai 模型--><dependency>    <groupId>org.springframework.ai</groupId>    <artifactId>spring-ai-azure-openai-spring-boot-starter</artifactId></dependency>

Azure的配置文件如下:

spring:  ai:    azure:      openai:        api-key: xxxxxxxxxxxxxx        chat:          options:            deployment-name: gpt-4o-latest        endpoint: https://your-resource-name.openai.azure.com/        embedding:          options:            deployment-name: embedding-ada-002

请求调用Text To SQL示例:

//使用azure的Chat模型
private final AzureOpenAiChatModel azureChatModel;

private final SpringSqlEngine sqlEngine;

private final SpringVectorStore store;

@GetMapping("getSuperSql")
public Object getSuperSql(@RequestParam String question) {
    String sql = sqlEngine.setChatModel(azureChatModel).generateSql(question);
    Object object = sqlEngine.executeSql(sql);
    return object;
}
Ollama

添加Ollama的Spring AI依赖:

<!--spring ai azure ollama-->
<dependency>
   <groupId>org.springframework.ai</groupId>
   <artifactId>spring-ai-ollama-spring-boot-starter</artifactId>
</dependency>

Ollama的配置文件如下:

让我们来试一下最热的DeepSeek模型

spring:  ai:    ollama:      base-url: http://localhost:11434      chat:        options:          model: deepseek-r1:32b          temperature: 0.7      embedding:        options:          model: mxbai-embed-large      init:        pull-model-strategy: never        embedding:          additional-models:            - mxbai-embed-large

embedding模型配置:

spring:  ai:    ollama:      embedding:        options:          model: mxbai-embed-large      init:        pull-model-strategy: never        embedding:          additional-models:            - mxbai-embed-large

参考修改Embedding模型https://ollama.com/search?c=embedding

请求调用Text To SQL示例:

//使用azure的Chat模型
private final OllamaChatModel chatModel;

private final SpringSqlEngine sqlEngine;

private final SpringVectorStore store;

@GetMapping("getSuperSql")
public Object getSuperSql(@RequestParam String question) {
    String sql = sqlEngine.setChatModel(chatModel).generateSql(question);
    Object object = sqlEngine.executeSql(sql);
    return object;
}

向量数据库配置

Chroma
安装chroma环境
pip install chromadbchroma run
看到这个界面chromadb启动成功

<!--spring ai chroma 的向量数据库--><dependency>    <groupId>org.springframework.ai</groupId>    <artifactId>spring-ai-chroma-store-spring-boot-starter</artifactId></dependency>
参考Spring AI Vector Databases 
https://docs.spring.io/spring-ai/reference/1.0/api/vectordbs.html

请求结果返回示例


训练指定内容

强化训练数据库的DDL语句
@GetMapping("trainDdl")    public String trainDDl() {        String ddl = """                 CREATE TABLE `dtp_hospital` (                 	`id` BIGINT NOT NULL COMMENT '主键',                 	`province` VARCHAR ( 20 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT '省份',                 	`city` VARCHAR ( 20 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT '城市',                 	`reporting_team` VARCHAR ( 50 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT '提报团队',                 	`district` VARCHAR ( 20 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT '区',                 	`hospital_name` VARCHAR ( 100 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT '申请的DTP药房 主要对应的医院名称',                 	`hospital_code` VARCHAR ( 50 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT '申请DTP主要对应的医院code',                 	`hospital_address` VARCHAR ( 255 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT '医院具体地址',                 	`location` VARCHAR ( 100 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT '医院所在经纬度',                 	`del_flag` INT NULL DEFAULT 0 COMMENT '删除状态 0正常 1已删除',                 	`create_by` VARCHAR ( 32 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人',                 	`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',                 	`update_by` VARCHAR ( 32 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '更新人',                 	`update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',                 	`image` VARCHAR ( 255 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT '图片',                 	PRIMARY KEY ( `id` ) USING BTREE )                 	ENGINE = INNODB CHARACTER SET = utf8 COLLATE = utf8_unicode_ci COMMENT = '医院表' ROW_FORMAT = Dynamic;                """;        sqlEngine.setChatModel(azureChatModel).train(TrainBuilder.builder().content(ddl).policy(TrainPolicyType.DDL).build());        return "successful training";    }
单独训练指定SQL
@GetMapping("trainSql")    public String trainSql() {        String sql="SELECT * FROM DTP_HOSPITAL WHERE DISTRICT LIKE '%黄浦区%';";        String question="在黄浦区的医院有哪些?";        sqlEngine.setChatModel(azureChatModel).train(TrainBuilder.builder().content(sql).question(question).policy(TrainPolicyType.SQL).build());        return "successful training";    }

启动SuperSQL控制台项目

启动Super-Sql控制台的Spring Boot项目:

导入Super-Sql UI项目到VSCode:

npm installnpm run dev

访问:http://localhost:5173/chat

数据库中执行的效果

SuperSQL官方文档

访问:http://www.ai-space.com.cn/

参考文档

Spring-Ai的官方文档:https://docs.spring.io/spring-ai/docs/getting-started

代码托管

  • Gitee:https://gitee.com/guocjsh/supersql-open

更详细的介绍与案例分析

Super-Sql 在实际项目中的应用

在实际项目中,Super-Sql 可以极大地简化开发人员的工作流程。例如,在一个医疗信息管理系统中,开发者可以通过简单的自然语言描述来获取特定医院的数据,而不必手动编写复杂的SQL查询语句。以下是一个具体的案例分析:

假设我们需要查询位于“黄浦区”的所有医院的信息,传统的做法是编写如下的SQL查询语句:

SELECT * FROM DTP_HOSPITAL WHERE DISTRICT LIKE '%黄浦区%';

而在使用 Super-Sql 后,开发者只需输入自然语言描述:“在黄浦区的医院有哪些?”框架会自动生成上述的SQL查询语句并执行,最终返回所需的数据。这不仅提高了开发效率,还减少了出错的可能性。

Super-Sql 的高级功能

除了基本的SQL查询转换,Super-Sql 还提供了许多高级功能,以满足不同的业务需求:

  1. 强化训练数据库的DDL语句:通过提供完整的DDL语句,Super-Sql 可以更好地理解数据库的结构,从而生成更准确的SQL查询语句。

  2. 单独训练指定SQL:对于一些特殊的SQL查询,开发者可以通过指定具体的SQL语句和问题描述来进行训练,提升生成的准确性。

  3. 与向量数据库的无缝集成:Super-Sql 支持与Chroma等向量数据库的无缝集成,进一步增强了其在复杂查询场景中的表现。

性能优化与可扩展性

为了确保在大规模数据集上的高效执行,Super-Sql 进行了多项性能优化措施。其中包括:

  • 批量处理:通过将大量文档分解成较小的批次,确保每个批次不超过模型的最大上下文窗口大小,从而避免因单次请求过多导致的错误或截断问题。

  • API速率限制管理:合理安排API调用频率,充分利用API速率限制,提高整体执行效率。

此外,Super-Sql 提供了高度可扩展的设计,允许开发者根据具体需求定制和扩展框架的功能,满足多样化的应用场景。


53AI,企业落地大模型首选服务商

产品:场景落地咨询+大模型应用平台+行业解决方案

承诺:免费POC验证,效果达标后再合作。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

添加专属顾问

回到顶部

加载中...

扫码咨询

扫码登录
登录即表示您同意《53AI网站服务协议》
服务协议

欢迎您使用【53AI 官方网站】(以下简称“本网站”或“我们”)。本《会员服务协议》(以下简称“本协议”)是您(以下简称“会员”或“用户”)与【深圳市博思协创网络科技有限公司】之间关于注册、登录及使用本网站会员服务所订立的法律协议。

在您注册或登录前,请务必审慎阅读、充分理解各条款内容,特别是免除或限制责任的条款、知识产权条款、争议解决条款等。此类条款将以加粗形式提示您注意。 当您通过微信公众号授权、手机验证码验证或其他方式成功登录本网站时,即视为您已完全理解并同意接受本协议的全部内容。

一、 定义

本网站:指由【深圳市博思协创网络科技有限公司】运营的,域名为【53ai.com】的网站及相关移动端页面。

会员服务:指本网站向注册会员提供的知识库文章查阅、内容检索及其他相关增值服务。

知识库内容:指本网站发布的包括但不限于文字、图表、数据、研究报告、行业分析等数字化内容资源。

二、 账号注册与登录

登录方式:本网站支持以下登录方式,您可根据实际情况选择:

微信公众号授权登录:您同意将您的微信OpenID信息授权给本网站,用于创建或关联会员账号。

手机验证码登录:您需提供真实有效的手机号码,并通过短信验证码完成身份验证与登录/注册。

账号安全:您的账号仅限您本人使用,禁止赠与、借用、租用、转让或售卖。因您保管不善导致的账号被盗、密码泄露等损失,由您自行承担。

实名认证:根据相关法律法规要求,我们可能要求您在特定功能下完成实名认证。如您拒绝提供,可能无法使用部分或全部服务。

未成年人保护:若您未满18周岁,请在法定监护人的陪同下阅读本协议,并在征得监护人同意后使用本服务。

三、 服务内容与规范

知识库查阅权限:会员登录后,有权按照其会员等级对应的权限范围,在线浏览、检索本网站知识库中的相关文章及内容。

服务变更:我们有权根据业务发展需要,调整、变更或终止部分服务内容,并将以网站公告、公众号消息等方式提前通知。

禁止行为:您在使用服务时不得实施以下行为:

利用技术手段批量爬取、下载、转存知识库内容;

将知识库内容用于商业目的或未经授权地向第三方传播;

干扰本网站正常运行或侵犯其他用户合法权益;

发布违法违规信息或从事违反公序良俗的活动。

四、 知识产权声明

权利归属:本网站知识库中的排版设计、软件代码等内容的知识产权均归【公司全称】或原权利人所有,受《中华人民共和国著作权法》等法律保护。

有限许可:本网站授予会员一项非独占、不可转让、不可转授权的普通许可,仅限于个人学习、研究之目的在线查阅知识库内容。

侵权追责:未经书面许可,任何单位或个人不得以任何形式复制、转载、摘编、镜像、汇编或以其他方式使用上述内容。一经发现,我们保留追究其法律责任的权利。

五、 个人信息保护

我们重视对您个人信息的保护。关于我们如何收集、使用、存储和保护您的个人信息,请单独阅读 《隐私政策》。

您通过微信公众号授权或手机号验证所提供的信息,我们将严格按照《个人信息保护法》的规定处理,仅用于身份识别、服务提供及安全验证等必要用途。

您可以随时通过网站设置或联系客服行使查阅、更正、删除个人信息及撤回授权同意的权利。

六、 免责声明

内容准确性:知识库内容仅供参考,不构成专业建议。我们不对其完整性、准确性、时效性作任何明示或暗示的保证,您应自行判断并承担使用风险。

不可抗力:因自然灾害、政策法规变化、网络故障、第三方平台接口异常(如微信接口维护、运营商短信通道故障)等不可抗力导致的服务中断或延迟,我们不承担违约责任。

第三方链接:本网站可能包含指向第三方网站的链接,该等网站的内容和服务不受我们控制,请您自行甄别风险。

七、 违约责任

如您违反本协议约定,我们有权视情节采取警告、限制功能、暂停服务、注销账号等措施,并保留要求赔偿损失的权利。

如因您的违约行为导致我们遭受行政处罚、第三方索赔或商誉损失,您应承担全部赔偿责任(包括但不限于罚款、赔偿金、律师费、公证费等)。

八、 法律适用与争议解决

本协议的订立、执行和解释均适用中华人民共和国大陆地区法律。

因本协议产生的或与本协议有关的任何争议,双方应友好协商解决;协商不成的,任何一方均可向【公司所在地】有管辖权的人民法院提起诉讼。

九、 其他

本协议构成双方就本服务达成的完整协议,取代此前任何口头或书面约定。

本协议任一条款被认定为无效或不可执行的,不影响其他条款的效力。

我们对本协议享有最终解释权,并在法律允许的范围内保留随时修改的权利。修改后的协议一经公布即生效,继续使用服务即视为同意修订内容。


已查阅