向量相似性搜索(VSS)是人工智能驱动的智能应用中的一项常见功能。 将托管 Redis 与嵌入模型(如 Azure OpenAI)结合使用时,可以使用 Azure Managed Redis 作为低延迟矢量数据库,用于 Retrieval-Augmented 生成(RAG)、语义缓存、建议、搜索和其他 AI 方案。
本文介绍了向量嵌入、向量相似性搜索,以及如何通过 RediSearch 模块让 Azure Managed Redis 存储和搜索向量。
可用范围
Redis 中的矢量搜索功能需要 Redis Stack,特别是 RediSearch 模块。 在 Azure 托管 Redis 中,RediSearch 作为一个托管模块提供,创建缓存时必须启用。
下表显示了 Azure 托管 Redis 层级的 RediSearch 可用性。
| Azure Managed Redis 层级 | RediSearch 支持 |
|---|---|
| 内存优化 | 是的 |
| Balanced | 是的 |
| 计算优化 | 是的 |
| 闪存优化 | 否 |
Important
创建后你不能再向 Azure 托管的 Redis 实例添加模块。 如果你打算使用矢量搜索,在配置时启用RediSearch模块。
规划用于向量搜索的 Azure 托管 Redis 实例
在创建Azure托管的Redis实例进行矢量搜索之前,先规划缓存配置和数据模型。 在配置过程中,您必须选择一些选项,包括模块和集群策略。
对于向量搜索工作负载:
- 创建 Azure 托管 Redis 实例时启用 RediSearch 模块。
- 使用 企业 集群策略。 RediSearch 需要企业集群策略。
- 启用 RediSearch 时,使用
NoEviction淘汰策略。 - 选择支持的内存层级: 内存优化、 平衡或 计算优化。
- 根据向量数据和索引开销来调整缓存大小。
- 通过向量存储元数据,如文档ID、标题、源URL、类别、时间戳、租户ID或访问控制字段,以便查询能过滤结果并返回源信息。
- 客户端连接使用TLS,并在客户端支持时考虑使用Microsoft Entra认证。
- 对于生产工作负载,可以考虑专用链接、高可用性和诊断。
Azure Managed Redis负责管理该服务可用的模块版本。 你不能手动加载模块或手动更新模块版本。
欲了解更多信息,请参见《Use Redis modules with Azure Managed Redis》、《Azure Managed Redis 架构》和《快速入门:创建 Azure Managed Redis 实例》。
什么是矢量嵌入?
向量嵌入是高维向量空间中对数据(如文字、文档、图片或产品)的数值表示。 嵌入以一种方式捕捉语义关系,使应用程序能够以数学方式比较数据。
例如,词语 basketball 和 baseball 的嵌入通常彼此更接近,而不是分别更接近 rainforest,因为模型会将语义相关的概念放置在向量空间中彼此相近的位置。
不同的机器学习模型生成嵌入的方式不同。 为了获得最佳效果,应对给定的向量索引一致使用一个嵌入模型。 索引模式、向量尺寸和距离度量应与生成向量所用的嵌入模型相匹配。
矢量比较
你可以用距离或相似度指标比较向量。 常见指标包括:
- 余弦相似度,用于比较向量间的夹角。
- 欧几里得距离,用于测量向量空间中的直线距离。
- 内积,这是某些嵌入和排序场景中常用的方法。
正确的度量取决于嵌入模型以及向量的归一化方式。 对于许多文本嵌入场景,余弦相似度是常见的选择。
生成嵌入
许多机器学习模型支持嵌入 API。
什么是矢量数据库?
向量数据库用于存储、索引、检索和比较高维向量。 向量数据库设计用于返回低延迟和高吞吐量的类似向量。
你可以将 Azure 托管的 Redis 作为矢量数据库使用,方法是将嵌入存储在 Redis 数据结构中,并通过 RediSearch 进行索引。
矢量存储与元数据
在Redis里,你可以把向量存储在哈希或JSON文档里。 每个向量都存储有用的元数据,如文档ID、标题、源URL、类别、时间戳、租户ID或访问控制字段。
元数据使向量搜索更有用,因为应用程序可以在向量搜索前或过程中过滤结果。 对于RAG应用,元数据也可以随搜索结果返回,以支持引用和来源基础。
索引和搜索方法
矢量数据库使用索引以提高搜索效率。 RediSearch 支持常见的向量索引方法,包括:
- FLAT - 精确的穷举索引。 FLAT 对于需要详尽搜索的小型数据集或工作负载非常有用。
- HNSW ——基于层级可导航小世界图的近似最近邻指数。 HNSW 常用于更大规模的数据集,低延迟比穷举精度更为重要。
常见的检索方法包括:
-
K-最近邻(KNN) - 返回最相似的前
K个向量。 - 近似最近邻(ANN) ——以较低的延迟和更低的计算成本交换部分精度。
搜索功能
向量数据库通过比较查询向量与索引向量并返回最相似的结果来执行搜索。 许多应用还使用混合搜索,其中元数据过滤器在向量比较前或进行中缩小候选集范围。
例如,产品推荐查询可能只搜索特定类别的产品,或者RAG应用程序可能只搜索当前用户被允许访问的文档。
矢量搜索关键场景
向量相似性搜索可用于多种应用模式,包括:
- 语义问答。 构建一个聊天机器人,通过你的数据回答问题。 文档可以分块、嵌入、存储在Azure管理的Redis中,并通过向量相似度检索,然后再由大型语言模型进行摘要。
- 文件检索。 当关键词搜索不足时,使用嵌入来提供语义文档搜索。
- 产品推荐。 根据浏览活动、购买历史或产品描述寻找相似的产品或服务。
- 视觉搜索。 搜索与提交图片在视觉上相似的产品或图片。
- 语义缓存。 通过缓存完成任务并在新提示语义上与之前提示相似时重用缓存响应,降低LLM成本和延迟。
- LLM 会话记忆。 存储短期记忆,如近期对话转折,以及长期记忆,如持久摘要、用户偏好或事实,作为嵌入存储,应用程序可检索以供未来回答使用。
为什么选择Azure托管Redis来存储和搜索向量?
Azure Managed Redis 适用于需要低延迟访问、靠近应用数据、缓存数据、会话状态或会话内存的向量搜索工作负载。 由于 Redis 常用于高性能应用模式,Azure 托管 Redis 可以支持向量搜索,同时还能满足缓存、速率限制、会话存储、语义缓存和代理内存等相关用例。
许多人工智能和应用框架都包含Redis集成,包括:
Azure Managed Redis 使用 RediSearch 模块支持向量搜索功能,例如:
- 常见的距离度量,包括
L2、、COSINE和IP。 - 使用
FLAT和HNSW向量索引进行 KNN 搜索。 - 哈希或JSON数据结构中的向量存储。
- 顶级K查询。
- 向量范围查询。
- 混合搜索,具备以下查询功能:
- 地理空间过滤。
- 数字和文本筛选。
- 前缀和模糊匹配。
- 语音匹配。
- 布尔查询。
我还有哪些其他方法可以存储和搜索向量?
Azure 提供多种向量存储和搜索服务。 最好的选择取决于你的工作量。
| Service | 考虑以下情况时 |
|---|---|
| Azure 托管的 Redis | 你需要低延迟的向量搜索,靠近应用缓存、会话状态、语义缓存或大型语言模型内存模式。 |
| Azure AI 搜索 | 你需要一个以搜索为先的服务,用于文档索引、混合搜索、相关性调整和企业检索场景。 |
| Azure Cosmos DB | 你希望将向量搜索与业务型 NoSQL 数据结合使用。 |
| Azure Database for PostgreSQL - 灵活服务器 | 你需要在PostgreSQL pgvector 中结合关系数据进行矢量搜索。 |
相关内容
入门嵌入和矢量搜索的最佳方法是自己尝试。