基于Spring AI Alibaba NL2SQL模块构建示例应用-配置数据源和大模型

B站影视 港台电影 2025-09-22 09:10 2

摘要:NL2SQL(Natural Language to SQL)是一项将用户用自然语言(如中文或英文)提出的问题,自动转换为一条可以执行的 SQL 查询语句 的技术。

什么是 NL2SQL?

NL2SQL(Natural Language to SQL)是一项将用户用自然语言(如中文或英文)提出的问题,自动转换为一条可以执行的 SQL 查询语句 的技术。

输入(自然语言): “上个月销售额最高的产品是什么?”

输出(SQL): SELECT product_name FROM sales WHERE sale_date >= '2023-10-01' AND sale_date

这项技术极大地降低了非技术人员与数据库交互的门槛,让他们可以直接用日常语言查询数据,无需学习复杂的SQL语法。Spring AI Alibaba NL2SQL 开源模块是阿里云析言 GBI 产品在数据问答领域的一次重要开源尝试,专注于 NL2SQL 场景下的核心能力开放。无论你是想快速搭建一个企业级数据助理原型,还是希望深入研究大模型在数据库交互中的应用,Spring-ai-alibaba-nl2sql 都是一个值得信赖的起点。

下面将基于NL2SQL 开源模块构建示例应用。

Spring AI Alibaba Examples 仓库是 Spring AI Alibaba 项目官方提供的示例代码集合,旨在帮助开发者快速上手并理解如何使用 Spring AI Alibaba 框架开发 AI 应用。

获取示例代码:git clone https://github.com/spring-ai-alibaba/examples.git

示例仓库包含多个 Example 项目,涵盖 Spring AI 和 Spring AI Alibaba 的各种用法。

这里关注是其中的spring-ai-alibaba-nl2sql-example 示例项目。

本模块是一个轻量级的数据库对话接口服务,基于 Spring Boot 构建。它对外暴露一个 /chat 接口,接收自然语言查询输入,并返回结构化的数据库问答结果。同时提供一个简单的可视化页面用于测试和展示对话功能。

获取示例项目之后,更新示例模块 nl2sql 的配置文件,如图所示:

打开 application.yml 配置文件,添加datasource 数据源。

这个datasource是NL2SQL系统的管理数据库,负责存储系统配置和元数据,而真正的查询目标数据库是通过智能体动态配置的。

这个数据源对应的表和示例数据,之前的文章已经介绍过了,这里不再赘述。

接下来,配置业务查询数据,如图所示,设置datasource、username和password等信息,这个是配置智能体真正的查询目标数据库。

同时,为了方便在本地测试运行,可以添加 spring.ai.alibaba.nl2sql.code-executor.code-pool-exectcutor 配置项,如上图所示。

spring.ai.alibaba.nl2sql.code-executor.code-pool-executor 是 Spring AI Alibaba NL2SQL 模块中一个用于配置 Python 代码执行器类型的配置项。它决定了在执行数据分析等后续任务时,系统如何运行生成的 Python 代码。

当 NL2SQL 流程中开启了 Python 代码生成与执行 的进阶功能时,系统在得到 SQL 查询结果后,可能会进一步根据用户意图生成 Python 代码(例如使用 Pandas 进行数据可视化分析)。code-pool-executor 的值就决定了这段生成的 Python 代码在哪里以及如何被执行。

目前,项目中提供了4个配置项,后续还增加了 local 配置项。

如果配置文件中没有配置项,默认配置项为:

/** * 指定代码容器池运行服务的实现类 */ CodePoolExecutorEnum codePoolExecutor = CodePoolExecutorEnum.docker;

选择 docker:系统会在一个全新的 Docker 容器中启动 Python 解释器来执行代码。执行完毕后,容器通常会被销毁,确保了环境的干净和安全。

选择 local:系统会尝试在当前 Java 应用程序所在的服务器上直接调用 Python 解释器来执行代码。这要求服务器必须预先安装好 Python 以及代码可能依赖的库(如 pandas, matplotlib 等)。

在本地开发测试环境中,可以配置为:

spring.ai.alibaba.nl2sql.code-executor.code-pool-exectcutor = AI_SIMULATION

这是一个非常特殊的模式。它不会真正执行生成的 Python 代码,而是通过 LLM 大模型来模型执行的。解析代码,并返回一个模拟的成功结果(例如一张模拟的图表图片或一段文本输出),用于演示和测试 NL2SQL 到生成代码的完整流程,而无需关心执行环境的配置。

另外,还需要更新AI_DASHSCOPE_API_KEY(大模型密钥)、datasource数据源的账号和密码等等。

三、检查依赖项

spring-ai-alibaba-starter-nl2sql 是 Spring AI Alibaba 生态中的一个核心模块,它致力于让 Java 开发者能够轻松构建自然语言转 SQL(NL2SQL)的应用。简单来说,它允许用户用日常语言(如中文)提问,系统会自动生成对应的 SQL 语句并执行,最终返回查询结果,极大降低了数据库查询的技术门槛。

该模块源自阿里云百炼平台析言 GBI 产品的核心能力开源化,旨在解决传统固定查询无法满足灵活多变的业务需求这一痛点。

在pom.xml 文件中,已经添加了 spring-ai-alibaba-starter-nl2sql 依赖项。

com.alibaba.cloud.aispring-ai-alibaba-starter-nl2sql${spring-ai-alibaba.version}

在模块中,定义了对应的版本:

1.0.0.3

接下来将启动上述示例应用,并进行测试验证。

来源:软件架构

相关推荐