您可以将向量嵌入与其他 MongoDB 数据一起存储。这些嵌入可以捕获数据中的有意义的关系,使您能够执行语义搜索并实现 RAG。
开始体验
使用以下教程,了解如何创建向量嵌入并使用向量搜索进行查询。具体来说,您需要执行以下操作:
选择您是想使用专有模型还是开源模型。要想获得最先进的嵌入功能,请使用 Voyage AI。
从您的数据创建嵌入并将其存储在 MongoDB 中。
选择是要从新数据还是MongoDB集合中已有的数据创建嵌入。
根据搜索词创建嵌入,并运行向量搜索查询。
对于生产应用程序,您通常会写入脚本来生成向量嵌入。 您可以从此页面上的示例代码开始,并根据您的使用案例进行自定义。
Considerations
在创建向量嵌入时请考虑以下因素:
选择创建嵌入的方法
要创建向量嵌入,您必须使用嵌入模型。嵌入模型是用于生成数据数值向量表示的算法。请选择以下方式之一来访问嵌入模型:
方法 | 说明 |
|---|---|
加载开源模型 | 如果您没有专有嵌入模型的 API 密钥,可以在应用程序本地加载开源嵌入模型。 |
使用专有模型 | 大多数AI提供商都为其专有的嵌入模型提供API,可用于创建向量嵌入。对于最先进的嵌入,请使用 Voyage AI。 |
利用一个集成 | 您可以将MongoDB Vector Search 与开源框架和AI服务集成,以快速连接到开源和专有的嵌入模型,并为MongoDB Vector Search 生成矢量嵌入。 要学习;了解更多信息,请参阅将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 或更高版本
背景
浮点向量通常很难压缩,因为数组中的每个元素都有其自己的类型(尽管大多数向量是统一类型的)。因此,将嵌入模型的浮点向量输出转换为带有子类型 float32 的 binData 向量是一种更高效的序列化方案。binData 向量为整个向量存储单一类型描述符,从而减少存储开销。
验证您的嵌入
请考虑以下策略,以确保您的嵌入是正确且最佳的:
在生成和查询嵌入时,请考虑以下最佳实践:
测试您的函数和脚本。
生成嵌入需要时间和计算资源。 在从大型数据集或集合创建嵌入之前,请测试嵌入函数或脚本是否在一小部分数据上按预期运行。
分批创建嵌入。
如果要从大型数据集或包含大量文档的集合生成嵌入,请分批创建嵌入,以避免内存问题并优化性能。
评估性能。
运行测试查询,检查搜索结果是否相关且排名是否准确。
要详细学习;了解如何评估结果以及微调索引和查询的性能,请参阅如何衡量查询结果的准确性和MongoDB Vector Search 的基准。
如果您在嵌入时遇到问题,请考虑以下策略:
验证您的环境。
检查是否已安装必要的依赖项且这些依赖项是最新的。 库版本冲突可能会导致意外行为。 创建新环境并仅安装所需的包,确保不存在冲突。
注意
如果使用 Colab,请确保笔记本会话的 IP 地址包含在 Atlas 项目的访问列表中。
监控内存使用情况。
如果您遇到性能问题,请检查 RAM、CPU 和磁盘使用情况,以确定任何潜在的瓶颈。对于 Colab 或 Jupyter Notebooks 等托管环境,请确保您的实例预配了足够的资源,并在必要时升级实例。
确保维度一致
验证MongoDB Vector Search索引定义是否与MongoDB中存储的嵌入的维度相匹配,并且您的查询嵌入与索引的嵌入的维度相匹配。否则,在运行向量搜索查询时可能会遇到错误。
后续步骤
在学习如何创建嵌入并使用MongoDB Vector Search查询嵌入后,开始通过实施检索增强生成 (RAG) 来构建生成式AI应用程序:
您还可以将 32 位浮点向量嵌入量化为更少的位数,从而进一步减少资源消耗并提高查询速度。要了解更多信息,请参阅 向量量化 。