Docs 菜单
Docs 主页
/ /

如何创建向量嵌入

您可以将向量嵌入与其他 MongoDB 数据一起存储。这些嵌入可以捕获数据中的有意义的关系,使您能够执行语义搜索并实现 RAG。

使用以下教程,了解如何创建向量嵌入并使用向量搜索进行查询。具体来说,您需要执行以下操作:

  1. 定义一个使用 嵌入模型生成向量嵌入的函数。

    选择您是想使用专有模型还是开源模型。要想获得最先进的嵌入功能,请使用 Voyage AI。

  2. 从您的数据创建嵌入并将其存储在 MongoDB 中。

    选择是要从新数据还是MongoDB集合中已有的数据创建嵌入。

  3. 根据搜索词创建嵌入,并运行向量搜索查询。

对于生产应用程序,您通常会写入脚本来生成向量嵌入。 您可以从此页面上的示例代码开始,并根据您的使用案例进行自定义。

如要完成本教程,您必须具备以下条件:

在本部分中,您将使用您定义的函数从数据创建向量嵌入,然后将这些嵌入存储在 MongoDB 集合中。

在本节中,您将对集合中的向量嵌入进行索引,并创建一个嵌入,用于运行示例向量搜索查询。

向量搜索会返回嵌入向量与查询嵌入最接近的文档。这表明它们的含义相似。

在创建向量嵌入时请考虑以下因素:

要创建向量嵌入,您必须使用嵌入模型。嵌入模型是用于生成数据数值向量表示的算法。请选择以下方式之一来访问嵌入模型:

方法
说明

加载开源模型

如果您没有专有嵌入模型的 API 密钥,可以在应用程序本地加载开源嵌入模型。

使用专有模型

大多数AI提供商都为其专有的嵌入模型提供API,可用于创建向量嵌入。对于最先进的嵌入,请使用 Voyage AI。

利用一个集成

您可以将MongoDB Vector Search 与开源框架和AI服务集成,以快速连接到开源和专有的嵌入模型,并为MongoDB Vector Search 生成矢量嵌入。

要学习;了解更多信息,请参阅将MongoDB与AI技术集成。

您选择的嵌入模型会影响查询结果,并决定您在MongoDB Vector Search索引中指定的维数。根据您的数据和使用案例,每种模型都有不同的优势。对于最先进的嵌入,包括多模态和特定领域的嵌入模型,请使用 Voyage AI。

为MongoDB Vector Search 选择嵌入模型时,请考虑以下指标:

  • 嵌入维度:向量嵌入的长度。

    较小的嵌入可以提高存储效率,而较大的嵌入可以捕获数据中更细微的关系。您选择的模型应在效率和复杂性之间取得平衡。

  • Max Tokens(最大标记数):可在单个嵌入中压缩的令牌 数。

  • 模型大小:模型的大小,以千兆字节为单位。

    虽然模型越大,性能越好,但当您将MongoDB Vector Search扩展到生产环境时,它们需要更多的计算资源。

  • 检索平均值:衡量检索系统性能的分数。

    分数越高,表示模型更擅长在检索结果列表中将相关文档排在较高的位置。在为 RAG 应用程序选择模型时,此分数很重要。

如果您有大量浮点向量,并希望减少mongod中的存储和WiredTiger占用空间(如磁盘和内存使用量),请通过将嵌入转换为binData向量来压缩它们。

BinData 是一种存储二进制数据的 BSON 数据类型。向量嵌入的默认类型是 32 位浮点数 (float32) 的大量。二进制数据比默认大量格式的存储效率更高,因此所需的磁盘空间减少三倍。

存储 binData 向量可以提高查询性能,因为将文档加载到工作集所需的资源更少。这可以显著提高在返回超过 20 个文档的向量查询速度。如果您压缩了 float32 嵌入,您可以使用 float32binData 向量来查询它们。

本页的教程包括一个示例函数,您可以使用它将float32向量转换为binData向量。

BSON BinData 向量由以下驱动程序提供支持:

浮点向量通常很难压缩,因为数组中的每个元素都有其自己的类型(尽管大多数向量是统一类型的)。因此,将嵌入模型的浮点向量输出转换为带有子类型 float32binData 向量是一种更高效的序列化方案。binData 向量为整个向量存储单一类型描述符,从而减少存储开销。

请考虑以下策略,以确保您的嵌入是正确且最佳的:

在学习如何创建嵌入并使用MongoDB Vector Search查询嵌入后,开始通过实施检索增强生成 (RAG) 来构建生成式AI应用程序:

您还可以将 32 位浮点向量嵌入量化为更少的位数,从而进一步减少资源消耗并提高查询速度。要了解更多信息,请参阅 向量量化 。

后退

兼容性与限制

获得技能徽章

免费掌握“RAG with MongoDB”!

了解详情

在此页面上