开启左侧

Spring AI之向量数据库

[复制链接]
zoopk0079 发表于 昨天 21:30 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
作者:NtK11KGXVkk
这里写自定义目录标题


      API 概述
        数据插入与向量嵌入相似性搜索参数
      模式初始化批处理策略
        核心接口定义
          默认实现:TokenCountBatchingStrategy内部机制与扩展性
        自定义批处理策略
      VectorStore 实现示例用法
        数据加载到向量存储相似性搜索与上下文注入关键技术点
      元数据过滤器
        过滤字符串(Filter String)Filter.Expression 构建器
      从向量存储中删除文档
        按文档ID删除按过滤表达式删除按字符串过滤表达式删除删除操作的错误处理文档版本控制场景性能优化建议




向量数据库是一种在人工智能应用中发挥关键作用的专用数据库类型。
在向量数据库中,查询方式与传统关系型数据库存在显著差异。它们并非进行精确匹配,而是执行相似性搜索。当以向量作为查询输入时,向量数据库会返回与查询向量"相似"的向量集合。关于这种相似性在高层级的计算方式,详见《向量相似性》章节的说明。  向量数据库用于将数据与人工智能模型进行整合。其使用流程的第一步是将数据加载到向量数据库中。当需要向AI模型发送用户查询时,系统会首先检索一组相似文档。这些文档将作为用户问题的上下文信息,与用户查询一起被发送至AI模型。这种技术被称为检索增强生成(Retrieval Augmented Generation, RAG)。
后续章节将介绍Spring AI框架中用于操作多种向量数据库实现的接口规范,以及相关高级用法示例。
最后一节旨在解析向量数据库中相似性搜索技术的底层实现原理。
API 概述

本节作为 Spring AI 框架中 VectorStore 接口 及其关联类的指南。
Spring AI 通过 VectorStore 接口 提供了与向量数据库交互的抽象化 API。
以下是 VectorStore 接口 的定义:
  1. publicinterfaceVectorStoreextendsDocumentWriter{
  2.    
  3.    defaultStringgetName(){
  4.    
  5.    returnthis.getClass().getSimpleName();}voidadd(List<Document> documents);voiddelete(List<String> idList);voiddelete(Filter.Expression filterExpression);defaultvoiddelete(String filterExpression){
  6.    
  7.    ...};List<Document>similaritySearch(String query);List<Document>similaritySearch(SearchRequest request);default<T>Optional<T>getNativeClient(){
  8.    
  9.    returnOptional.empty();}}
复制代码
以及相关的 SearchRequest 构建器 :
  1. publicclassSearchRequest{
  2.    
  3.    publicstaticfinaldouble SIMILARITY_THRESHOLD_ACCEPT_ALL =0.0;publicstaticfinalint DEFAULT_TOP_K =4;privateString query ="";privateint topK = DEFAULT_TOP_K;privatedouble similarityThreshold = SIMILARITY_THRESHOLD_ACCEPT_ALL;@NullableprivateFilter.Expression filterExpression;publicstaticBuilderfrom(SearchRequest originalSearchRequest){
  4.    
  5.    returnbuilder().query(originalSearchRequest.getQuery()).topK(originalSearchRequest.getTopK()).similarityThreshold(originalSearchRequest.getSimilarityThreshold()).filterExpression(originalSearchRequest.getFilterExpression());}publicstaticclassBuilder{
  6.    
  7.    privatefinalSearchRequest searchRequest =newSearchRequest();publicBuilderquery(String query){
  8.    
  9.    Assert.notNull(query,"查询内容不能为空。");this.searchRequest.query = query;returnthis;}publicBuildertopK(int topK){
  10.    
  11.    Assert
复制代码
原文地址:https://blog.csdn.net/alyenc/article/details/146946586
回复

使用道具 举报

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

本版积分规则

发布主题
阅读排行更多+

Powered by Discuz! X3.4© 2001-2013 Discuz Team.( 京ICP备17022993号-3 )