对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

如何手动创建向量嵌入

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

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

  1. Define a function that uses an embedding model to generate vector embeddings.

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

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

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

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

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

注意

MongoDB 向量搜索自动嵌入服务是一种一键式方式,可对集合中的文本数据启用语义搜索。使用自动嵌入,您无需自行生成、存储或管理 vector embeddings。相反, MongoDB vector search 会自动为您生成和托管 vector embeddings。要学习;了解更多信息,请参阅自动嵌入概述。

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

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

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

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

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

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

方法
说明

加载开源模型

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。

利用一个集成

You can integrate MongoDB Vector Search with open-source frameworks and AI services to quickly connect to both open-source and proprietary embedding models and generate vector embeddings for MongoDB Vector Search.

To learn more, see MongoDB AI Integrations and Partners.

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

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

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

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

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

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

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

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

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

If you have a large number of float vectors and want to reduce the storage and WiredTiger footprint (such as disk and memory usage) in mongod, compress your embeddings by converting them to binData vectors.

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

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

The tutorial on this page includes an example function that you can use to convert your float32 vectors to binData vectors.

BSON BinData vectors are supported by the following drivers:

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

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

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

您还可以将 32-bit float vector embeddings 量化为更少的位数,以进一步减少资源消耗并提高查询速度。要学习;了解更多信息,请参阅About quantization.