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

迁移到新的嵌入模型

当您当前的模型达到旧版或已弃用状态时,或当更新的模型为您的使用案例提供更好的检索质量、延迟或费用时,请迁移到新的 Voyage AI 嵌入模型。

不同模型生成的嵌入不具可比性,因此,迁移不仅仅涉及更改模型名称。必须使用后续模型重新生成整个语料库的嵌入,以便您存储的向量和查询向量来自同一模型。

即使后续模型产生的嵌入与当前模型具有相同的维度数和元素类型,也请重新生成语料库。相同的维度使两组向量在数学上可比较,但是 Voyage AI 模型没有训练以保持跨模型相关性。将来自新模型的查询嵌入与来自旧模型的存储嵌入进行比较,会降低检索质量,并削弱迁移到新模型的好处。

您遵循的步骤取决于您的嵌入是如何生成的:

嵌入方法
迁移步骤

自动嵌入

MongoDB Vector Search 会为您生成并存储嵌入内容。更改索引定义中的模型, MongoDB Vector Search 会重新嵌入您的数据。请参阅使用自动嵌入进行迁移。

自管理嵌入

您可以自行生成和存储嵌入。使用 Embedding and Reranking API重新嵌入语料库、更新应用程序并重建向量索引。请参阅迁移自管理的嵌入。

首先,在 当前模型状态 表中检查当前模型的状态。如果模型是旧版或已弃用,请迁移到该表格为该模型推荐的替代项。

要比较可用模型,请参阅 Voyage AI嵌入和重排序模型概述。对于大多数迁移,请从以下推荐模型中选择后继模型:

  • 通用文本。使用 voyage-4-large 可获得最佳检索质量,使用 voyage-4-lite 可获得最低延迟和费用,使用 voyage-4 可在质量和性能之间取得平衡。如要了解更多信息,请参阅文本嵌入。

  • 代码。将 voyage-code-4 用于代码检索和代理编码应用程序,例如编码代理和编程文档。要比较专用领域的模型,请参阅 专用领域模型。

  • 更长的文档。使用 voyage-context-4 来嵌入捕获完整文档上下文的数据块,无需手动元数据和上下文增强。检索质量在较长的文档上提升最大。它可充当标准嵌入的即插即用型替代品,并且无需更改下游工作流。要了解更多信息,请参阅 上下文相关的 数据块 嵌入。

  • 多模态。使用 voyage-multimodal-3.5 嵌入交错的文本和视觉数据,例如 PDF、演示文稿、表格和图片的截图。要学习;了解更多信息,请参阅多模态嵌入。

在选择这些模型时,请考虑以下模型特征:

  • 模态。迁移到支持与当前模型相同数据类型的模型。示例,从 voyage-multimodal-3 迁移到 voyage-multimodal-3.5,而不是迁移到仅含文本的模型。

  • 嵌入维度。请注意后继模型生成的维数。新的向量索引必须指定该值。

  • 上下文长度。比当前模型更短的上下文长度可能会截断最长的文档。在 Voyage AI嵌入和重排名模型概述中验证后继模型的上下文长度。

注意

voyage-4 系列模型的嵌入彼此兼容,这使得它们可以进行比较,但 Voyage AI 仍然建议您在它们之间迁移时重新生成语料库。

选择后续模型后,在迁移生产语料库之前,应在代表性示例数据上评估其检索质量。

如果您在 MongoDB 向量搜索中使用自动化嵌入,MongoDB 会为您托管迁移。编辑 MongoDB 向量搜索索引定义,并将 autoEmbed 类型字段定义中 model 字段的值更改为后续模型:

{
"fields": [
{
"type": "autoEmbed",
"modality": "text",
"path": "<field-name>",
"model": "<successor-model>"
}
]
}

当您更改 model、numDimensions 或 quantization 设置时,MongoDB 向量搜索会重新生成索引和嵌入,这会产生额外的嵌入费用。重建索引时,您可以使用旧索引定义继续运行查询。重建完成后,MongoDB 向量搜索会自动替换旧索引。

要学习;了解有关编辑索引的更多信息,请参阅编辑MongoDB Vector Search 索引。有关自动嵌入支持的模型,请参阅自动嵌入的模型。

注意

在自管理部署中,您在创建索引后无法修改 autoEmbed 类型字段。要迁移,请创建指定后续模型的新索引,然后删除旧索引。

如果您自行生成嵌入,请完成以下步骤以迁移到后续模型。为避免停机,将新的嵌入写入新字段,并保留现有字段和索引,直到迁移完成。

使用 Embedding and Reranking API 和后续模型为现有文档生成新的嵌入。如果没有模型 API 密钥,请参阅 创建 API 密钥。

以下示例从集合中的每个文档读取源文本,使用后续模型以批处理方式生成嵌入,并将结果写入新字段:

import os
import voyageai
from pymongo import MongoClient, UpdateOne
SUCCESSOR_MODEL = "<successor-model>"
TEXT_FIELD = "<source-text-field>"
NEW_EMBEDDING_FIELD = "<new-embedding-field>"
BATCH_SIZE = 100
vo = voyageai.Client()
# This automatically uses the VOYAGE_API_KEY environment variable.
client = MongoClient(os.environ["MONGODB_URI"])
collection = client["<database>"]["<collection>"]
def process_batch(documents):
texts = [document[TEXT_FIELD] for document in documents]
result = vo.embed(
texts,
model=SUCCESSOR_MODEL,
input_type="document"
)
collection.bulk_write([
UpdateOne(
{"_id": document["_id"]},
{"$set": {NEW_EMBEDDING_FIELD: embedding}}
)
for document, embedding in zip(documents, result.embeddings)
])
batch = []
for document in collection.find({}, {TEXT_FIELD: 1}):
batch.append(document)
if len(batch) == BATCH_SIZE:
process_batch(batch)
batch = []
if batch:
process_batch(batch)

批处理您的请求并监控令牌使用情况,因为重新嵌入大型语料库可能会耗尽您的速率限制。要了解更多信息,请参阅 管理限速 和 监控使用情况。

在包含您的新嵌入的字段上创建一个新的 MongoDB 向量搜索索引。将 numDimensions 设置为后续模型产生的维度数:

{
"fields": [
{
"type": "vector",
"path": "<new-embedding-field>",
"numDimensions": "<successor-model-dimensions>",
"similarity": "dotProduct"
}
]
}

要学习;了解如何创建索引,请参阅创建MongoDB Vector Search 索引。有关完整的索引定义语法,请参阅如何为向量搜索的字段编制索引。

请记住您为新索引命名的名称。在更新应用程序代码时需要它。请在索引达到 READY 状态后再查询。

更新您的应用程序,使用后续模型生成查询嵌入。您的查询嵌入必须与您存储的嵌入来自同一模型,因此请在应用程序调用 Embedding and Reranking API 的任何位置更改模型:

result = vo.embed(
[query_text],
model="<successor-model>",
input_type="query"
)

对于检索,将 input_type 参数设置为 query 用于查询,对于存储文本则设置为 document。Voyage AI 将任务专用提示前置到您的输入中,从而提高检索准确性。

如果您在配置文件或环境变量中设置了模型名称,请更新该值。还要更新任何依赖于嵌入维度数的代码,例如模式验证或向量存储设置。

更新查询以使用新索引名称和新嵌入字段路径(Field Path),然后验证检索结果。当您确认新索引返回了预期结果时,删除旧索引,并从文档中删除旧嵌入字段。

要了解更多关于生成嵌入,请参阅 文本嵌入。