零基础学习Spring AI Java AI使用向量数据库Redis检索增强生成 RAG
要使用向量数据库的原因:数据通常是非结构化的,这就意味着它没有由定义良好的架构去描述。非结构化数据一般包括文本段落,图像,视频或音频。存储和查询非结构化数据的一种方法是使用向量嵌入。
什么是向量? 在机器学习和人工智能AI中,向量是表示数据的数字序列。它们是模型的输入和输出,以数字形式封装基础信息。矢量将非结构化数据(如文本,图像,视频或音频)转换为机器学习模型可以处理的格式。
增强传统搜索查询。传统的关键字或词汇搜索查询依赖于单词或短语的精确匹配,这可能会受到限制。相比之下,向量搜索或语义搜索利用了向量嵌入中捕获的丰富信息。通过将数据映射到向量空间中,相似的项目根据其含义彼此靠近放置。这种方法允许更准确和有意义的搜索结果,因为它考虑了查询的上下文和语义内容,而不仅仅是使用的确切的单词。
零基础学习Spring AI Java AI使用向量数据库postgresql 检索增强生成 RAG
零基础学习Spring AI Java AI SpringBoot AI调用大模型OpenAi Ollama集成大模型
### 向量检索
向量检索(Vector Search)的核心原理是通过将文本或数据表示为高维向量,并在查询时根据向量的相似度进行搜索。
-
检索的核心是将文本或数据转换成向量,在高维向量空间中查找与查询最相似的向量。
-
在存储数据时将指定的字段通过嵌入模型生成了向量。
-
在检索时,查询文本被向量化,然后与 Redis 中存储的向量进行相似度比较,找到相似度最高的向量(即相关的文档)。
Redis向量数据库
Redis 是一个开源(BSD 许可)的内存数据结构存储,用作数据库、缓存、消息代理和流式处理引擎。Redis 提供数据结构,例如字符串、哈希、列表、集合、带范围查询的有序集合、位图、超对数日志、地理空间索引和流。
Redis 搜索和查询 扩展了 Redis OSS 的核心功能,并允许您将 Redis 用作向量数据库
-
在哈希或 JSON 文档中存储向量和关联的元数据
-
检索向量
-
执行向量搜索
解读具体向量化过程
-
- 向量化数据
当你将 JSON 中的字段存入 Redis 时,向量化工具(例如 vectorStore)会将指定的字段转换为高维向量。每个字段的内容会通过某种嵌入模型(如 Word2Vec、BERT、OpenAI Embeddings 等)转换成向量表示。每个向量表示的是该字段内容的语义特征。
-
- 搜索时的向量生成
当执行 SearchRequest.query(message) 时,系统会将输入的 message 转换为一个查询向量。这一步是通过同样的嵌入模型,将查询文本转换为与存储在 Redis 中相同维度的向量。
-
- 相似度匹配
vectorStore.similaritySearch(request) 函数使用了一个向量相似度计算方法来查找最相似的向量。这通常是通过 余弦相似度 或 欧几里得距离 来度量查询向量和存储向量之间的距离。然后返回与查询最相似的前 K 个文档,即 withTopK(topK) 所指定的 K 个最相关的结果。
- 相似度匹配
-
- 返回匹配的文档
匹配的结果是根据相似度得分排序的 List。这些文档是你最初存储在 Redis 中的记录,包含了 JSON 中指定的字段。
- 返回匹配的文档
环境安装
需要安装Redis Stack
docker运行Redis Stack
官方地址:https://redis.io/docs/latest/operate/oss_and_stack/install/install-stack/docker/
-
redis/redis-stack包含 Redis Stack 服务器和 Redis Insight。此容器最适合本地开发,因为您可以使用嵌入式 Redis Insight 来可视化数据。
-
redis/redis-stack-server仅提供 Redis Stack 服务器。此容器最适合生产部署。
docker启动redis-stack
docker run -d --name redis-stack -p 6379:6379 -p 8001:8001 redis/redis-stack:latest
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
评论记录:
回复评论: