你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
选择 Azure 矢量搜索服务
矢量搜索是一种查找以矢量形式存储在数据库中的信息的方法。 矢量是一组数字,表示媒体的功能或特征,如文本或图像。 与传统的基于关键字的搜索方法相比,矢量是一项重大进步。 它们通过理解信息中的语义关系,提供更快、更准确的结果。
Azure 提供了多种存储和搜索矢量化数据的方法。 本文帮助架构师和开发人员了解并为其应用程序选择合适的 Azure 矢量搜索服务。
本文根据矢量搜索功能对以下服务进行了比较:
- Azure AI 搜索
- Azure Cosmos DB for NoSQL
- Azure Cosmos DB for MongoDB (vCore)
- Azure Cosmos DB for PostgreSQL
- Azure Database for PostgreSQL
- Azure SQL 数据库
架构师和开发人员应在选择候选服务和功能矩阵中从系统需求的角度比较可用服务。
选择候选服务
本部分可帮助你根据需要选择最可能的服务。 要缩小选择范围,首先要考虑系统需求。
关键要求
在决定是使用传统数据库解决方案还是 Azure AI 搜索服务时,请考虑需求,以及是否可以对数据执行即时或实时矢量搜索。 如果经常更改矢量化字段中的值,并且需要实时或准实时地搜索更改,那么传统的关系数据库或 NoSQL 数据库最适合你的方案。 同样,使用现有数据库可能是满足性能目标的最佳解决方案。 另一方面,如果工作负荷不需要实时或准实时的矢量搜索能力,并且你接受管理矢量索引,那么 AI 搜索可能是一个令人信服的选择。
如果选择传统的数据库解决方案,则决定使用的特定数据库服务类型主要取决于团队的技能集和当前操作的数据库。 如果已经使用了特定类型的数据库(例如,MongoDB),那么使用相同类型的数据库可能是方案中最简单的解决方案。 如功能矩阵部分所示,每个数据库服务都有一些独特的功能和矢量搜索限制。 检查这些信息,以确保首选数据库类型支持所需的功能。
如果成本问题是一个驱动因素,则维护现有设计可能最适合你的方案,因为引入新服务或其他数据库服务实例可能会增加新的净成本和复杂性。 使用当前数据库进行矢量搜索可能会比使用专用服务对成本产生更小的影响。
如果选择使用传统数据库而不是 AI 搜索,则默认情况下不可用一些高级搜索功能。 例如,如果想进行重新排序或混合搜索,请通过 Transact-SQL (T-SQL) 或其他编码启用该功能。
功能矩阵
本部分中的表格汇总了功能上的关键差异。
基本功能
不同服务对矢量数据类型、近似最近的邻域 (ANN) 矢量索引、矢量维度限制、多个矢量字段和多个矢量索引的本地支持有时会不尽相同。 工作负荷需求可能需要其中一些特定功能。 了解每个 Azure 服务的基本矢量功能,如下表所示。
功能 | Azure Cosmos DB for PostgreSQL | Azure Cosmos DB for NoSQL | Azure Cosmos DB for MongoDB (vCore) | Azure Database for PostgreSQL(灵活) | Azure AI 搜索 | Azure SQL 数据库 |
---|---|---|---|---|---|---|
内置矢量搜索 | 是 1 | 是 | 是 2 | 是 1 | 是 3 | 是 4 |
矢量数据类型 | 是 | 是 | 是 | 是 | 是 | 否 |
尺寸限制 6 | 16,000 7 或 2000 | 505 8 或 4096 | 2,000 | 16,000 7 或 2000 | 3,072 | 1998(预览版)5 |
多个矢量字段 | 是 | 是 | No | 是 | 是 | 是 |
多个矢量索引 | 是 | 是 | No | 是 | 是 | 是 |
- “pgvector”支持矢量搜索,这是 PostgreSQL 的扩展。
- 在 Azure Cosmos DB for MongoDB vCore 中对嵌入使用矢量搜索
- Azure AI 搜索中的矢量
- Azure SQL 数据库早期采用者预览版提供原生矢量搜索
- 矢量可以存储在 VARBINARY (8000) 列或变量中。
- OpenAI 的嵌入模型,1536 用于 text-embedding-ada-002 和 text-embedding-3-small,3072 用于 text-embedding-3-large。 对于 Azure AI 视觉多模式嵌入模型,图像和文本均为 1024。
- 矢量最多可以有 16,000 个维度。 但是,使用“IVFFlat”和“HNSW”的索引支持最多 2,000 个维度的矢量。
- 使用平面索引类型索引的矢量最多可以是 505 个维度。 使用 quantizedFlat 或 DiskANN 索引类型索引的矢量最多可以有 4,096 个维度。
搜索方法
工作负荷通常需要将矢量搜索与全文搜索相结合,甚至混合搜索(全文搜索或语义搜索 + 矢量搜索)。 混合搜索和重新排序的结合实现了工作负荷的高精度。 可以使用自己的代码手动实现混合搜索和重新排序,也可以考虑矢量存储如何支持这种工作负荷要求。
搜索方法 | Azure Cosmos DB for PostgreSQL | Azure Cosmos DB for NoSQL | Azure Cosmos DB for MongoDB (vCore) | Azure Database for PostgreSQL(灵活) | Azure AI 搜索 | Azure SQL 数据库 |
---|---|---|---|---|---|---|
全文搜索 | 是 1 | 否 | 是 2 | 是 1 | 是 3 | 是 4 |
混合搜索 | 是 5 | 否 | 否 | 是 5 | 是6 | 是 7 |
内置重新排序 | 否 | No | No | 否 | 是 8 | 否 |
- PostgreSQL 全文搜索
- 在 Azure Cosmos DB for MongoDB vCore 中使用文本索引进行搜索和查询。
- 全文搜索入门
- SQL Server 上的矢量数据
- 不是首要功能,但提供了示例代码。
- 混合搜索(全文搜索、矢量搜索和语义排名的组合)是首要功能。
- Azure SQL 数据库和 SQL Server 的混合搜索示例。
- 重新排序称为语义排名,是用于重新排序全文搜索和/或矢量搜索结果的首要功能。
矢量数据索引算法
矢量数据索引是有效存储和检索矢量的能力。 此功能很重要,因为索引会影响数据源上相似性搜索和最近邻查询的速度和准确性。
索引通常基于穷尽 K 最近邻 (Ek-NN) 或 ANN 算法。 Ek-NN 会逐个对所有数据点进行详尽搜索,并返回准确的 K 最近邻。 Ek-NN 以毫秒为单位处理少量数据;但可能会导致处理大量数据时出现延迟。
DiskANN、HNSW 和 IVFFlat 是 ANN 算法索引。 选择适当的索引策略需要仔细考虑各种因素,例如数据集的性质、查询的具体要求和可用的资源。 DiskANN 可以适应数据集中的变化,同时节省计算资源。 HNSW 在需要快速查询响应并能适应数据集变化的系统中表现出色。 IVFFlat 在硬件资源有限或查询量不大的环境中非常有效。
从下表中了解提供了哪些类型的矢量数据索引。
索引方法 | Azure Cosmos DB for PostgreSQL | Azure Cosmos DB for NoSQL | Azure Cosmos DB for MongoDB (vCore) | Azure Database for PostgreSQL(灵活) | Azure AI 搜索 | Azure SQL 数据库 |
---|---|---|---|---|---|---|
DiskANN | 否 | 是 | 否 | No | No | 否 |
详尽的 k 最近的邻域 (EKNN) | 是 | 是 | 是 | 是 | 是 | 是 |
分层可导航小世界 (HNSW) | 是 | 否 | 是(预览版)1 | 是 | 是 | 否 |
IVFflat | 是 | No | 是 | 是 | 否 | 否 |
其他 | - | flat, quantizedFlat2 | 矢量字段限制 3 矢量索引限制 4 |
- | - | 外部库可用5 |
- Azure Cosmos DB for MongoDB - 矢量搜索概述
- 矢量索引策略
- 每个容器只有一个矢量字段。
- 每个容器只有一个矢量索引。
- 可借助外部库创建索引,如 Scikit Learn 或 FAISS
相似性和距离计算功能
用于矢量搜索的计算方法有余弦相似度、点积和欧几里得距离。 这些方法用于计算两个矢量之间的相似性或两个矢量之间的距离。
初步数据分析受益于指标和欧几里得距离,这允许提取对数据结构的不同见解;而文本分类在欧几里得距离下通常表现更好。 余弦相似度通常能更好地检索与给定文本最相似的文本。
Azure OpenAI 服务嵌入依赖于余弦相似度来计算文档和查询之间的相似性。
内置矢量比较计算 | Azure Cosmos DB for PostgreSQL | Azure Cosmos DB for NoSQL | Azure Cosmos DB for MongoDB (vCore) | Azure Database for PostgreSQL(灵活) | Azure AI 搜索 | Azure SQL 数据库 |
---|---|---|---|---|---|---|
余弦相似度 | 是 | 是1 | 是 | 是 | 是 | 是 2 |
欧几里得距离(L2 距离) | 是 | 是1 | 是 | 是 | 是 | 是 2 |
点积 | 是 | 是1 | 是 | 是 | 是 | 是 2 |
- 用于 NoSQL 的 Azure Cosmos DB 的矢量距离计算。
- Azure SQL 数据库和 SQL Server 的距离计算示例。
与 Azure OpenAI 和其他组件集成
实现矢量搜索时,还可以考虑与其他 Microsoft 组件进行链接。 例如,Azure OpenAI 服务可帮助为数据创建矢量,并为矢量相似性搜索创建输入查询。
功能 | Azure Cosmos DB for PostgreSQL | Azure Cosmos DB for NoSQL | Azure Cosmos DB for MongoDB (vCore) | Azure Database for PostgreSQL(灵活) | Azure AI 搜索 | Azure SQL 数据库 |
---|---|---|---|---|---|---|
Azure OpenAI 服务 - 添加自己的数据 | 否 | 否 | 是 1 | 否 | 是 2 | 否 |
使用 Azure OpenAI 嵌入矢量 | 否 | No | 否 | 是 3 | 是 4 | 是 5 |
与提示流集成 | 否 | No | No | 否 | 是6 | 否 |
与语义内核集成 | 是 7 | 是8 | 是9 | 是 7 | 是 10 | 是 11 |
- Azure Cosmos DB for MongoDB (vCore) 支持作为 Azure OpenAI 数据的数据源。
- Azure AI 搜索 支持作为 Azure OpenAI 数据的数据源。
- 现已推出 Azure AI Extension(预览版)。
- Azure AI 搜索提供了一种对分块文本进行矢量化的技能。
- 可以为嵌入模型部署创建一个存储过程。
- 支持作为 Vector DB 查找工具中的矢量数据库。
- 支持作为内存连接器和矢量数据库连接器 (C#)。
- 支持作为内存连接器和矢量数据库连接器(C#、Python)。
- 支持作为矢量数据库连接器 (C#, Python)。
- 支持作为内存连接器和矢量数据库连接器(C#、Python)。
- 支持作为内存连接器。
作者
本文由 Microsoft 维护, 它最初是由以下贡献者撰写的。
主要作者:
- Keita Onabuta | 高级客户工程师
- Gary Lee | 高级客户工程师
其他参与者:
- Kruti Mehta | 客户工程师
要查看非公开的 LinkedIn 个人资料,请登录到 LinkedIn。
下一步
使用 Azure AI 搜索实现知识挖掘。 此学习路径探讨如何使用 Azure AI 搜索。