Spring AI Embedding 实战:从语义搜索到商品推荐系统
关键词:Spring AI / Embedding / 向量数据库 / PGVector / 推荐系统 / RAG
一、什么是 Spring AI Embedding
Spring AI 中的 Embedding 技术核心在于将文本、图像等非结构化数据转化为高维向量(即 Embedding)。这些向量能够捕捉数据深层的语义信息。通过计算向量间的相似度,系统就能判断出两段文本在意义上的远近,从而实现语义搜索、智能推荐等高级功能。
Spring AI 通过一套抽象的 EmbeddingModel API,让你能够无缝对接各种底层模型(如 OpenAI、Ollama、Cohere 等),而无需大幅改动业务代码。
二、技术原理:从文本到向量
- 向量化:一个嵌入模型将输入的文本转换成一个由浮点数构成的定长数组(如 768 / 1536 维)。
- 语义捕获:模型在训练中学习让语义相近的内容在向量空间中距离更近。
- Spring AI 抽象层:通过
EmbeddingRequest/EmbeddingResponse解耦业务与模型实现。
三、相似度算法
| 算法 | 说明 | 适用场景 |
|---|---|---|
| 余弦相似度 | 关注方向 | 主流推荐/搜索 |
| 欧氏距离 | 空间距离 | 需归一化 |
| 点积 | 计算快 | 常结合归一化 |
Spring AI 中这些计算通常由 VectorStore 内部完成。
以下是为电商场景设计的端到端实现方案。
四、 🎯 推荐系统架构设计:召回与排序
与客服知识库的检索架构不同,商品推荐通常采用经典的 “召回 -> 排序” 两级漏斗。Spring AI Embedding 主要用于召回层,负责从百万级商品库中快速筛选出数百个相关候选。
🛠️ 核心实现步骤
我们以实现“基于用户向量”和“基于商品向量”的两种核心召回策略为例。
第一步:环境与数据建模
依赖配置 (
pom.xml):<dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-openai-spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-pgvector-store-spring-boot-starter</artifactId> </dependency> <!-- 可选,用于缓存用户向量提升性能 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>领域模型:定义关键实体。
@Entity @Data public class Product { @Id private Long id; private String title; private String description; private String category; private BigDecimal price; // 商品特征向量 (可存储为 float[] 或独立向量表)