掘金 人工智能 04月01日 16:37
SpringAI用嵌入模型操作向量数据库!
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文深入探讨了嵌入模型与向量数据库在 Spring AI 中的应用,它们是现代语义搜索、推荐系统和 RAG 技术的核心。文章通过一个使用 Spring AI、阿里云文本嵌入模型 text-embedding-v3 和 SimpleVectorStore 的案例,详细介绍了如何配置依赖、嵌入模型、向量模型,以及如何添加和查询向量数据。通过这个案例,读者可以了解如何在 Spring AI 中实现向量数据库的基本操作,为构建更复杂的 AI 应用打下基础。

💡 嵌入模型和向量数据库是 AI 技术栈中的关键组件,共同构成了语义搜索、推荐系统和 RAG 等应用的技术基础。

🛠️ 在 Spring AI 中,通过配置 OpenAI 依赖,可以方便地使用阿里云百炼平台的嵌入模型 text-embedding-v3。

⚙️ 通过将 EmbeddingModel 和 VectorStore 关联,可以实现向量数据的存储和检索,SimpleVectorStore 提供了添加、删除和相似性搜索等常用方法。

🔍 案例演示了如何使用 Spring AI 在内存级别向量数据库中添加文本数据,并进行相似性搜索,验证了其有效性。

💡 除了 SimpleVectorStore,还可以使用 Redis 或 ES 来存储向量数据,以实现更符合企业真实技术应用场景的 RAG 功能。

嵌入模型(Embedding Model)和向量数据库(Vector Database/Vector Store)是一对亲密无间的合作伙伴,也是 AI 技术栈中紧密关联的两大核心组件,两者的协同作用构成了现代语义搜索、推荐系统和 RAG(Retrieval Augmented Generation,检索增强生成)等应用的技术基础。

PS:准确来说 Vector Database 和 Vector Store 不完全相同,前者主要用于“向量”数据的存储,而 Vector Store 是用于存储和检索向量数据的组件。

在 Spring AI 中,嵌入模型 API 和 Spring AI Model API 和嵌入模型的关系如下:

系统整体交互流程如下:

接下来我们使用以下技术:

    Spring AI阿里云文本嵌入模型 text-embedding-v3SimpleVectorStore(内存级别存储和检索向量数据组件)

实现嵌入模型操作内存级别向量数据库的案例。

1.添加项目依赖

我们使用阿里云百炼平台的嵌入模型 text-embedding-v3 是兼容 OpenAI 的 SDK 的,因此,我们只需要添加 OpenAI 依赖即可:

<dependency>  <groupId>org.springframework.ai</groupId>  <artifactId>spring-ai-starter-model-openai</artifactId></dependency>

2.配置嵌入模型

阿里云百炼平台支持的向量模型:

项目配置文件配置向量模型:

spring:  ai:    openai:      api-key: ${aliyun-ak}      embedding:        options:          model: text-embedding-v3      chat:        options:          model: deepseek-r1

3.配置向量模型

将 EmbeddingModel 和 VectorStore 进行关联,如下代码所示:

@Beanpublic VectorStore vectorStore(EmbeddingModel embeddingModel) {return SimpleVectorStore.builder(embeddingModel).build();}

4.向量数据库添加数据

VectorStore 提供的常用方法如下:

    add(List documents) :添加文档。delete(List idList) :按 ID 删除文档。delete(Filter.Expression filterExpression) :按过滤表达式删除文档。similaritySearch(String query) 和 similaritySearch(SearchRequest request) :相似性搜索。

向数据库添加向量数据的方法如下:

List<Document> documents =List.of(new Document("I like Spring Boot"),        new Document("I love Java"));vectorStore.add(documents);

当然,向量数据的数据源可以是文件、图片、音频等资源,这里为了简单演示整体执行流程,使用了更简单直观的文本作为数据源。

5.查询数据

@RestController@RequestMapping("/vector")public class VectorController {    @Resource    private VectorStore vectorStore;    @RequestMapping("/find")    public List find(@RequestParam String query) {                SearchRequest request = SearchRequest.builder()        .query(query)        .topK(3)        .build();        List<Document> result = vectorStore.similaritySearch(request);        System.out.println(result);        return result;    }}

执行结果如下:

从上述结果可以看出,和“java”相似度最高的向量为“I love Java”,相似度评分为 0.77,如果我们 SearchRequest 对象中的 topK 设置为 1 的话,只会查询“I love Java”这条数据,如下图所示:

想要获取完整案例的同学加V:vipStone【备注:向量】

小结

嵌入模型和向量数据库是实现 RAG(检索增强生成)的技术基础,当然除了以上案例外,你可以使用 Redis 或 ES 来存储向量数据,并尝试加入 DeepSeek 实现 RAG 功能,这种形式更符合企业真实的技术应用。我是磊哥,如果觉得文章有帮助欢迎点赞、转发支持一下,我们下期再见。

本文已收录到我的面试小站 www.javacn.site,其中包含的内容有:场景题、并发编程、MySQL、Redis、Spring、Spring MVC、Spring Boot、Spring Cloud、MyBatis、JVM、设计模式、消息队列等模块。

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

Spring AI 嵌入模型 向量数据库 RAG 阿里云
相关文章