前言
在 AI 应用开发中,文本向量化(Embedding) 和向量相似度搜索是实现 RAG(检索增强生成)、语义搜索等功能的核心技术。Spring AI Alibaba 提供了与阿里云 DashScope 模型的无缝集成,配合 Redis Stack 的向量存储能力,可以快速搭建一个从文本转向量再到相似度检索的完整流程。
本文将带你从零搭建一个 Spring Boot 项目,使用 spring-ai-alibaba-starter-dashscope 完成文本嵌入,并通过 spring-ai-starter-vector-store-redis 实现向量存储与相似度查询。
一、项目依赖
在 pom.xml 中引入以下依赖:
<!-- Spring Boot Web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Spring AI Alibaba DashScope 核心 Starter -->
<dependency>
<groupId>com.alibaba.cloud.ai</groupId>
<artifactId>spring-ai-alibaba-starter-dashscope</artifactId>
</dependency>
<!-- Redis 向量数据库依赖 -->
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-vector-store-redis</artifactId>
</dependency>
**注意:**确保 Spring AI 版本与 Alibaba 版本兼容,建议通过 Spring Initializr 或官方 BOM 统一管理版本。
二、application.properties 配置文件
server.port=8011
# 设置响应的字符编码
server.servlet.encoding.charset=utf-8
server.servlet.encoding.enabled=true
server.servlet.encoding.force=true
spring.application.name=SAA-11Embed2vector
# ====SpringAIAlibaba DashScope配置=============
# 填入你的阿里云通义api-key,也可以使用环境变量占位符
spring.ai.dashscope.api-key=${aliQwen-api}
# chat大模型
spring.ai.dashscope.chat.options.model=qwen-plus
# 向量化模型 text‑embedding‑v3
spring.ai.dashscope.embedding.options.model=text-embedding-v3
# =======Redis Stack向量库配置==========
spring.data.redis.host=localhost
spring.data.redis.port=6379
spring.data.redis.username=default
spring.data.redis.password=
# 程序启动自动创建向量索引schema
spring.ai.vectorstore.redis.initialize-schema=true
# 自定义向量索引名称
spring.ai.vectorstore.redis.index-name=custom-index
# redis key前缀
spring.ai.vectorstore.redis.prefix=custom-prefix
⚠️注意:必须安装 Redis Stack,普通原版 Redis 没有向量检索模块,启动直接报错。本地可以 docker 快速拉起 Redis‑Stack。
三、核心代码实现
3.1 注入 EmbeddingModel 与 VectorStore
Spring AI 提供了统一的抽象层,我们只需要注入两个核心组件:
-
EmbeddingModel:负责将文本转换为向量。
-
VectorStore:负责向量的持久化与相似度搜索。
@Resource
private EmbeddingModel embeddingModel;@Resource
private VectorStore vectorStore;
3.2 文本向量化接口
编写 /text2embed 接口,调用 EmbeddingModel 将输入文本转化为向量。
@GetMapping("/text2embed")
public EmbeddingResponse text2Embed(String msg) {
// 方式一:使用默认配置
// EmbeddingResponse response = embeddingModel.call(
// new EmbeddingRequest(List.of(msg), null));
// 方式二:明确指定模型
EmbeddingResponse response = embeddingModel.call(
new EmbeddingRequest(List.of(msg),
DashScopeEmbeddingOptions.builder()
.withModel("text-embedding-v3")
.build()));
System.out.println(Arrays.toString(response.getResult().getOutput()));
return response;
}
请求示例:
GET http://localhost:8011/text2embed?msg=射雕英雄传
返回的 EmbeddingResponse 中包含浮点数数组,即文本的向量表示。
3.3 将文本写入 Redis 向量库
通过 VectorStore.add(List<Document>) 方法,可以直接将文本转为向量并存入 Redis。
@GetMapping("/embed2vector/add")
public void add() {
List<Document> documents = List.of(
new Document("i study LLM"),
new Document("i love java")
);
vectorStore.add(documents);
}
内部流程:Spring AI 自动调用 EmbeddingModel 将 Document 的内容转为向量,再存入 Redis 的向量索引中。
3.4 相似度检索
根据查询文本,在向量库中检索语义最相近的 TopK 条记录。
@GetMapping("/embed2vector/get")
public List<Document> getAll(@RequestParam("msg") String msg) {
SearchRequest searchRequest = SearchRequest.builder()
.query(msg)
.topK(2)
.build();
List<Document> results = vectorStore.similaritySearch(searchRequest);
System.out.println(results);
return results;
}
请求示例:
GET http://localhost:8011/embed2vector/get?msg=programming
预期返回内容语义最接近的文档,例如 "i love java"。
四、运行与测试
-
启动 Redis Stack (确保已安装 RediSearch 模块):
docker run -d --name redis-stack -p 6379:6379 redis/redis-stack:latest -
设置阿里云 DashScope API Key:在启动参数或环境变量中配置 aliQwen-api。
-
启动 Spring Boot 应用。
-
测试步骤 :
调用 /text2embed 查看文本转向量结果。
调用 /embed2vector/add 写入测试数据。
调用 /embed2vector/get?msg=java 验证检索结果。
五、常见问题
Q1:启动报错 Redis command not allowed 或 unknown command
A1:请确认 Redis 为 Redis Stack 版本,或已加载 RediSearch 模块。
Q2:向量维度不匹配
A2:text-embedding-v3 模型输出的向量维度默认为 1024,请确保索引维度与之匹配(由 initialize-schema 自动创建索引时处理)。
Q3:存入向量库时是否需要手动调用 Embedding?
A3:不需要,VectorStore.add(Document) 内部会自动调用 EmbeddingModel 完成转向量操作。
六、总结
本文通过一个简单实例演示了 Spring AI Alibaba + Redis Stack 的完整工作流:
- 使用 DashScope text-embedding-v3 模型进行文本向量化;
- 借助 spring-ai-starter-vector-store-redis 实现向量的自动存储与相似度搜索;
- 全部代码基于 Spring Boot 标准开发模式,依赖注入、配置简洁。
这为构建 RAG 智能问答、语义搜索等上层应用打下了坚实的基础。你可以在此基础上引入大模型对话、Prompt 模板等功能,快速搭建属于自己的 AI 应用。