Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs 菜单
Docs 主页
/ /

自动嵌入的工作原理

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

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

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

  1. 扫描文档。

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

  2. 生成嵌入。

    对于每个文档, MongoDB Vector Search 会将文本从索引字段发送到 Voyage AI嵌入模型以生成向量嵌入。

  3. 存储嵌入。

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

  4. 构建索引。

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

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

注意

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

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

当您使用索引文本字段插入新文档时, MongoDB Vector Search 会自动:

  1. 通过变更流检测新文档。

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

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

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

当您更新文档且索引文本字段发生更改时, MongoDB Vector Search 会自动:

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

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

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

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

注意

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

删除文档时, MongoDB Vector Search 会自动从系统集合中删除相应的嵌入并更新索引。

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

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

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

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

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

    • 自动模型更新和改进

    • 高可用性和可扩展性

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

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

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

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

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

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

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

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

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

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

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

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

  • 您可以通过 Atlas Search监控监控同步进度。

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

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

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

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

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

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

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

嵌入存储

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

警告

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

生成的嵌入集合的结构

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

您可以看到以下字段:

字段
类型
说明

_id

ObjectId

与源文档相同的 _id

<filter-field>

Any

源文档中筛选过滤字段的副本。

_autoEmbed

对象

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

_autoEmbed.
<fieldPath>

浮点数组或量化向量

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

警告

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

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

重要

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

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

后退

管理账单