RAG 文本向量化:文本转向量、向量入库、相似度查询全过程

📅 2026/8/18 19:13:44
RAG 文本向量化:文本转向量、向量入库、相似度查询全过程
前言在 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 --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency!-- Spring AI Alibaba DashScope 核心 Starter --dependencygroupIdcom.alibaba.cloud.ai/groupIdartifactIdspring-ai-alibaba-starter-dashscope/artifactId/dependency!-- Redis 向量数据库依赖 --dependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-starter-vector-store-redis/artifactId/dependency注意确保 Spring AI 版本与 Alibaba 版本兼容建议通过 Spring Initializr 或官方 BOM 统一管理版本。二、application.properties 配置文件server.port8011# 设置响应的字符编码server.servlet.encoding.charsetutf-8server.servlet.encoding.enabledtrueserver.servlet.encoding.forcetruespring.application.nameSAA-11Embed2vector# SpringAIAlibaba DashScope配置# 填入你的阿里云通义api-key也可以使用环境变量占位符spring.ai.dashscope.api-key${aliQwen-api}# chat大模型spring.ai.dashscope.chat.options.modelqwen-plus# 向量化模型 text‑embedding‑v3spring.ai.dashscope.embedding.options.modeltext-embedding-v3# Redis Stack向量库配置spring.data.redis.hostlocalhostspring.data.redis.port6379spring.data.redis.usernamedefaultspring.data.redis.password# 程序启动自动创建向量索引schemaspring.ai.vectorstore.redis.initialize-schematrue# 自定义向量索引名称spring.ai.vectorstore.redis.index-namecustom-index# redis key前缀spring.ai.vectorstore.redis.prefixcustom-prefix⚠️注意必须安装 Redis Stack普通原版 Redis 没有向量检索模块启动直接报错。本地可以 docker 快速拉起 Redis‑Stack。三、核心代码实现3.1 注入 EmbeddingModel 与 VectorStoreSpring AI 提供了统一的抽象层我们只需要注入两个核心组件EmbeddingModel负责将文本转换为向量。VectorStore负责向量的持久化与相似度搜索。Resourceprivate EmbeddingModel embeddingModel;Resourceprivate 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(ListDocument) 方法可以直接将文本转为向量并存入 Redis。GetMapping(/embed2vector/add)public void add() {ListDocument 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 ListDocument getAll(RequestParam(msg) String msg) {SearchRequest searchRequest SearchRequest.builder().query(msg).topK(2).build();ListDocument results vectorStore.similaritySearch(searchRequest);System.out.println(results);return results;}请求示例GET http://localhost:8011/embed2vector/get?msgprogramming预期返回内容语义最接近的文档例如 “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?msgjava 验证检索结果。五、常见问题Q1启动报错 Redis command not allowed 或 unknown commandA1请确认 Redis 为 Redis Stack 版本或已加载 RediSearch 模块。Q2向量维度不匹配A2text-embedding-v3 模型输出的向量维度默认为 1024请确保索引维度与之匹配由 initialize-schema 自动创建索引时处理。Q3存入向量库时是否需要手动调用 EmbeddingA3不需要VectorStore.add(Document) 内部会自动调用 EmbeddingModel 完成转向量操作。六、总结本文通过一个简单实例演示了 Spring AI Alibaba Redis Stack 的完整工作流使用 DashScope text-embedding-v3 模型进行文本向量化借助 spring-ai-starter-vector-store-redis 实现向量的自动存储与相似度搜索全部代码基于 Spring Boot 标准开发模式依赖注入、配置简洁。这为构建 RAG 智能问答、语义搜索等上层应用打下了坚实的基础。你可以在此基础上引入大模型对话、Prompt 模板等功能快速搭建属于自己的 AI 应用。