对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

使用MongoDB Vector Search 自动生成嵌入

重要

在我们准备从私有预览过渡到公开预览时,text 类型的MongoDB Vector Search 索引已弃用。要学习;了解更多信息,请参阅预览功能。

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

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

重要

您可以在云提供商的任何 M10 或更高级别的集群上使用MongoDB Vector Search 自动嵌入。但是,处理生成向量嵌入的推理进程的服务在 Google Cloud 上运行。这意味着,无论集群的云提供商如何,您的数据都会发送到 Google Cloud 进行嵌入生成和检索。我们提供企业级安全,因此,您的数据仅存储在您的集群中。

嵌入模型在共享的多租户推理平台上运行。因此,在预览期间,您必须使用文档少于 100k 的数据集,并仅出于功能评估而非负载测试而运行查询。如果您有更高限制的使用案例,请联系您的客户团队。

虽然您的工作负载没有硬性速率限制,但有全局限制。如果您的查询返回速率限制错误(错误 409),请在应用程序代码中执行退避并重试。这使您的应用程序能够从容处理速率限制并确保持续运行。

要使用自动嵌入启用向量搜索,您必须启用以下条件:

  • M10 或更高级别的集群

  • 一个集合,其中包含您希望为其索引以实现自动嵌入的文本字段。

  • 以下客户端之一:

    • 用于创建索引的 Atlas UI

    • mongosh 用于创建索引和运行查询

    • 节点驱动程序 6.6.0 或更高版本,用于创建索引和运行查询

    • Python驱动程序 4.7 或更高版本,用于创建索引和运行查询

以下部分描述了用于启用自动生成文本字段嵌入的MongoDB Vector Search索引语法和字段,并引导您完成为自动嵌入配置索引的步骤。

您需要 Project Data Access Admin 或更高角色才能创建和管理MongoDB Vector Search 搜索索引。

以下是启用自动生成嵌入的语法:

1{
2 "fields": [
3 {
4 "type": "text",
5 "path": "<field-name>",
6 "model": "voyage-3-large | voyage-3.5 | voyage-3.5-lite"
7 }
8 ]
9}

索引定义中需要以下字段:

字段
类型
说明

type

字符串

字段的类型。对于自动嵌入,该值必须为 text

path

字符串

集合中您想要为自动嵌入索引的字段的名称。

model

字符串

用于为索引生成嵌入的 Voyage AI 嵌入模型。您可以指定以下模型之一:

  • voyage-3-large — 跨语言和领域的最高质量检索。

  • voyage-3.5 - 平衡多语言使用和通用检索准确性的模型。

  • voyage-3.5-lite - 轻量级、速度更快的模型针对延迟和费用进行了优化。

创建索引后,如果您随后更改嵌入模型, MongoDB Vector Search 会为数据集生成新的嵌入。在MongoDB Vector Search 生成嵌入时,您可以使用旧的嵌入继续进行查询。当旧的嵌入替换为新的嵌入模型中的嵌入时, MongoDB Vector Search 会删除旧的嵌入。

自动嵌入的索引字段与以下 vector 类型索引字段互斥:

  • numDimensions

  • similarity

  • quantization

如果您的集合已经包含嵌入,则必须使用 vector 类型字段来为嵌入创建索引。要了解有关使用嵌入对字段进行索引的更多信息,请参阅如何对 Vector Search 字段进行索引

如果您想要为自动生成嵌入的文本字段建立索引,并使用您自己的嵌入为字段索引,则可以同时使用 textvector 类型创建索引。MongoDB Vector Search 将仅自动为针对索引为 text 类型的字段的查询生成嵌入。您必须在查询中指定嵌入,才能搜索索引为 vector 类型的字段。

您还可以使用MongoDB Vector Search filter 类型对字段进行索引以预筛选数据。

重要

筛选后的查询通常比其他等效的未筛选查询慢。

要学习;了解有关预过滤数据的更多信息,请参阅关于 filter 类型。

以下过程将演练在MongoDB Vector Search索引中启用自动嵌入的步骤。如果加载了 sample_mflix.movies 数据集,则过程中的示例将演示如何为集合中的 fullplot字段启用自动嵌入。

在创建具有自动嵌入的索引后,您可以对索引字段运行文本查询。MongoDB Vector Search 使用索引中指定的相同嵌入模型,自动为查询中的文本 string 生成嵌入。它使用嵌入来搜索索引中与指定查询文本在语义上相似的文档。

以下部分描述了 $vectorSearch 管道语法和字段,用于根据为自动嵌入建立索引的字段自动为查询文本生成嵌入,并演示如何对为自动嵌入建立索引的字段运行语义搜索查询。

以下语法演示了如何对针对自动嵌入进行了索引的字段运行查询:

1{
2 "$vectorSearch": {
3 "index": "<index-name>",
4 "limit": <number-of-results>,
5 "numCandidates": <number-of-candidates>,
6 "path": "<field-to-search>",
7 "query": "<query-string>"
8 }
9}

使用自动嵌入的MongoDB Vector Search查询需要以下字段:

字段
类型
必要性
说明

exact

布尔

可选的

如果省略 numCandidates,则此字段为必填字段。与 numCandidates 互斥。

该标志指定是运行 ENN 还是 ANN 搜索。值可以是以下值之一:

  • false - 运行 ANN 搜索

  • true - 运行 ENN 搜索

如果省略,则默认值为 false

index

字符串

必需

要使用的MongoDB Vector Search索引的名称。

如果索引名称拼写错误或者指定的索引在集群上尚不存在,MongoDB Vector Search 不会返回结果。

limit

数字

必需

要在结果中返回的文档数量(仅限 int)。如果指定 numCandidates,该值不能超过 numCandidates 的值。

numCandidates

数字

可选的

如果 exactfalse 或被省略,则此字段为必填字段。与 exact 互斥。

搜索期间要使用的最近邻数量。值必须小于或等于 (<=) 10000。指定的数字不能小于要返回的文档数量 (limit)。

path

字符串

必需

要搜索的索引向量类型字段。

query

字符串

必需

用于自动生成嵌入并执行语义搜索的文本。

您可以对近似最近邻 (ANN)精确最近邻 (ENN)查询运行于索引字段。要学习、了解更多信息,请参阅 近似最近邻 (ANN) 搜索精确最近邻 (ENN) 搜索。

您不能在查询中针对为自动嵌入建立索引的字段指定向量嵌入。相反,您必须对该字段运行自然语言查询。当您针对自动嵌入的索引字段运行自然语言查询时, MongoDB Vector Search 使用与索引字段相同的嵌入模型自动为查询文本生成嵌入。然后,它使用生成的嵌入对索引字段执行语义搜索。

您可以选择在查询中指定 filter 字段,以对 MongoDB 向量搜索 执行语义搜索的文档进行预过滤。要了解更多信息,请参阅MongoDB 向量搜索 过滤器。

您还可以选择检索结果中文档的分数。要学习,了解更多信息,请参阅MongoDB 向量搜索 Scoring。