摘要:Spring AI Alibaba NL2SQL 是一个基于 Spring AI Alibaba 的开源项目,旨在让开发者能够通过自然语言直接查询数据库,无需编写复杂的 SQL 语句。
Spring AI Alibaba NL2SQL 是一个基于 Spring AI Alibaba 的开源项目,旨在让开发者能够通过自然语言直接查询数据库,无需编写复杂的 SQL 语句。
上一篇文章介绍了Spring AI Alibaba NL2SQL开源项目,本文将参考项目中的配置文件,进行初始化配置和数据,包括大模型API Key、MySQL数据库连接、MySQL 数据源等等。
在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进行语义匹配向量存储:将业务知识和表结构向量化存储在开源的 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: classpath:sql/schema.sql data-locations: classpath: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。
接下来,创建目标数据库的测试表和数据。
来源:软件架构