当您当前的模型达到旧版或已弃用状态时,或当更新的模型为您的使用案例提供更好的检索质量、延迟或费用时,请迁移到新的 Voyage AI 嵌入模型。
不同模型生成的嵌入不具可比性,因此,迁移不仅仅涉及更改模型名称。必须使用后续模型重新生成整个语料库的嵌入,以便您存储的向量和查询向量来自同一模型。
即使后续模型产生的嵌入与当前模型具有相同的维度数和元素类型,也请重新生成语料库。相同的维度使两组向量在数学上可比较,但是 Voyage AI 模型没有训练以保持跨模型相关性。将来自新模型的查询嵌入与来自旧模型的存储嵌入进行比较,会降低检索质量,并削弱迁移到新模型的好处。
您遵循的步骤取决于您的嵌入是如何生成的:
嵌入方法 | 迁移步骤 |
|---|---|
自动嵌入 | |
自管理嵌入 |
确定后续模型
首先,在 当前模型状态 表中检查当前模型的状态。如果模型是旧版或已弃用,请迁移到该表格为该模型推荐的替代项。
要比较可用模型,请参阅 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),然后验证检索结果。当您确认新索引返回了预期结果时,删除旧索引,并从文档中删除旧嵌入字段。
要了解更多关于生成嵌入,请参阅 文本嵌入。