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

如何手动创建向量嵌入

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

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

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

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

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

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

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

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

注意

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

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

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

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

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

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

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

方法
说明

加载开源模型

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

使用专有模型

大多数 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 嵌入,您可以使用 float32binData 向量来查询它们。

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

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 或更高版本

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

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

学习在创建嵌入时的最佳实践。

在生成和查询嵌入时,请考虑以下最佳实践:

  • 测试您的函数和脚本。

    生成嵌入需要时间和计算资源。 在从大型数据集或集合创建嵌入之前,请测试嵌入函数或脚本是否在一小部分数据上按预期运行。

  • 分批创建嵌入。

    如果要从大型数据集或包含大量文档的集合生成嵌入,请分批创建嵌入,以避免内存问题并优化性能。

  • 评估性能。

    运行测试查询,检查搜索结果是否相关且排名是否准确。

    要详细学习;了解如何评估结果以及微调索引和查询的性能,请参阅如何衡量查询结果的准确性MongoDB Vector Search 的基准

学习排除嵌入问题的策略。

如果您在嵌入时遇到问题,请考虑以下策略:

  • 验证您的环境。

    检查是否已安装必要的依赖项且这些依赖项是最新的。 库版本冲突可能会导致意外行为。 创建新环境并仅安装所需的包,确保不存在冲突。

    注意

    If you're using Colab, ensure that your notebook session's IP address is included in your Atlas project's access list.

  • 监控内存使用情况。

    如果您遇到性能问题,请检查 RAM、CPU 和磁盘使用情况,以确定任何潜在的瓶颈。对于 Colab 或 Jupyter Notebooks 等托管环境,请确保您的实例预配了足够的资源,并在必要时升级实例。

  • 确保维度一致

    验证MongoDB Vector Search索引定义是否与MongoDB中存储的嵌入的维度相匹配,并且您的查询嵌入与索引的嵌入的维度相匹配。否则,在运行向量搜索查询时可能会遇到错误。

要解决特定问题,请参阅故障排除。

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

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