你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

什么是 Azure Cache for Redis 中的矢量嵌入项和矢量搜索

矢量相似性搜索 (VSS) 已成为 AI 驱动的智能应用程序的常用技术。 可以使用 Azure Cache for Redis 作为矢量数据库,方法是将它与 Azure OpenAI 等模型组合在一起,以用于增强了检索功能的生成式 AI 和分析场景。 本文简要介绍了矢量嵌入项、矢量相似性搜索的概念,以及如何使用 Redis 作为矢量数据库来为智能应用程序提供支持。

有关如何使用 Azure Cache for Redis 和 Azure OpenAI 执行矢量相似性搜索的教程和示例应用程序,请参阅以下内容:

可用范围

Redis 中的矢量搜索功能需要 Redis Stack,特别是 RediSearch 模块。 此功能仅在 Azure Cache for Redis 的 Enterprise 层中可用。

此表包含不同层级中的矢量搜索可用性的信息。

基本/标准 高级 Enterprise Enterprise Flash
可用 No 是(预览版)

什么是矢量嵌入?

概念

矢量嵌入是机器学习和自然语言处理中的一个基本概念,可用于将数据(如字词、文档或图像)表示为高维矢量空间中的数值向量。 矢量嵌入背后的主要理念是通过将数据映射到此矢量空间中的点来捕获数据的基础关系和语义。 这意味着将文本或图像转换为表示数据的数字序列,然后比较不同的数字序列。 这允许以数学方式操作和分析复杂数据,从而更轻松地执行相似性比较、建议和分类等任务。

每个机器学习模型对数据进行分类,并以不同的方式生成矢量。 此外,通常无法准确确定每个矢量维度所表示的语义。 但是,由于模型在每个输入数据块之间是一致的,因此类似的字词、文档或图像具有同样相似的矢量。 例如,单词 basketballbaseball 已嵌入的矢量彼此更接近于类似 rainforest 的单词。

矢量比较

可以使用各种指标比较矢量。 比较矢量的最常用方法是使用余弦相似性,它测量多维空间中两个矢量之间角度的余弦值。 矢量越接近,角度越小。 其他常见的距离指标包括欧几里得距离内部乘积

生成嵌入

许多机器学习模型支持嵌入 API。 有关如何使用 Azure OpenAI 服务创建矢量嵌入的示例,请参阅了解如何使用 Azure OpenAI 生成嵌入

什么是矢量数据库?

矢量数据库是可以存储、管理、检索和比较矢量的数据库。 矢量数据库必须能够有效地存储高维矢量,并检索高维矢量,且延迟最低,吞吐量高。 非关系数据存储最常用作矢量数据库,但可以使用 PostgreSQL 等关系数据库(例如,通过 pgvector 扩展)。

索引编制和搜索方法

矢量数据库需要为数据编制索引,以便快速搜索和检索。 此外,矢量数据库还应支持内置的搜索查询,以便简化编程体验。

有多种索引编制方法,例如:

  • FLAT - Brute-force 索引
  • HNSW - 使用分层可导航小世界图进行的高效可靠的近似最近邻域搜索

有几种常见的搜索方法,包括:

  • K-最近的邻域 (KNN) - 一种提供最精确但计算成本较高的详尽方法。
  • 接近最近的邻域 (ANN) - 通过交易精度提高效率,速度更高,处理开销更低。

搜索功能

最后,矢量数据库通过使用所选矢量比较方法执行矢量搜索,以返回最相似的矢量。 某些矢量数据库还可以执行混合搜索,方法是先根据数据库中还存储的特征或元数据缩小结果范围,然后再执行矢量搜索。 这是一种使矢量搜索更加有效且可自定义的方法。 例如,矢量搜索可以仅限于数据库中具有特定标记的向量,或特定区域中具有地理位置数据的矢量。

矢量搜索关键字方案

矢量相似性搜索可以在多个应用程序中使用。 一些常见用例包括:

  • 语义 Q&A。 创建可以回答有关你自己数据问题的聊天机器人。 例如,可以回答员工关于其医疗保健范围的问题的聊天机器人。 成百上千页的密集医疗保健覆盖文档可以拆分为区块,转换为嵌入矢量,并根据矢量相似性进行搜索。 然后,可以使用另一个大型语言模型 (LLM) 为员工汇总生成的文档。 语义 Q&A 示例
  • 文档检索。 使用 LLM 提供的文本更深入的语义理解,在传统基于关键字的搜索不足的情况下,提供更丰富的文档搜索体验。 文档检索示例
  • 产品建议。 查找根据过去的用户活动(例如搜索历史记录或以前的购买)推荐的类似产品或服务。 产品建议示例
  • 视觉搜索。 搜索类似于用户拍摄的图片或其他产品图片的产品。 视觉搜索示例
  • 语义缓存。 通过缓存 LLM 完成,降低 LLM 的成本和延迟。 LLM 查询使用矢量相似性进行比较。 如果新查询与以前缓存的查询足够相似,则返回缓存的查询。 使用 LangChain 的语义缓存示例
  • LLM 对话内存。 将 LLM 作为嵌入内容保存在矢量数据库中的对话历史记录。 应用程序可以使用矢量搜索将相关历史记录或“记忆”拉取到 LLM 的响应中。 LLM 对话内存示例

为什么选择 Azure Cache for Redis 来存储和搜索矢量?

Azure Cache for Redis 可以有效地用作矢量数据库来存储嵌入矢量和执行矢量相似性搜索。 许多主要机器学习框架中都提供了对矢量存储和搜索的支持,例如:

这些框架提供了与 Redis 的丰富集成。 例如,使用 Redis 作为矢量存储时,Redis LangChain 集成会为传入的元数据自动生成索引架构。 这会大大简化基于元数据筛选结果。

Redis 通过 RediSearch 模块提供广泛的搜索功能,在 Azure Cache for Redis 的 Enterprise 层中可用。 这些设置包括:

  • 多个距离指标,包括 EuclideanCosineInternal Product
  • 支持 KNN(使用 FLAT)以及 ANN (使用 HNSW)索引编制方法。
  • 哈希或 JSON 数据结构中的矢量存储
  • 前 K 查询
  • 矢量范围查询(即查找特定矢量距离内的所有项)
  • 具有强大查询功能的混合搜索,例如:
    • 地理空间筛选
    • 数字和文本筛选
    • 前缀和模糊匹配
    • 拼音匹配
    • 布尔查询

此外,Redis 通常是一个经济的选择,因为它常用于缓存或会话存储应用程序。 在这些方案中,它可以通过在处理矢量搜索应用程序的同时提供典型的缓存角色来实现双重任务。

用于存储和搜索矢量的其他选项有哪些?

Azure 上还有其他多个用于矢量存储和搜索的解决方案。 其他解决方案包括:

开始使用嵌入和矢量搜索的最佳方式是自行尝试!