当您的当前模型达到“旧版”或“已弃用”状态,或者新模型为您的使用案例提供更好的检索质量、延迟或费用时,请迁移到新的 Voyage AI嵌入模型。
不同模型生成的嵌入不具有可比性,因此迁移不仅仅涉及更改模型名称。始终使用后继模型为整个语料库重新生成嵌入,以便存储的向量和查询向量来自同一模型。
即使后继模型生成的嵌入与当前模型具有相同的维数和相同的元素类型,也要重新生成语料库。匹配的维度使两组向量在数学上具有可比性,但 Voyage AI模型并未经过训练以保持模型之间的相关性。将新模型的查询嵌入与旧模型的存储嵌入进行比较会降低检索质量,并削弱迁移到新模型的好处。
您执行的步骤取决于嵌入的生成方式:
嵌入方法 | 迁移步骤 |
|---|---|
自动嵌入 | |
自管理嵌入 |
确定后继模型
首先,在“当前模型状态”表中检查当前模型的状态。如果模型为“旧版”或“已弃用”,迁移到表中为该模型列出的推荐替代品。
要比较可用模型,请参阅模型概述。对于大多数迁移,请从以下推荐模型中选择后继模型:
代码。将
voyage-code-4用于代码检索和代理编码应用程序,例如编码代理和编程文档。要比较专门领域的模型,请参阅特定领域的模型。多式联运。使用
voyage-multimodal-3.5嵌入交错的文本和可视数据,例如 PDF 的屏幕截图、幻灯片、表格和图形。要学习;了解更多信息,请参阅多模态嵌入。
在这些模型中进行选择时,请考虑以下模型特征:
模态。迁移到支持与当前模型相同数据类型的模型。示例,从
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>" } ] }
当您更改 model、numDimensions 或 quantization 设置时, 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),然后验证检索结果。确认新索引返回预期结果后,删除旧索引并从文档中删除旧嵌入字段。