当前位置: 首页 > news >正文

303-Spring AI Alibaba NL2SQL 向量管理示例

本示例展示了如何使用 Spring AI Alibaba 构建一个完整的数据库 Schema 管控模块,提供证据(evidence)及 schema 的管理能力,用于初始化数据库的 schema 信息,并支持对业务逻辑解释(evidence)进行增删改查操作。

1. 项目概述

向量管理模块是 Spring AI Alibaba NL2SQL 示例项目的一部分,主要功能包括:

  • 数据库 Schema 初始化:提供一键初始化功能,快速生成指定的数据库表结构。
  • 业务逻辑管理:支持对业务逻辑的增删改查操作,方便开发者维护复杂的业务规则。
  • RESTful API 接口:基于 Spring Boot 提供标准的 RESTful API,便于与其他系统集成。
  • 图形化管控页面:提供蓝白色调的图形化界面,包含业务逻辑解释管控和 Schema 管控两个 Tab 页面。

2. 技术栈与核心依赖

  • Spring Boot 3.x
  • Spring AI Alibaba (用于对接阿里云 DashScope 通义大模型)
  • Spring AI Alibaba NL2SQL (自然语言转SQL功能)
  • AnalyticDB 向量存储 (用于存储和检索向量数据)
  • Thymeleaf (模板引擎)
  • Maven (项目构建工具)

在 pom.xml 中,核心依赖如下:

<dependencies><!-- Spring AI Alibaba NL2SQL 核心依赖 --><dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-starter-nl2sql</artifactId><version>${spring-ai-alibaba.version}</version></dependency><dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-nl2sql-management</artifactId><version>${spring-ai-alibaba.version}</version></dependency><!-- Spring Web 用于构建 RESTful API --><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>6.2.5</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>3.3.1</version></dependency><!-- Thymeleaf 模板引擎 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId><version>3.4.0</version></dependency>
</dependencies>

3. 项目配置

在 src/main/resources/application.yml 文件中,配置 DashScope API Key 和向量存储相关信息。

