您可以配置MongoDB Vector Search,为Atlas 集群中的文本数据自动生成和管理向量嵌入。当您启用自动嵌入时, MongoDB Vector Search 使用指定的 Voyage AI嵌入模型在索引时为集合中的指定文本字段自动生成嵌入,并在查询时为查询中的文本字符串自动生成嵌入。
自动嵌入简化了构建语义搜索的进程。您无需自行生成、存储或管理向量嵌入。 Atlas可以原生处理嵌入的生成、更新和查询。
注意
您必须启用最大实例大小为 M30 或更大的自动伸缩,M10 和 M20 集群才能使用自动嵌入。对于所有其他集群层,默认启用自动嵌入。
您可以部署MongoDB Vector Search,并通过MongoDB Vector Search 索引中的自动嵌入启用,对文本数据启用由AI支持的智能语义搜索。MongoDB 的自动嵌入功能将传统上复杂的向量搜索实现转变为单步解决方案。您现在可以通过简单的字段配置来实现语义搜索,而无需管理单独的嵌入基础架构、模型选择和集成代码。
当您配置MongoDB Vector Search 索引时,它会使用您选择的最先进的 Voyage AI嵌入模型,为集合中的文本数据自动生成向量嵌入,在数据发生变化时保持嵌入同步,还支持使用自然语言文本查询。这些向量嵌入捕获数据中有意义的关系,并允许根据意图而不是关键字进行搜索。
启用并使用自动嵌入
要启用自动嵌入,请使用 autoEmbed 类型创建MongoDB Vector Search索引。 autoEmbed 类型指定要启用自动嵌入的字段以及要使用的嵌入模型。您还可以包含一个或多个字段,以使用 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 自动为您插入或更新的现有文档和新文档生成嵌入。
创建索引后,您可以运行查询。 MongoDB Vector Search 使用您在索引中指定的相同嵌入模型自动为查询文本生成嵌入。您可以选择在model $vectorSearch管道阶段使用 选项指定不同的嵌入模型,但指定的嵌入模型必须与索引时使用的嵌入模型兼容。
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 Vector Search 部署,以及将MongoDB Controllers for Kubernetes Operator 与MongoDB8.2 或更高版本 Community Edition 结合使用的部署。 MongoDB Enterprise版尚不提供自动嵌入功能。
只需更改简单的配置,即可为AI助手启用语义搜索、RAG 和内存,而无需编写嵌入代码、管理模型基础架构或处理向量管道。换言之,在部署具有MongoDB Search 和 Vector Search进程 的MongoDB Community Edition时,您可以提供用于生成嵌入的 mongotVoyage AI API密钥,理想情况下,一个用于索引操作,另一个用于来自不同项目的查询操作。
部署后:
从集合中,选择要启用语义搜索的文本字段。
从可用嵌入模型列表中,选择一个嵌入模型。
在MongoDB Vector Search索引定义中,使用
autoEmbed类型配置自动嵌入。
要学习;了解有关为自动嵌入配置MongoDB Vector Search索引的更多信息,请参阅如何为向量搜索的字段编制索引。
MongoDB Vector Search 会为您使用初始化MongoDB Community Edition时指定的 API密钥插入或更新的现有文档和新文档自动生成嵌入。
对于查询,请在query.text $vectorSearch管道阶段使用 选项。 MongoDB Vector Search 使用索引定义中相同的嵌入模型为文本查询生成嵌入。您可以在model $vectorSearch管道阶段使用 选项指定不同的嵌入模型,但指定的嵌入模型必须与索引时使用的嵌入模型兼容。 MongoDB Vector Search 使用您在MongoDB Community初始化期间提供的查询API密钥在查询时生成嵌入。要学习;了解详情,请参阅运行向量搜索查询。
使用API密钥生成嵌入时需要付费。要学习;了解更多信息,请参阅管理计费。
要自动执行嵌入并运行示例查询,请参阅MongoDB Vector Search 快速入门。
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密钥,在索引处为您的数据自动生成嵌入,并在查询时为查询文本自动生成嵌入。
嵌入存储
自动嵌入索引异步生成向量嵌入,并持久保存到单独保留数据库上的MongoDB 集群。每个自动嵌入索引都有一个对应的生成嵌入集合。生成的嵌入集合存储在同一集群上的专用内部数据库中。
可用型号
MongoDB Vector Search 与 Voyage AI 最先进的嵌入模型集成,每个模型都针对特定使用案例进行了优化:
嵌入模型 | 说明 | 每 1M 个令牌的价格 |
|---|---|---|
| 针对大容量、成本敏感的应用程序进行了优化。 | $ 0.02 |
| (推荐)平衡一般文本搜索的性能。 | $ 0.06 |
| 复杂语义关系的最高准确性。 | $ 0.12 |
| 专门用于代码搜索和技术文档。 | $ 0.18 |
关键概念
- 内嵌模型
嵌入模型是将数据转换为向量嵌入的算法,而向量嵌入可捕获数据的语义或根本的含义。这些向量启用向量搜索。
- 向量嵌入
向量嵌入是一个数字数组,每个维度代表数据的不同功能或属性。向量可用于表示任何类型的数据,从文本、图像和视频到非结构化数据。您可以通过将数据传递到嵌入模型来创建向量嵌入,并且可以存储这些嵌入存储在支持向量嵌入的数据库中,例如MongoDB。
- tokens
在嵌入模型和法学硕士中,词元是模型处理以创建嵌入或生成文本的文本的基本单位,例如单词、子词或字符。令牌是针对使用嵌入模型和 LLM 的计费方式。
- 速率限制
速率限制是API提供商对用户在特定时间范围内可以发出的请求数量施加的限制,通常以每分钟的令牌数 (TPM) 或每分钟的请求数 (RPM) 来衡量。这些限制可确保公平使用,防止滥用,并为所有用户保持服务的稳定性和性能。
- 量化
量化会降低向量嵌入的精度,以减少内存和存储使用量,但会牺牲搜索准确性。对于自动嵌入, MongoDB Vector Search 支持以下量化类型:
量化类型说明float将向量嵌入存储为 32 位浮点值。
scalar将每个向量维度从 32 位浮点数减少为 8 位整数。
binary将每个向量维度减少到一位,并对排名靠前的结果重新评分。
binaryNoRescore将每个向量维度减少为一位,无需重新评分。
- 维度数
维数指定每个文档的嵌入向量的长度(大量中有多少个数字)。更高的维度可以捕获更多的语义细节,通常可以提高检索准确性,但会增加存储和计算成本(索引大小、 RAM使用量,有时还会延迟)。
要学习;了解更多信息,请参阅
numCandidates选择。- 相似度
相似度函数用于衡量两个向量之间的相似度,或查询向量与索引中向量的接近程度。 MongoDB Vector Search 支持以下相似度函数:
cosine— 根据向量之间的角度测量相似度。dotProduct- 测量类似于cosine的相似度,但考虑了向量的幅度。我们建议将此相似度函数用于全保真或scalar量化。euclidean— 测量向量两端之间的距离。我们建议将此相似度函数用于binary或binaryNoRescore量化,其中向量被压缩,汉明或欧几里得空间中的距离是正确的信号。