微信扫码
和创始人交个朋友
我要投稿
掌握前沿技术,让数据库查询变得轻松又高效。 核心内容: 1. SuperSQL:专为简化数据库查询设计的Java框架 2. 特性解析:自然语言到SQL的智能转换,RAG训练技术 3. 应用场景:AI赋能传统企业,提升数据库操作效率
今天,我们非常激动地向大家介绍一款全新的Java框架——SuperSQL 。这款框架专为简化复杂的数据库查询过程而设计,旨在让开发者和用户能够通过简单的自然语言描述获取所需数据。
Super-Sql 是一个基于国内外先进生成式大模型的Java框架,专注于将数据库表结构通过检索增强生成(RAG, Retrieval-Augmented Generation)技术进行训练,从而实现从自然语言文本到SQL查询的智能转换(Text to SQL)。该框架旨在简化复杂的数据库查询过程,使开发者和用户能够通过简单的自然语言描述获取所需数据。
Super-Sql 适用于希望在Java应用程序中快速、安全地进行复杂数据库操作,并且希望通过自然语言处理技术为传统企业应用快速实现AI赋能的场景。
Super-Sql 的工作原理基于 RAG 技术,通过检索增强生成技术对数据库表结构进行深度学习训练,从而实现从自然语言文本到SQL查询的智能转换。具体来说,当用户提供一段自然语言描述时,框架会首先解析这段描述,并根据预训练的模型生成相应的SQL查询语句。这些查询语句可以进一步用于实际的数据库操作。
想要快速上手?只需几个步骤即可开始您的SuperSQL之旅:
git clone https://gitee.com/guocjsh/supersql-open.git#进入super-sql-console工程
配置init-train配置项,默认为false,表示不进行训练,如果为true,则自动根据数据库连接配置进行全表训练。
super-sql:
init-train: false
<!--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的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;
}
pip install chromadbchroma run
<!--spring ai chroma 的向量数据库--><dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-chroma-store-spring-boot-starter</artifactId></dependency>
@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"; }
@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"; }
启动Super-Sql控制台的Spring Boot项目:
导入Super-Sql UI项目到VSCode:
npm installnpm run dev
访问:http://localhost:5173/chat
数据库中执行的效果
访问:http://www.ai-space.com.cn/
Spring-Ai的官方文档:https://docs.spring.io/spring-ai/docs/getting-started
在实际项目中,Super-Sql 可以极大地简化开发人员的工作流程。例如,在一个医疗信息管理系统中,开发者可以通过简单的自然语言描述来获取特定医院的数据,而不必手动编写复杂的SQL查询语句。以下是一个具体的案例分析:
假设我们需要查询位于“黄浦区”的所有医院的信息,传统的做法是编写如下的SQL查询语句:
SELECT * FROM DTP_HOSPITAL WHERE DISTRICT LIKE '%黄浦区%';
而在使用 Super-Sql 后,开发者只需输入自然语言描述:“在黄浦区的医院有哪些?”框架会自动生成上述的SQL查询语句并执行,最终返回所需的数据。这不仅提高了开发效率,还减少了出错的可能性。
除了基本的SQL查询转换,Super-Sql 还提供了许多高级功能,以满足不同的业务需求:
强化训练数据库的DDL语句:通过提供完整的DDL语句,Super-Sql 可以更好地理解数据库的结构,从而生成更准确的SQL查询语句。
单独训练指定SQL:对于一些特殊的SQL查询,开发者可以通过指定具体的SQL语句和问题描述来进行训练,提升生成的准确性。
与向量数据库的无缝集成:Super-Sql 支持与Chroma等向量数据库的无缝集成,进一步增强了其在复杂查询场景中的表现。
为了确保在大规模数据集上的高效执行,Super-Sql 进行了多项性能优化措施。其中包括:
批量处理:通过将大量文档分解成较小的批次,确保每个批次不超过模型的最大上下文窗口大小,从而避免因单次请求过多导致的错误或截断问题。
API速率限制管理:合理安排API调用频率,充分利用API速率限制,提高整体执行效率。
此外,Super-Sql 提供了高度可扩展的设计,允许开发者根据具体需求定制和扩展框架的功能,满足多样化的应用场景。
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费场景POC验证,效果验证后签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2024-06-20
2024-10-14
2024-06-16
2024-06-14
2024-10-09
2024-05-31
2024-06-14
2024-07-03
2024-07-24
2024-06-06