SpringAI用嵌入模型操纵向量数据库!

打印 上一主题 下一主题

主题 1714|帖子 1714|积分 5142

嵌入模型(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-v3
  • SimpleVectorStore(内存级别存储和检索向量数据组件)
实现嵌入模型操纵内存级别向量数据库的案例。
1.添加项目依靠

我们利用阿里云百炼平台的嵌入模型 text-embedding-v3 是兼容 OpenAI 的 SDK 的,因此,我们只需要添加 OpenAI 依靠即可:
  1. <dependency>
  2.   <groupId>org.springframework.ai</groupId>
  3.   <artifactId>spring-ai-starter-model-openai</artifactId>
  4. </dependency>
复制代码
2.设置嵌入模型

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

项目设置文件设置向量模型:
  1. spring:
  2.   ai:
  3.     openai:
  4.       api-key: ${aliyun-ak}
  5.       embedding:
  6.         options:
  7.           model: text-embedding-v3
  8.       chat:
  9.         options:
  10.           model: deepseek-r1
复制代码
3.设置向量模型

将 EmbeddingModel 和 VectorStore 进行关联,如下代码所示:
  1. @Bean
  2. public VectorStore vectorStore(EmbeddingModel embeddingModel) {
  3. return SimpleVectorStore.builder(embeddingModel).build();
  4. }
复制代码
4.向量数据库添加数据

VectorStore 提供的常用方法如下:


  • add(List documents) :添加文档。
  • delete(List idList) :按 ID 删除文档。
  • delete(Filter.Expression filterExpression) :按过滤表达式删除文档。
  • similaritySearch(String query) 和 similaritySearch(SearchRequest request) :相似性搜索。
向数据库添加向量数据的方法如下:
  1. // 构建测试数据
  2. List<Document> documents =
  3. List.of(new Document("I like Spring Boot"),
  4.         new Document("I love Java"));
  5. // 添加到向量数据库
  6. vectorStore.add(documents);
复制代码
固然,向量数据的数据源可以是文件、图片、音频等资源,这里为了简单演示团体执行流程,利用了更简单直观的文本作为数据源。
5.查询数据

  1. @RestController
  2. @RequestMapping("/vector")
  3. public class VectorController {
  4.     @Resource
  5.     private VectorStore vectorStore;
  6.     @RequestMapping("/find")
  7.     public List find(@RequestParam String query) {
  8.         // 构建搜索请求,设置查询文本和返回的文档数量
  9.         SearchRequest request = SearchRequest.builder()
  10.         .query(query)
  11.         .topK(3)
  12.         .build();
  13.         List<Document> result = vectorStore.similaritySearch(request);
  14.         System.out.println(result);
  15.         return result;
  16.     }
  17. }
复制代码
执行结果如下:

从上述结果可以看出,和“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、计划模式、消息队列等模块。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

水军大提督

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表