Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs 菜单
Docs 主页
/ /

自动嵌入的工作原理

您可以将MongoDB Vector Search 配置为自动生成和托管集群中文本数据的vector embeddings。您可以在集群中创建一键式AI语义搜索索引,并使用 Voyage AI embedding model,从而通过向量简化索引、更新和查询。

启用自动嵌入后, MongoDB Vector Search 会在索引时为集合中的指定文本字段使用指定的 embedding model 自动生成嵌入,并在查询时为查询中的文本 string 针对自动嵌入的索引字段自动生成嵌入。

当您为自动嵌入创建MongoDB Vector Search索引时, MongoDB会执行初始同步,为集合中的所有现有 document 生成嵌入:

  1. 扫描document。

    MongoDB Vector Search 扫描集合中包含索引文本字段的所有 document。

  2. 生成嵌入。

    对于每个document, MongoDB Vector Search 会将text从索引字段发送到 Voyage AI embedding model以生成vector embeddings。

  3. 存储嵌入。

    MongoDB Vector Search 将生成的嵌入存储在同一集群上的单独内部系统集合(__mdb_internal_search) 中,以使嵌入与应用程序程序数据隔离,同时保持数据局部性。

  4. 构建索引.

    生成嵌入后, MongoDB Vector Search 使用生成的嵌入构建索引,以启用向量搜索。

在初始同步期间, MongoDB分批处理document,并使用特殊的 Flex 推理处理层级来优化吞吐量。

注意

初始同步持续时间取决于document数量、索引字段中文本的长度以及可用的速率限制配额。对于大型集合,可能需要几个小时才能完成初始同步。

完成初始同步后, MongoDB Vector Search 会在数据发生变化时自动将嵌入与数据保持同步。

当您使用索引文本字段插入新 document 时, MongoDB 向量搜索会自动:

  1. 通过变更流检测新document。

  2. 使用配置的model为文本字段生成嵌入。

  3. 将嵌入存储在系统集合中。

  4. 更新MongoDB Vector Search索引以包含新的嵌入。

当您更新 document 且索引文本字段发生更改时, MongoDB 向量搜索 会自动:

  1. 通过变更流检测字段变更。

  2. 为更新后的文本生成新的嵌入。

  3. 替换系统集合中的旧嵌入。

  4. 使用新的嵌入更新MongoDB Vector Search索引。

注意

对于未针对自动嵌入进行索引的字段的更新, MongoDB Vector Search 不会 trigger 嵌入重新生成。

删除 document 时, MongoDB 向量搜索 会自动从系统集合中删除相应的嵌入并更新索引。

自动嵌入使用 Voyage AI 的 embedding model,该模型由 MongoDB 在多租户环境中托管和托管:

  • 托管服务:所有 embedding model 均由MongoDB托管和维护。该model推断平台运行在美国某区域Google Cloud云中的 MongoDB 基础架构上。您无需部署、配置或管理任何 model 基础架构。

  • 基于API 的访问:对于配置为使用 Voyage AI API密钥的自管理部署, MongoDB会将文本发送到 Voyage AI 的终结点以生成嵌入。嵌入将返回到MongoDB并存储在集群中。

  • 多租户架构:嵌入服务由多个用户共享。这种多租户 model 提供:

    • 通过共享基础架构提高成本效率

    • 自动model更新和改进

    • 高可用性和可扩展性

  • 发送到自动嵌入服务的文本仅用于生成嵌入,不会存储或用于model培训。

  • 嵌入将返回到您的MongoDB 集群并存储在您自己的数据库中。

  • 与自动嵌入服务的所有通信都通过加密连接进行。

嵌入服务是多租户的。因此, MongoDB实施速率限制以确保所有客户的公平使用。要详细学习;了解速率限制及其如何影响自动嵌入操作,请参阅 速率限制。