server:port: 8061 # 服务器端口配置
spring:thymeleaf:enabled: truecheck-template-location: trueprefix: classpath:/static/mvc:view:prefix: /static/suffix: .htmlstatic-path-pattern: /static/**resources:static-locations: classpath:/static/web:resources:static-locations: classpath:/static/ai:dashscope:api-key: ${DASHSCOPE_API_KEY} # 建议使用环境变量,更安全mcp:server:name: xiyan-server    # MCP服务器名称version: 0.0.1           # 服务器版本号vectorstore:analytic:collectName: chatBiregionId: cn-hangzhoudbInstanceId: ${ANALYTICDB_INSTANCE_ID}managerAccount: ${ANALYTICDB_MANAGER_ACCOUNT}managerAccountPassword: ${ANALYTICDB_MANAGER_PASSWORD}namespace: chatnamespacePassword: chatdefaultTopK: 6defaultSimilarityThreshold: 0.75accessKeyId: ${ACCESS_KEY_ID}accessKeySecret: ${ACCESS_KEY_SECRET}openai:base-url: https://dashscope.aliyuncs.com/compatible-modeapi-key: ${DASHSCOPE_API_KEY}model: qwen-max
chatBi:dbConfig:url: ${DATABASE_URL}username: ${DATABASE_USERNAME}password: ${DATABASE_PASSWORD}schema: ${DATABASE_SCHEMA}connection-type: jdbcdialect-type: mysql

重要提示:请将上述配置中的环境变量设置为你从阿里云获取的有效 API Key 和数据库连接信息。你也可以直接将其写在配置文件中,但这不推荐用于生产环境。

4. 项目结构

项目的主要结构如下:

src/
└── main/├── java/│   └── com.alibaba.cloud.ai.example/│       ├── Application.java              # 应用程序入口│       ├── controller/                   # 控制器层│       │   ├── AnalyticDbVectorManagementController.java  # AnalyticDB向量管理控制器│       │   ├── HomeController.java       # 首页控制器│       │   └── SimpleVectorManagementController.java     # 简单向量管理控制器│       └── request/                      # 请求对象│           ├── DeleteRequest.java        # 删除请求│           ├── EvidenceRequest.java      # 证据请求│           ├── SchemaInitRequest.java    # Schema初始化请求│           └── SearchRequest.java        # 搜索请求└── resources/├── application.yml                   # 应用配置└── static/└── index.html                    # 前端页面

5. 核心代码实现

5.1 应用程序入口

Application.java 是 Spring Boot 应用程序的入口点:

package com.alibaba.cloud.ai.example;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication(scanBasePackages = {"com.alibaba.cloud.ai"})
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}

5.2 AnalyticDB 向量管理控制器

AnalyticDbVectorManagementController.java 提供了基于 AnalyticDB 的向量管理功能:

package com.alibaba.cloud.ai.example.controller;import com.alibaba.cloud.ai.request.SchemaInitRequest;
import com.alibaba.cloud.ai.request.SearchRequest;
import com.alibaba.cloud.ai.service.AnalyticDbVectorStoreManagementService;import org.springframework.ai.document.Document;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;import java.util.List;@RestController
public class AnalyticDbVectorManagementController {@Autowiredprivate AnalyticDbVectorStoreManagementService vectorStoreManagementService;@PostMapping("/add/evidence")public Boolean addEvidence(@RequestBody List<com.alibaba.cloud.ai.request.EvidenceRequest> evidenceRequests) {return vectorStoreManagementService.addEvidence(evidenceRequests);}@PostMapping("/search")public List<Document> search(@RequestBody SearchRequest searchRequestDTO) throws Exception {return vectorStoreManagementService.search(searchRequestDTO);}@PostMapping("/delete")public Boolean deleteDocuments(@RequestBody com.alibaba.cloud.ai.request.DeleteRequest deleteRequest) throws Exception {return vectorStoreManagementService.deleteDocuments(deleteRequest);}@PostMapping("/init/schema")public Boolean schema(@RequestBody SchemaInitRequest schemaInitRequest) throws Exception {return vectorStoreManagementService.schema(schemaInitRequest);}
}

5.3 简单向量管理控制器

SimpleVectorManagementController.java 提供了基于内存的简单向量管理功能:

package com.alibaba.cloud.ai.example.controller;import com.alibaba.cloud.ai.request.EvidenceRequest;
import com.alibaba.cloud.ai.request.SchemaInitRequest;
import com.alibaba.cloud.ai.service.SimpleVectorStoreManagementService;
import org.springframework.ai.document.Document;
import org.springframework.ai.vectorstore.SearchRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.List;@RestController
@RequestMapping("/simple")
public class SimpleVectorManagementController {@Autowiredprivate SimpleVectorStoreManagementService simpleVectorStoreService;@PostMapping("/add/evidence")public Boolean addEvidence(@RequestBody List<EvidenceRequest> evidenceRequests) {return simpleVectorStoreService.addEvidence(evidenceRequests);}@PostMapping("/search")public List<Document> search(@RequestBody SearchRequest searchRequestDTO) throws Exception {return simpleVectorStoreService.search(searchRequestDTO);}@PostMapping("/delete")public Boolean deleteDocuments(@RequestBody com.alibaba.cloud.ai.request.DeleteRequest deleteRequest) throws Exception {return simpleVectorStoreService.deleteDocuments(deleteRequest);}@PostMapping("/init/schema")public Boolean schema(@RequestBody SchemaInitRequest schemaInitRequest) throws Exception {simpleVectorStoreService.schema(schemaInitRequest);return true;}
}

5.4 请求对象

项目中定义了多个请求对象,用于接收前端传来的数据:

5.4.1 EvidenceRequest
package com.alibaba.cloud.ai.example.request;import java.io.Serializable;public class EvidenceRequest implements Serializable {private String content;private Integer type;public Integer getType() {return type;}public void setType(Integer type) {this.type = type;}public String getContent() {return content;}public void setContent(String content) {this.content = content;}
}
5.4.2 SchemaInitRequest
package com.alibaba.cloud.ai.example.request;import java.io.Serializable;
import java.util.List;import com.alibaba.cloud.ai.connector.config.DbConfig;public class SchemaInitRequest implements Serializable {private DbConfig dbConfig;private List<String> tables;public DbConfig getDbConfig() {return dbConfig;}public void setDbConfig(DbConfig dbConfig) {this.dbConfig = dbConfig;}public List<String> getTables() {return tables;}public void setTables(List<String> tables) {this.tables = tables;}
}
5.4.3 SearchRequest
package com.alibaba.cloud.ai.example.request;import java.io.Serializable;public class SearchRequest implements Serializable {private String query;private int topK;private String vectorType;public int getTopK() {return topK;}public void setTopK(int topK) {this.topK = topK;}public String getQuery() {return query;}public void setQuery(String query) {this.query = query;}public String getVectorType() {return vectorType;}public void setVectorType(String vectorType) {this.vectorType = vectorType;}
}
5.4.4 DeleteRequest
package com.alibaba.cloud.ai.example.request;import java.io.Serializable;public class DeleteRequest implements Serializable {private String id;private String vectorType;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getVectorType() {return vectorType;}public void setVectorType(String vectorType) {this.vectorType = vectorType;}
}

5.5 前端页面

index.html 提供了一个蓝白色调的图形化界面,包含两个主要 Tab 页面:

  • 业务逻辑解释管控:新增、召回、删除业务逻辑解释。
  • Schema 管控:初始化数据库 Schema。

页面主要功能包括:

  • 新增业务逻辑解释:填写内容和类型,选择存储类型(AnalyticDB 或 Memory)。
  • 召回业务逻辑解释:输入查询关键词,选择存储类型进行搜索。
  • 删除业务逻辑解释:输入 ID,选择存储类型进行删除。
  • 初始化数据库 Schema:填写数据库连接信息和表名,选择存储类型进行初始化。

6. API 接口文档

6.1 初始化当前数据库的 Schema

  • 请求方法POST
  • URL/init/schema 或 /simple/init/schema
  • 请求体:
    {"dbConfig": {"url": "jdbc:mysql://ip:port/database","username": "username","password": "password", "connectionType": "jdbc","dialectType": "mysql" },"tables": ["customers"]
    }
  • 返回示例:
    true

6.2 新增业务逻辑解释

  • 请求方法POST
  • URL/add/evidence 或 /simple/add/evidence
  • 请求体:
    [{"content": "冬天指的是今年11月到第二年的3月","type": 1 },{"content": "计算销量时只统计收货状态为已收货的订单","type": 2  }
    ]
  • 返回示例:
    true

6.3 召回业务逻辑解释

  • 请求方法POST
  • URL/search 或 /simple/search
  • 请求体:
    {"query": "冬季","vectorType": "evidence","topK": 100
    }
  • 返回示例:
    [{"id": "33280667-0aad-449d-b1ad-78cf140ff134","text": "计算销量时只统计收货状态为已收货的订单","media": null,"metadata": {"vectorType": "evidence","evidenceType": 2},"score": null}
    ]

6.4 删除业务逻辑解释

  • 请求方法POST
  • URL/delete 或 /simple/delete
  • 请求体:
    {"id": "33280667-0aad-449d-b1ad-78cf140ff134"
    }
  • 返回示例:
    true

7. 运行与测试

7.1 启动应用

  1. 确保已配置好 application.yml 中的所有必要参数。
  2. 运行 Application.java 中的 main 方法启动 Spring Boot 应用。
  3. 应用将在端口 8061 上启动。

7.2 访问管控页面

打开浏览器,访问以下地址:

http://localhost:8061/index.html

7.3 测试功能

7.3.1 测试业务逻辑解释管控
  1. 切换到"业务逻辑解释管控" Tab。
  2. 在"新增业务逻辑解释"部分填写内容和类型,点击"新增业务逻辑"按钮。
  3. 在"召回业务逻辑解释"部分输入查询关键词,点击"搜索业务逻辑"按钮。
  4. 在"删除业务逻辑解释"部分输入 ID,点击"删除业务逻辑"按钮。
7.3.2 测试 Schema 管控
  1. 切换到"Schema 管控" Tab。
  2. 在"初始化当前数据库的 schema"部分填写数据库连接信息和表名,点击"初始化 Schema"按钮。

8. 实现思路与扩展建议

8.1 实现思路

本示例的核心思想是向量存储与检索。我们将业务逻辑解释和数据库 Schema 信息转换为向量,并存储在向量数据库中,实现高效的语义检索。这使得:

  • 语义搜索:能够根据语义相似性而非关键词匹配来检索相关内容。
  • 上下文感知:NL2SQL 系统可以根据检索到的业务逻辑解释更好地理解用户意图。
  • 灵活扩展:可以轻松添加新的业务逻辑解释,无需修改核心代码。

8.2 扩展建议

  • 多向量存储支持:可以扩展支持更多的向量存储系统,如 Milvus、Chroma 等。
  • 权限管理:添加用户权限管理,控制不同用户对业务逻辑解释和 Schema 的访问权限。
  • 版本控制:为业务逻辑解释和 Schema 添加版本控制功能,支持历史版本查看和回滚。
  • 批量操作:支持批量导入和导出业务逻辑解释,提高管理效率。
  • 智能推荐:基于用户查询历史和业务逻辑解释的使用情况,提供智能推荐功能。
http://www.dtcms.com/a/549636.html

相关文章:

  • 【CVPR 2025】即插即用GBC模块:小体积,大能量,重塑特征提取新范式
  • Linux系统编程 -- 进程概念(一)
  • React 入门 02:从单页面应用到多页面应用
  • 石家庄网站建设找哪家好河西网站建设优化seo
  • h5网站怎么做api对接赣州人才招聘网
  • 生产管理系统详解:物料清单bom 工序,工艺路线中的工序和工艺资源他们之间有什么关联和区别
  • 发布元服务配置应用分类、标签和资质信息(仅分发手表设备)
  • 成绩查询系统如何制作?
  • 中国建设银行信用卡官网站首页个人做商机网站如何盈利
  • springboot酒店客房管理系统设计与实现(代码+数据库+LW)
  • 交叉编译工具链深度解析 --静态库与动态库编译实战指南
  • uni-app 开发APP应用媒体处理与文件管理功能
  • 网站建设scyiyou百度竞价推广一个月多少钱
  • 基于整数MCU的FOC控制定标策略深度解析
  • [HDiffPatch] 差异算法 | `serialize_compressed_diff`
  • Pycatia二次开发基础代码解析:实例名称获取与几何显示控制技术解析
  • 小迪安全v2023学习笔记(一百四十天)—— Linux系统权限篇VulnhubPATH变量NFS服务Cron任务配合SUID
  • 做网站前端wordpress打字烟花
  • 新能源汽车动力系统拆装与检测实训MR软件介绍-比亚迪秦EV标准版
  • 力扣:214. 最短回文串(Python3)
  • 基于Jdk17+SpringBoot3AI智慧教育平台,告别低效学习,AI精准导学 + 新架构稳跑
  • 论坛网站太难做没人百度推广客户端app
  • Shell实用实例2
  • Go语言:解决 “package xxx is not in std”的思路
  • 给排水干管工程量-连续测量得心应手
  • 麦克斯韦方程扩展版本,用来解释不对称情况下的公式
  • 哈尔滨网站建设的公司哪家好广安发展建设集团门户网站
  • 批量转双层PDF(可识别各种语言) 中文绿色版
  • 北京网站关键词排名销售管理软件排名
  • TCP 扫描中的“有效响应”过滤器解析