現在のモデルが レガシー または 非推奨 のステータスに達した場合、または新しいモデルの方がユースケース の取得品質、レイテンシ、またはコスト が優れている場合は、新しい Vyage AI埋め込みモデルに移行します。
異なるモデルが生成する埋め込みは同等ではないため、移行にはモデル名を変更する以上のものが含まれます。保存されたベクトルとクエリベクトルが同じモデルから取得されるように、成功するモデルを使用してコレクション全体の埋め込みを常に再生成してください。
継承モデルが現在のモデルと同じ次元数と同じ要素型の埋め込みを生成する場合でも、コーパスを再生成します。次元を一致させると、2 つのベクトルセットは数学的に同等になりますが、投票AIモデルはモデル間の関連性を維持するように訓練されていません。新しいモデルのクエリ埋め込みと古いモデルの保存済み埋め込みを比較すると、検索の品質が低下し、新しいモデルに移行するメリットが減ります。
実行する手順は、埋め込みがどのように生成されるかによって異なります。
埋め込みメソッド | 移行ステップ |
|---|---|
自動埋め込み | MongoDB ベクトル検索 は埋め込みを生成して保存します。インデックス定義のモデルを変更すると、 MongoDB ベクトル検索 はデータを再埋め込みます。 「 自動埋め込みによる移行 」を参照してください。 |
自己管理型埋め込み | 埋め込みの生成と保存は自分で行います。埋め込みと再ランク付けAPIを使用して base を再埋め込み、アプリケーションを更新 し、ベクトルインデックスを再構築します 。 「 自己管理型埋め込みの移行 」を参照してください。 |
継承モデルの特定
まず、 現在のモデルのステータス 表で現在のモデルのステータスを確認します。モデルがレガシーまたは非推奨の場合は、そのモデルの表に記載されている推奨代替に移行します。
利用可能なモデルを比較するには、「 モデルの概要 」を参照してください。ほとんどの移行では、次の推奨モデルから継承を選択します。
汎用テキスト。最高の取得品質には
voyage-4-large、最低のレイテンシとコストにはvoyage-4-litevoyage-4、品質とパフォーマンスのバランスには を使用します。詳細については、「 テキスト埋め込み 」を参照してください。コード。コーディングエージェントやプログラミングドキュメントなど、コード検索とエージェント
voyage-code-4コーディング アプリケーションには を使用します。特殊ドメインのモデルを比較するには、「 ドメイン固有のモデル 」を参照してください。より長いドキュメント。手動メタデータやコンテキスト認証を行わずに完全なドキュメントコンテキストを取得するチャンクを埋め込むには、
voyage-context-4を使用します。検索品質は、長いドキュメントで最も 改善されます 。標準埋め込みのドロップイン置換として機能するため、下流のワークフローの変更は必要ありません。詳細については、「 コンテキスト付きチャンク埋め込み 」を参照してください。マルチモーダル。
voyage-multimodal-3.5PDF、スライド、表、数値のスクリーンショットなど、インターリーブされたテキストと視覚的なデータを埋め込むには、 を使用します。詳細については、「 マルチモーダル埋め込み 」を参照してください。
これらのモデルから選択する場合は、次のモデル特性を考慮してください。
モーダル。現在のモデルと同じデータ型をサポートするモデルに移行します。例、テキスト専用モデルではなく、
voyage-multimodal-3からvoyage-multimodal-3.5に移行します。コンテキストの長さ。現在のモデルよりもコンテキストの長さが短い場合、最も長いドキュメントが切り捨てられる可能性があります。 「 モデルの概要 」で、継承モデルのコンテキストの長さを確認します。
注意
voyage-4 シリーズ モデルからの埋め込みは相互に互換性があるため、同等になりますが、これらの間を移行するときに は、コレクションを再生成することを推奨します。
継承モデルを選択したら、本番環境のコンパスを移行する前に、独自のデータの一般的なサンプルでその取得品質を評価します。
自動埋め込みによる移行
MongoDB ベクトル検索で 自動埋め込み を使用する場合、 MongoDB が移行を管理します。 MongoDB ベクトル検索インデックスの定義を編集し、autoEmbed 型フィールド定義内の modelフィールドの値を継承モデルに変更します。
{ "fields": [ { "type": "autoEmbed", "modality": "text", "path": "<field-name>", "model": "<successor-model>" } ] }
model、numDimensions、または quantization 設定を変更すると、 MongoDB ベクトル検索 はインデックスと埋め込みを再生成し、埋め込みコストが追加されます。インデックスの再ビルド中も、古いインデックス定義に対してクエリを引き続き実行できます。再構築が完了すると、 MongoDB ベクトル検索 は古いインデックスを自動的に置き換えます。
インデックスの編集 の詳細については、 「 MongoDB ベクトル検索インデックスの編集 」を参照してください。自動埋め込みがサポートするモデルについては、「 自動埋め込みのモデル 」を参照してください。
注意
自己管理型配置では、インデックスを作成した後、autoEmbed 型フィールドを変更することはできません。移行するには、継承モデルを指定する新しいインデックスを作成し、古いインデックスを削除します。
自己管理型埋め込みの移行
埋め込みを自分で生成する場合は、継承モデルに移行するために次の手順を実行します。ダウンタイムを回避するには、新しい埋め込みを新しいフィールドに書き込み、移行が完了するまで既存のフィールドとインデックスをその場で保持します。
コレクションを再埋め込み
埋め込みと再ランク付け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 ベクトル検索インデックスの作成 」を参照してください。完全なインデックス定義構文については、 「ベクトル検索のフィールドにインデックスを作成する方法」 を参照してください。
新しいインデックスに付けた名前に注目してください。アプリケーションコードを更新するときに必要です。インデックスが READY ステータスに達するまで待ってからクエリを実行します。
アプリケーション コードの更新
アプリケーションを更新して、継承モデルでクエリ埋め込みを生成します。クエリ埋め込みは保存済み埋め込みと同じモデルから取得されている必要があるため、アプリケーションが埋め込みと再ランク付けAPIを呼び出すたびにモデルを変更します。
result = vo.embed( [query_text], model="<successor-model>", input_type="query" )
取得するには、input_type パラメータをクエリの場合は query に、保存されたテキストの場合は document に設定します。投票AI は、検索の精度を向上させるためにタスク固有のプロンプトを入力の先頭に追加します。
構成ファイルまたは環境変数でモデル名を設定している場合は、代わりにその値を更新してください。また、スキーマ検証やベクトルストレージ設定など、埋め込み次元の数に依存するコードも更新します。
新しいインデックス名と新しい埋め込みフィールドパスを使用するようにクエリを更新し、検索結果を検証します。新しいインデックスが期待どおりの結果を返すことを確認したら、古いインデックスを削除し、ドキュメントから古い埋め込みフィールドを削除します。
埋め込みの生成の詳細については、「 テキスト埋め込み 」を参照してください。