您可以配置MongoDB Vector Search,为Atlas 集群中的文本数据自动生成和管理vector embeddings。当您启用自动嵌入时, MongoDB Vector Search 使用指定的 Voyage AI embedding model在索引时为集合中的指定文本字段自动生成嵌入,并在查询时为查询中的text string自动生成嵌入。
自动嵌入简化了构建语义搜索的进程。您无需自行生成、存储或托管 vector embeddings。Atlas可以在本地处理嵌入的生成、更新和查询。
注意
免费 (M0)、Flex层级和专用 (M10+) 集群支持自动嵌入。
要在专用集群 (M10+) 上使用自动嵌入,必须同时启用存储和集群层自动伸缩。需要自动伸缩来扩展大型datasets上初始索引构建的资源。索引构建完成后,考虑到新的索引大小不需要更高的存储资源,集群会缩减到原始计算层级。
按如下方式设置自动伸缩设置:
如果当前集群层为
M10或M20(可突发的 CPU 实例),请将最大实例大小设立为M30或更大。如果当前集群层为
M30或更高,请将最大实例大小设立为高于当前层级的层级。对于使用 NVMe 存储的集群,请选择“扩展 NVMe 集群层”选项,当存储空间不足时。
您可以部署MongoDB Vector Search,并通过MongoDB Vector Search 索引中的自动嵌入启用,对文本数据启用由AI支持的智能语义搜索。MongoDB 的自动嵌入功能将传统上复杂的向量搜索实现转变为单步解决方案。您现在可以通过简单的字段配置来实现语义搜索,而无需管理单独的嵌入基础架构、模型选择和集成代码。
当您配置MongoDB Vector Search 索引时,它会使用您选择的最先进的 Voyage AI嵌入模型,为集合中的文本数据自动生成向量嵌入,在数据发生变化时保持嵌入同步,还支持使用自然语言文本查询。这些向量嵌入捕获数据中有意义的关系,并允许根据意图而不是关键字进行搜索。
启用并使用自动嵌入
要启用自动嵌入,请使用 autoEmbed 类型创建MongoDB Vector Search索引。autoEmbed 类型指定要启用自动嵌入的字段以及要使用的embedding model。您还可以包含一个或多个字段,以使用 filter 类型对数据进行预过滤。
1 { 2 "fields": [ 3 { 4 "type": "autoEmbed", 5 "modality": "text", 6 "path": "<field-to-index>", 7 "model": "<embedding-model>" 8 }, 9 { 10 "type": "filter", 11 "path": "<field-to-index>" 12 }, 13 ... 14 ] 15 }
要学习;了解有关索引语法和字段的详情,请参阅如何为向量搜索的字段建立索引。
MongoDB Vector Search 自动为您插入或更新的现有 document 和新 document 生成嵌入。
创建索引后,您可以运行查询。MongoDB Vector Search 使用您在索引中指定的相同 embedding model 自动为查询文本生成嵌入。您可以选择在 $vectorSearch 管道阶段使用 model 选项指定不同的 embedding model,但指定的 embedding model 必须与索引时使用的 embedding model 兼容。
1 [ 2 { 3 "$vectorSearch": { 4 "index": "<index-name>", 5 "path": "<field-to-index>", 6 "query": "<query-text>", 7 "model": "<embedding-model>" 8 } 9 }, 10 { 11 "$project": { 12 "_id": 0, 13 "<field-to-index>": 1, 14 "score": { "$meta": "vectorSearchScore" } 15 } 16 } 17 ]
要了解更多信息,请参阅运行向量搜索查询。
注意
该功能适用于使用Docker、Tarball 或包管理器的MongoDB Search 和MongoDB 向量搜索 部署,以及将MongoDB Controllers for Kubernetes 操作符与MongoDB 8.2 或更高版本 Community Edition 结合使用的部署。MongoDB Enterprise Edition尚不提供自动嵌入功能。
只需更改简单的配置,即可为AI代理启用语义搜索、RAG 和内存,而无需编写嵌入代码、管理model基础架构或处理向量管道。换言之,在部署具有MongoDB Search 和 向量搜索进程mongot 的MongoDB Community Edition时,您可以提供用于生成嵌入的Voyage AI API密钥,理想情况下,一个用于索引操作,另一个用于来自不同项目的查询操作。
部署后:
从集合中,选择要启用语义搜索的文本字段。
从可用嵌入模型列表中,选择一个嵌入模型。
在MongoDB Vector Search索引定义中,使用
autoEmbed类型配置自动嵌入。
要学习;了解有关为自动嵌入配置MongoDB Vector Search索引的更多信息,请参阅如何为向量搜索的字段编制索引。
MongoDB Vector Search 会为您使用初始化MongoDB Community Edition时指定的 API密钥插入或更新的现有文档和新文档自动生成嵌入。
对于查询,请在$vectorSearch管道阶段使用 query.text 选项。MongoDB Vector Search 使用索引定义中相同的embedding model为文本查询生成嵌入。您可以在 $vectorSearch 管道阶段使用 model 选项指定不同的 embedding model,但指定的 embedding model 必须与索引时使用的 embedding model 兼容。MongoDB 向量搜索 使用您在MongoDB Community初始化期间提供的查询API密钥在查询时生成嵌入。要学习;了解详情,请参阅运行向量搜索查询。
使用API密钥生成嵌入时需要付费。要学习;了解更多信息,请参阅管理计费。
要自动执行嵌入并运行示例查询,请参阅MongoDB 向量搜索 快速入门。
Voyage AI API密钥
虽然您可以使用单个API密钥在索引时和查询时生成嵌入,但我们建议您使用单独的API密钥,以避免查询操作对索引操作产生负面影响。
您可以通过以下方式生成API密钥:
(推荐)使用Atlas帐户,这样您就可以从Atlas用户界面管理Voyage AI嵌入模型API密钥。
要学习;了解有关生成和管理API密钥的更多信息,包括配置速率限制(TPM和RPM的组合)和监控API密钥使用情况,请参阅模型 API 密钥。
要学习;了解有关管理从 Voyage AI 创建的 API 密钥的更多信息,请参阅 API 密钥。
创建密钥后,在使用MongoDB Community Edition 部署期间配置 mongot 时,必须指定要用于自动嵌入的密钥。MongoDB Vector Search 使用您在部署mongot 期间提供的 Voyage AI API密钥,在索引处为您的数据自动生成嵌入,并在查询时为查询文本自动生成嵌入。
嵌入存储
自动嵌入索引异步生成 vector embeddings,并持久保存到单独保留数据库上的MongoDB 集群。每个自动嵌入索引都有一个对应的生成嵌入集合。生成的嵌入集合存储在同一集群上的专用内部数据库中。
要学习;了解更多信息,请参阅生成的嵌入集合。
可用型号
MongoDB Vector Search 与 Voyage AI 最先进的嵌入模型集成,每个模型都针对特定使用案例进行了优化:
嵌入模型 | 说明 | 每 1M 个令牌的价格 |
|---|---|---|
| 针对大容量、成本敏感的应用程序进行了优化。 | $ 0.02 |
| (推荐)平衡一般文本搜索的性能。 | $ 0.06 |
| 复杂语义关系的最高准确性。 | $ 0.12 |
| 专门用于代码搜索和技术文档。 | $ 0.18 |
要学习;了解更多信息,请参阅用于自动嵌入的model。
关键概念
- 内嵌模型
embedding model是将数据转换为vector embeddings的算法,而vector embeddings可捕获数据的语义或根本的含义。这些向量启用向量搜索。
要学习有关自动嵌入的embedding model的更多信息,请参阅可用model。
- 向量嵌入
向量嵌入是一个数字数组,每个维度代表数据的不同功能或属性。向量可用于表示任何类型的数据,从文本、图像和视频到非结构化数据。您可以通过将数据传递到嵌入模型来创建向量嵌入,并且可以存储这些嵌入存储在支持向量嵌入的数据库中,例如MongoDB。
要学习;了解有关自动嵌入的嵌入存储的更多信息,请参阅生成的嵌入集合。
- tokens
在嵌入模型和法学硕士中,词元是模型处理以创建嵌入或生成文本的文本的基本单位,例如单词、子词或字符。令牌是针对使用嵌入模型和 LLM 的计费方式。
要学习;了解有关用于自动嵌入的令牌的更多信息,请参阅管理自动嵌入的计费。
- 速率限制
速率限制是API提供商对用户在特定时间范围内可以发出的请求数量施加的限制,通常以每分钟的令牌数 (TPM) 或每分钟的请求数 (RPM) 来衡量。这些限制可确保公平使用,防止滥用,并为所有用户保持服务的稳定性和性能。
要学习;了解有关自动嵌入速率限制的更多信息,请参阅速率限制。
- 量化
Quantization reduces the precision of vector embeddings to decrease memory and 存储 usage, with trade-offs in search accuracy.对于自动嵌入, MongoDB Vector Search 支持以下 quantization 类型:
Quantization 类型说明float将 vector embeddings 存储为 32 位 float 值。
scalar将每个向量维度从 32 位 float 减少为 8 位整数。
binary将每个向量 dimensions 减少到一位,并对排名靠前的结果重新评分。
binaryNoRescore将每个向量 dimensions 减少为一位,无需重新评分。
要学习;了解有关自动嵌入的 quantization 的更多信息,请参阅关于 quantization。
- 维度数
The number of dimensions specifies the length of the embedding vector for each document (how many numbers are in the 数组).更高的dimensions可以捕获更多的语义细节,通常可以提高检索准确性,但会增加存储和计算费用(索引大小、 RAM使用量,有时还会延迟)。
要学习;了解更多信息,请参阅
numCandidates选择。- 相似度
相似度函数用于衡量两个向量之间的相似度,或查询向量与索引中向量的接近程度。MongoDB Vector Search 支持以下相似度函数:
cosine— 根据向量之间的角度测量相似度。dotProduct- 测量类似于cosine的相似度,但考虑了向量的幅度。我们建议将此相似度函数用于全保真或scalarquantization。euclidean— 测量向量两端之间的距离。我们建议将此相似度函数用于binary或binaryNoRescorequantization,其中向量被压缩,汉明或欧几里得空间中的距离是正确的信号。
要学习;了解有关自动嵌入的相似度函数的更多信息,请参阅关于相似度函数。