对于 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-multimodal-3 迁移到voyage-multimodal-3.5 ,而不是迁移到纯文本模型。

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

  • 上下文长度。比当前模型更短的上下文长度可能会截断最长的文档。在模型概述中验证后继模型的上下文长度。

注意

voyage-4 系列模型的嵌入相互兼容,因此具有可比性,但 Voyage AI仍然建议您在这些模型之间迁移时重新生成语料库。

选择后继模型后,请在迁移生产语料库之前使用自己数据的代表性示例评估其检索质量。

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

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

当您更改 modelnumDimensionsquantization 设置时, MongoDB Vector Search 会重新生成索引和嵌入,从而产生额外的嵌入成本。重建索引时,您可以继续对旧索引定义运行查询。重建完成后, MongoDB Vector Search 会自动替换旧索引。

要学习;了解有关编辑索引的更多信息,请参阅编辑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 Vector Search索引。将 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),然后验证检索结果。确认新索引返回预期结果后,删除旧索引并从文档中删除旧嵌入字段。

要学习;了解有关生成嵌入的更多信息,请参阅文本嵌入。