当您使用自动嵌入运行向量搜索查询时, MongoDB会自动处理查询文本的嵌入生成:

  1. 查询文本提交:您在 $vectorSearch 阶段的 query字段中提供文本字符串,而不是预先生成的向量。

  2. 嵌入生成: MongoDB将查询文本发送到自动嵌入服务,以使用索引中指定的相同model(如果使用 model 选项覆盖model,则为兼容model)生成嵌入。

  3. 向量搜索:生成的查询嵌入用于使用配置的相似度函数(余弦、dotProduct或欧几里得)搜索索引嵌入。

  4. 返回的结果: MongoDB返回按与查询的相似度排名的document。

使用自动嵌入的每个查询都会计入自动嵌入速率限制,因为它需要调用API来生成嵌入。要学习;了解有关管理查询吞吐量和成本的更多信息,请参阅速率限制。

  • 如果达到速率限制,大型集合可能需要大量时间才能完成初始同步。

  • MongoDB会自动重试失败的嵌入请求并实现指数退避。

  • 您可以通过 搜索监控监控同步进度。

  • document 更新在发生时进行处理,但受速率限制。

  • 如果更新超过速率限制,则会对其进行排队并在容量可用时进行处理。

  • 您的应用程序继续正常运行;只有嵌入生成可能会延迟。

  • 查询速率限制会影响您可以执行的并发搜索数量。

  • 如果超过查询速率限制,查询将返回错误,指示已超过速率限制。

  • 请考虑缓存常用的查询结果或升级到付费层级以获得更高的吞吐量。

自动嵌入使用单独的储备数据库来存储 vector embeddings。您可以查找为索引生成的嵌入集合,并从生成的嵌入集合中检索嵌入。

嵌入存储

MongoDB异步存储生成的嵌入,并将其保留在内部生成的嵌入集合中。生成的嵌入集合存在于同一集群上名为 __mdb_internal_search 的专用内部数据库中。集群中的每个自动嵌入索引在此数据库中都有一个对应的生成嵌入集合。要学习;了解更多信息,请参阅生成的嵌入集合。

警告

__mdb_internal_search数据库是由MongoDB创建和托管的保留内部命名空间。请勿操作此数据库或其集合。如果修改此保留的命名空间,可能会导致索引失败和搜索结果不一致。

生成的嵌入集合的结构

生成的嵌入集合的每个源集合 document 包含一个 document。每个生成的嵌入集合 document 具有与源相同的 _id、源的过滤字段的副本以及为每个自动嵌入字段生成的嵌入向量。

您可以看到以下字段:

字段
类型
说明

_id

ObjectId

与源 document 相同的 _id

<filter-field>

Any

源document中过滤器字段的副本。

_autoEmbed

对象

包含每个“自动嵌入”字段的嵌入向量。

_autoEmbed.
<fieldPath>

float 数组或量化向量

包含为 Automated Embedding(自动嵌入)字段生成的嵌入向量。

警告

__mdb_internal_search数据库是由MongoDB创建和托管的保留内部命名空间。请勿操作此数据库或其集合。如果修改此保留的命名空间,可能会导致索引失败和搜索结果不一致。

您可以检查生成的嵌入集合的存储大小,以了解生成的嵌入的磁盘和索引空间消耗。这对于容量规划、调试意外增长以及在删除或重新定义索引后验证清理非常有用。

重要

在检查存储大小之前,请找到生成的嵌入集合名称。要学习;了解更多信息,请参阅查找生成的嵌入集合。

以下部分指导对自动嵌入的常见问题进行故障排除。

未生成与索引ID匹配的嵌入集合
您的索引可能仍处于 BuildingPending 状态。生成的嵌入集合是在首次写入延迟创建的。使用 $listSearchIndexes 检查状态。
来源缺少 document _id
尚未生成指定document的嵌入,或者该document已被索引的过滤表达式过滤掉。
多个集合与索引ID匹配
自动嵌入字段配置已更新。虽然已创建新的生成嵌入集合,但旧的生成嵌入集合可能会短暂停留,直到被清理。

后退

管理账单