您可以将向量嵌入与其他 MongoDB 数据一起存储。这些嵌入能够捕捉数据中的语义关联,使您能够执行语义搜索并实现 RAG。
开始体验
使用以下教程,了解如何创建向量嵌入并使用向量搜索进行查询。具体来说,您需要执行以下操作:
定义一个使用嵌入模型生成向量嵌入的函数。
选择您是想使用专有模型还是开源模型。要想获得最先进的嵌入功能,请使用 Voyage AI。
从您的数据创建嵌入并将其存储在 MongoDB 中。
选择是要从新数据还是MongoDB集合中已有的数据创建嵌入。
根据搜索词创建嵌入,并运行向量搜索查询。
对于生产应用程序,您通常会写入脚本来生成向量嵌入。 您可以从此页面上的示例代码开始,并根据您的使用案例进行自定义。
注意
MongoDB 向量搜索自动嵌入服务是一种一键式方式,可对集合中的文本数据启用语义搜索。使用自动嵌入,您无需自行生成、存储或管理 vector embeddings。相反, MongoDB vector search 会自动为您生成和托管 vector embeddings。要学习;了解更多信息,请参阅自动嵌入概述。
Considerations
在创建向量嵌入时请考虑以下因素:
选择创建嵌入的方法
要创建向量嵌入,您必须使用嵌入模型。嵌入模型是用于生成数据数值向量表示的算法。请选择以下方式之一来访问嵌入模型:
方法 | 说明 |
|---|---|
加载开源模型 | If you don't have an API key for a proprietary embedding model, load an open-source embedding model locally from your application. |
使用专有模型 | 大多数 AI 提供商都为其专有的嵌入模型提供 API,您可以使用这些模型创建向量嵌入。要使用最先进的嵌入技术,请使用 Voyage AI。 |
利用一个集成 | 您可以将MongoDB 向量搜索 与开源框架和AI服务集成,以快速连接到开源和专有的嵌入模型,并为MongoDB 向量搜索 生成矢量嵌入。 要了解更多信息,请参阅 MongoDB AI 集成和合作。 |
选择内嵌模型
您选择的嵌入模型会影响查询结果,并决定您在MongoDB Vector Search索引中指定的维数。根据您的数据和使用案例,每种模型都有不同的优势。对于最先进的嵌入,包括多模态和特定领域的嵌入模型,请使用 Voyage AI。
为MongoDB Vector Search 选择嵌入模型时,请考虑以下指标:
向量压缩
如果您有大量浮点向量,并希望减少mongod中的存储和WiredTiger占用空间(如磁盘和内存使用量),请通过将嵌入转换为binData向量来压缩它们。
BinData 是一种 BSON 数据类型,用于存储二进制数据。向量嵌入的默认类型是 32 位浮点数数组 (float32)。二进制数据比默认数组格式更节省存储空间,因此需要的磁盘空间只有默认数组格式的三分之一。
存储 binData 向量可以提高查询性能,因为将文档加载到工作集所需的资源更少。这可以显著提高在返回超过 20 个文档的向量查询速度。如果您压缩了 float32 嵌入,您可以使用 float32 或 binData 向量来查询它们。
本页的教程包括一个示例函数,您可以使用它将float32向量转换为binData向量。
支持的驱动程序
BSON BinData 向量由以下驱动程序提供支持:
C++ 驱动程序 v4.1.0 或更高版本
C#/.NET 驱动程序 v3.2.0 或更高版本
Go驱动程序v2.1.0 或更高版本
PyMongo 驱动程序 v4.10 或更高版本
Node.js 驱动程序 v6.11 或更高版本
Java 驱动程序 v5.3.1 或更高版本
Ruby 驱动程序 与
bsongem v5.1 或更高版本
背景
浮点向量通常很难压缩,因为数组中的每个元素都有其自己的类型(尽管大多数向量是统一类型的)。因此,将嵌入模型的浮点向量输出转换为带有子类型 float32 的 binData 向量是一种更高效的序列化方案。binData 向量为整个向量存储单一类型描述符,从而减少存储开销。
验证您的嵌入
请考虑以下策略,以确保您的嵌入是正确且最佳的:
后续步骤
在学习如何创建嵌入并使用MongoDB Vector Search查询嵌入后,开始通过实施检索增强生成 (RAG) 来构建生成式AI应用程序:
您还可以将 32-bit float vector embeddings 量化为更少的位数,以进一步减少资源消耗并提高查询速度。要学习;了解更多信息,请参阅About quantization.