DC娱乐网

Spring AI Alibaba NL2SQL 开源项目-初始化配置和数据

Spring AI Alibaba NL2SQL 是一个基于 Spring AI Alibaba 的开源项目,旨在让开发

Spring AI Alibaba NL2SQL 是一个基于 Spring AI Alibaba 的开源项目,旨在让开发者能够通过自然语言直接查询数据库,无需编写复杂的 SQL 语句。

上一篇文章介绍了Spring AI Alibaba NL2SQL开源项目,本文将参考项目中的配置文件,进行初始化配置和数据,包括大模型API Key、MySQL数据库连接、MySQL 数据源等等。

一、配置 API Key

在spring-ai-alibaba-nl2sql-management/src/main/resources/application.yml 配置文件中,找到大模型LLM相关的配置项。

这段配置是Spring AI与阿里平台 DashScope 的集成配置,用于配置大语言模型和向量嵌入服务。

spring: ai: openai: base-url: https://dashscope.aliyuncs.com/compatible-mode api-key: ${AI_DASHSCOPE_API_KEY} model: qwen-max embedding: model: text-embedding-v4

这里使用 Spring AI的OpenAI适配器,阿里云DashScope提供OpenAI兼容的API接口,支持与OpenAI 相同的请求格式和响应结构。

api-key: ${AI_DASHSCOPE_API_KEY}

表示从环境变量中读取 API key,需要在启动时设置AI_DASHSCOPE_API_KEY环境变量。

语言模型选择 qwen-max,阿里云最强的大语言模型,用于自然语言理解、SQL生成、对话交互等核心功能,具备强大的中文理解和代码生成能力。

embedding: model: text-embedding-v4

文本向量化模型负责将文本转换为向量表示,用于语义相似度计算、知识检索、RAG增强等,v4版本具有更高的精度和更好的中文支持。

简单小结:

自然语言理解:使用qwen-max理解用户查询意图SQL生成:根据数据库结构生成准确的SQL语句知识检索:使用text-embedding-v4进行语义匹配向量存储:将业务知识和表结构向量化存储

二、配置management数据库

在开源的 spring-ai-alibaba-nl2sql-management 子模块中,有如下数据库配置项。

这个datasource是NL2SQL系统的管理数据库,负责存储系统配置和元数据,而真正的查询目标数据库是通过智能体动态配置的。这种设计实现了系统管理与业务数据的分离,支持多租户和多数据源场景。

spring: datasource: url: ${NL2SQL_DATASOURCE_URL:jdbc:mysql://127.0.0.1:3306/nl2sql_database?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&allowMultiQueries=true&allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=Asia/Shanghai} username: ${NL2SQL_DATASOURCE_USERNAME:root} password: ${NL2SQL_DATASOURCE_PASSWORD:root} driver-class-name: com.mysql.cj.jdbc.Driver type: com.alibaba.druid.pool.DruidDataSource jpa: hibernate: ddl-auto: update show-sql: true properties: hibernate: format_sql: true dialect: org.hibernate.dialect.MySQLDialect defer-datasource-initialization: true sql: init: mode: always schema-locations:path:sql/schema.sql data-locations:path:sql/data.sql continue-on-error: true separator: ; encoding: utf-8

上面数据库连接池配置使用了阿里开源的Druid 连接池。这个datasource配置不是用户查询的目标数据库,系统元数据管理的核心配置。

在Spring Boot应用中,resources/sql目录下的schema.sql和data.sql文件是数据库初始化脚本,用于自动创建表结构和插入初始数据。

schema.sql - 数据库表结构定义

表结构创建:定义了8个核心业务表的DDL语句约束定义:包含主键、外键、索引等数据库约束字段规范:规定字段类型、长度、默认值、注释等

data.sql - 初始化数据插入

示例数据:插入各表的示例记录,便于开发测试基础配置:提供系统运行所需的基础数据幂等性:使用INSERT IGNORE确保重复执行不会出错

在MySQL 服务器中创建数据库 n2sql_database,设置好对应的 username和password。后续在启动spring-ai-alibaba-nl2sql-management 应用时,会自动先执行schema.sql创建表,再执行data.sql插入数据。

表结构说明:

agent - 智能体主表,存储AI助手基本信息agent_datasource - 智能体与数据源关联关系agent_knowledge - 智能体知识关联,管理知识文档agent_preset_question - 智能体预设问题表,用于为每个智能体配置预设的常见问题,提升用户体验business_knowledge - 业务知识库,存储领域专业术语chat_session/chat_message - 对话会话和消息记录datasource - 数据源配置,连接外部数据库semantic_model - 语义模型,定义字段映射和同义词user_prompt_config - 用户自定义Prompt配置

三、初始化数据概览

data.sql文件初始化了AI智能体系统的完整示例数据,为系统提供了开箱即用的测试环境。

1. 智能体数据 (agent)

创建了4个不同领域的智能体:

中国人口GDP数据智能体 - 专门处理人口和GDP数据查询销售数据分析智能体 - 专注销售趋势和业务指标分析财务报表智能体 - 处理财务数据和报表生成库存管理智能体 - 专注库存状态和供应链分析

2. 数据源配置 (datasource)

下面这段代码是数据源配置的初始化数据,为AI智能体系统配置了两个示例数据源。

datasource 表存储了业务数据源配置信息,这些是智能体实际查询的目标数据库。

这里将实际查询的目标数据库设置为 ecommerce,后续会创建对应的表和测试数据。

-- 数据源示例数据 -- 示例数据源可以运行docker-compose-datasource.yml建立,或者手动修改为自己的数据源 INSERT IGNORE INTO `datasource` (`id`, `name`, `type`, `host`, `port`, `database_name`, `username`, `password`, `connection_url`, `status`, `test_status`, `description`, `creator_id`, `create_time`, `update_time`) VALUES (1, '生产环境MySQL数据库', 'mysql', 'mysql-data', 3306, 'ecommerce', 'root', 'root', 'jdbc:mysql://mysql-data:3306/product_db?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true', 'active', 'success', '生产环境主数据库,包含核心业务数据', 2100246635, NOW(), NOW()), (2, '数据仓库PostgreSQL', 'postgresql', 'postgres-data', 5432, 'data_warehouse', 'postgres', 'postgres', 'jdbc:postgresql://postgres-data:5432/data_warehouse', 'active', 'success', '数据仓库,用于数据分析和报表生成', 2100246635, NOW(), NOW());

这种设计实现了系统配置数据与业务查询数据的完全分离,支持复杂的多数据源NL2SQL场景。

注意:需要根据本地环境,更新mysql 服务器的数据库、账号、密码和完整的JDBC连接字符串,包含连接参数等等。否则,在应用启动过程中,初始化智能体时,出现无法连接上述datasource 数据源。另外,目前智能体Agent 暂时仅支持 MySQL 数据库,不支持PostgreSQL。

接下来,创建目标数据库的测试表和数据。