项目简介
这是一个基于Spring AI Alibaba的自然语言转SQL项目,能让你用自然语言直接查询数据库,不需要写复杂的SQL。
Github repository: https://github.com/spring-ai-alibaba/dataagent
替换chat-model、embedding-model和vector-store的实现类
本项目的ChatModel和EmbeddingModel默认使用DashScope的实现,VectorStore默认使用内存向量,你可以替换成其他模型实现。
在项目根 pom.xml 中的 dependencies 中可以替换ChatModel,EmbeddingModel和VectorStore的实现starter,以替换掉项目默认使用的实现:
<dependencies>
<!-- 在这里可以替换vector-store,chat-model和embedding-model的starter -->
<!-- 如果不使用默认依赖的话,需要手动配置application.yml -->
<dependency>
<groupId>com.alibaba.cloud.ai</groupId>
<artifactId>spring-ai-alibaba-starter-dashscope</artifactId>
<version>${spring-ai-alibaba.version}</version>
</dependency>
<!-- milvus -->
<!-- <dependency>-->
<!-- <groupId>org.springframework.ai</groupId>-->
<!-- <artifactId>spring-ai-starter-vector-store-milvus</artifactId>-->
<!-- </dependency>-->
</dependencies>
注意修改application.yml,以符合这些starter的需求。
举个例子,如果你需要使用Milvus作为向量库,使用DeepSeek的ChatModel,使用硅基流动的EmbeddingModel,你可以导入以下依赖:
<dependencies>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-model-deepseek</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-model-openai</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-vector-store-milvus</artifactId>
</dependency>
</dependencies>
然后这么写application.yml:
spring:
ai:
model:
chat: deepseek # 一定要配置此字段,否则会报多个Bean实例的异常
embedding: openai
deepseek:
chat:
api-key: ${DEEPSEEK_API_KEY}
openai:
api-key: ${SILICONFLOW_API_KEY}
embedding:
api-key: ${SILICONFLOW_API_KEY}
base-url: https://api.siliconflow.cn
options:
model: BAAI/bge-m3
vectorstore:
milvus:
initialize-schema: true
client:
host: ${MILVUS_HOST:192.168.16.100}
port: ${MILVUS_PORT:19530}
username: ${MILVUS_USERNAME:root}
password: ${MILVUS_PASSWORD}
databaseName: ${MILVUS_DATABASE:default}
collectionName: ${MILVUS_COLLECTION:vector_store}
embeddingDimension: 1536
indexType: IVF_FLAT
metricType: COSINE
id-field-name:
content-field-name:
metadata-field-name:
embedding-field-name:
项目结构
这个项目分为三个部分:
spring-ai-alibaba-nl2sql/
├── spring-ai-alibaba-nl2sql-management # 管理端(可直接启动的Web应用)
├── spring-ai-alibaba-nl2sql-chat # 核心功能(不能独立启动,供集成使用)
└── spring-ai-alibaba-nl2sql-common # 公共代码
快速启动
项目进行本地测试是在spring-ai-alibaba-nl2sql-management中进行
1. 业务数据库准备
可以在spring-ai-alibaba-example项目仓库获取测试表和数据:
- Schema:https://github.com/springaialibaba/spring-ai-alibaba-examples/blob/main/spring-ai-alibaba-nl2sql-example/chat/sql/schema.sql
- Data:https://github.com/springaialibaba/spring-ai-alibaba-examples/blob/main/spring-ai-alibaba-nl2sql-example/chat/sql/insert.sql
将表和数据导入到你的MySQL数据库中。
2. 配置management数据库
在spring-ai-alibaba-nl2sql-management/src/main/resources/application.yml中配置你的MySQL数据库连接信息。
初始化行为说明:默认开启自动创建表并插入示例数据(
spring.sql.init.mode: always)。生产环境建议关闭,避免示例数据回填覆盖你的业务数据。
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/nl2sql?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&allowMultiQueries=true&allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=Asia/Shanghai
username: ${MYSQL_USERNAME:root}
password: ${MYSQL_PASSWORD:root}
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource