向量化详解
向量化一、 什么是向量化1. 基本概念2. 核心原理语义相似性二、 Spring AI Alibaba 向量化核心组件1. EmbeddingClient嵌入客户端2. VectorStore向量存储库三、 向量化全流程实战详解1. 索引阶段文档加载与向量化存储2. 检索阶段语义搜索与 RAG 增强四、 关键配置与最佳实践1. 选择合适的 Embedding 模型2. 文本分块策略 (Text Splitting)3. 元数据过滤 (Metadata Filtering)4. 向量数据库选型在 Spring AI Alibaba 中向量化Vectorization 是构建检索增强生成RAG应用的核心基础。它通过嵌入模型Embedding Model将非结构化的文本数据转换为计算机可理解、可计算的数值向量从而实现语义层面的相似度搜索。一、 什么是向量化1. 基本概念向量是一串有序的数字数组例如[0.23, -0.56, 0.81, ...]。在大模型语境下向量化是指利用 Embedding 模型 将文本如单词、句子、段落映射到高维向量空间中的过程。维度常见的向量维度有 768、1024、1536 等取决于所使用的 Embedding 模型。语义表示向量中的每一个数字代表文本的一个“隐藏特征”。这些特征并非人工定义而是模型在训练过程中自动学习到的语义信息如相关性、类别、情感倾向等。2. 核心原理语义相似性向量化的核心价值在于语义距离。在向量空间中语义相近的文本其对应的向量在空间上的距离通常使用余弦相似度 Cosine Similarity 衡量也更近。示例“猫”和“小狗”的向量距离会比“猫”和“汽车”的向量距离更近。应用这使得系统能够根据用户问题的语义而非仅仅依靠关键词匹配从海量文档中检索出最相关的内容。二、 Spring AI Alibaba 向量化核心组件Spring AI Alibaba 提供了标准化的接口来屏蔽不同向量数据库和嵌入模型的差异主要涉及以下三个核心组件1. EmbeddingClient嵌入客户端负责调用嵌入模型将文本转换为向量。功能接收字符串列表返回Embedding对象列表。默认实现Spring AI Alibaba 默认集成阿里云 DashScope通义千问系列的 Embedding 模型如text-embedding-v1或text-embedding-v2。配置示例spring:ai:dashscope:api-key:${AI_DASHSCOPE_API_KEY}embedding:options:model:text-embedding-v2 指定嵌入模型2. VectorStore向量存储库负责存储向量及其关联的元数据并提供相似度搜索能力。功能add(): 将文档及其向量存入数据库。similaritySearch(): 根据查询向量检索最相似的文档。delete(): 删除指定 ID 的文档。支持后端Spring AI Alibaba 支持多种向量数据库包括阿里云 OpenSearch、PostgreSQL (pgvector)、Redis、Milvus 等。Document文档对象Spring AI 中承载数据的基本单元。结构content: 原始文本内容。metadata: 元数据 Map如来源、页码、作者等可用于过滤检索结果。id: 唯一标识符。三、 向量化全流程实战详解一个完整的向量化应用通常包含两个阶段索引阶段Indexing 和 检索阶段Retrieval。1. 索引阶段文档加载与向量化存储此阶段的目标是将原始文档转化为向量并存入向量数据库。步骤分解文档加载与分割使用DocumentReader读取文件并通过TextSplitter将长文档切分为较小的文本块Chunk以确保上下文窗口不超限且检索更精准。生成向量调用EmbeddingClient对每个文本块进行向量化。持久化存储将文本块、生成的向量以及元数据一起存入VectorStore。代码示例ServicepublicclassRagIndexingService{privatefinalVectorStorevectorStore;privatefinalEmbeddingClientembeddingClient;publicRagIndexingService(VectorStorevectorStore,EmbeddingClientembeddingClient){this.vectorStorevectorStore;this.embeddingClientembeddingClient;}publicvoidindexDocuments(ListStringtexts){ListDocumentdocumentsnewArrayList();for(Stringtext:texts){// 1. 构建 Document 对象DocumentdocnewDocument(text);// 可选添加元数据如来源doc.getMetadata().put(source,manual_input);documents.add(doc);}// 2. Spring AI 会自动处理向量化过程// 当调用 vectorStore.add 时内部会自动调用 embeddingClient 将文本转为向量// 注意具体行为取决于 VectorStore 的实现配置部分实现需手动先 embed 再 addvectorStore.add(documents);}}注在某些配置下VectorStore会自动拦截add操作并调用默认的EmbeddingClient进行向量化若需手动控制可先调用embeddingClient.embed(text)获取向量再构建包含向量的 Document 存入。2. 检索阶段语义搜索与 RAG 增强此阶段的目标是根据用户问题从向量库中找出最相关的知识片段。步骤分解问题向量化将用户的自然语言问题通过同样的EmbeddingClient转换为向量。相似度搜索在VectorStore中查找与问题向量距离最近的 Top-K 个文档。构建上下文将检索到的文档内容拼接成字符串作为上下文注入到 Prompt 中。生成回答将包含上下文的 Prompt 发送给 ChatModel 生成最终答案。代码示例ServicepublicclassRagQueryService{privatefinalVectorStorevectorStore;privatefinalChatClientchatClient;publicRagQueryService(VectorStorevectorStore,ChatClient.BuilderchatClientBuilder){this.vectorStorevectorStore;this.chatClientchatClientBuilder.build();}publicStringanswerQuestion(Stringquestion){// 1. 执行相似度搜索// SearchRequest 允许设置 topK返回数量、相似度阈值等ListDocumentrelevantDocsvectorStore.similaritySearch(SearchRequest.query(question).withTopK(3));// 2. 提取相关文本内容StringcontextrelevantDocs.stream().map(Document::getContent).collect(Collectors.joining(\n));// 3. 构建增强后的 PromptStringpromptTemplate 请根据以下参考信息回答问题 参考信息 {context} 问题 {question} 如果参考信息中不包含答案请说明无法回答。 ;// 4. 调用大模型生成回答returnchatClient.prompt().user(userSpec-userSpec.text(promptTemplate).param(context,context).param(question,question)).call().content();}}四、 关键配置与最佳实践1. 选择合适的 Embedding 模型通义千问 Embedding 模型Spring AI Alibaba 默认支持阿里云 DashScope 的text-embedding-v1和text-embedding-v2。v2 版本在中文语义理解上表现更优推荐优先使用。一致性原则索引阶段和检索阶段必须使用同一个 Embedding 模型否则向量空间不一致导致检索失效。2. 文本分块策略 (Text Splitting)块大小Chunk Size建议设置为 500-1000 字符。过小会丢失上下文过大会引入噪声且增加 Token 消耗。重叠区Overlap设置 10%-20% 的重叠区防止关键信息被切断在两个块的边界处。3. 元数据过滤 (Metadata Filtering)在SearchRequest中可以添加过滤器仅检索特定来源或特定时间范围内的文档提高检索精度。SearchRequestrequestSearchRequest.query(question).withTopK(3).withFilterExpression(source internal_doc);// 仅搜索内部文档4. 向量数据库选型开发/测试可使用内置的SimpleVectorStore基于内存无需额外部署。生产环境推荐使用阿里云 OpenSearch、PostgreSQL (pgvector) 或 Milvus。Spring AI Alibaba 对阿里云 OpenSearch 有深度集成支持高性能大规模向量检索。