注意
自動埋め込みは、Kubernetes クラスターの mongot のプレビューです。機能および関連するドキュメントは、プレビュー期間中にいつでも変更される可能性があります。詳細については、「プレビュー機能」を参照してください。
このページでは、ベクトル検索の Kubernetes 配置で自動埋め込みを構成する方法について説明します。ベクトル検索の自動埋め込み機能は、インデックス時にテキストデータのベクトル埋め込みを生成し、クエリ時にクエリテキストのベクトル埋め込みを生成します。したがって、アプリケーションで別の埋め込みパイプラインを維持する必要はありません。
このチュートリアルは、セマンティック検索またはRAG機能を構築しており、埋め込みを管理するためにmongotを必要としている開発者向けです。
自動埋め込みの機能
自動埋め込みを使用しない場合、アプリケーションは次のことを行います。
挿入または更新する各ドキュメントの埋め込みを生成します。
この埋め込みをコレクション内のドキュメントと一緒に保存します。
クエリ時に同じモデルを使用して、すべてのクエリの埋め込みを生成します。
クエリ埋め込みを
$vectorSearchに提出します。
自動埋め込み機能では、mongotプロセスが1、2、および3のステップを取り扱います。アプリケーション:
テキスト フィールドに
autoEmbedフィールド タイプのベクトル検索インデックスを構成します。ドキュメントの挿入と更新は通常どおりです。次に、
mongotはテキスト フィールドを読み取り、構成された埋め込みモデルを使用して埋め込みを生成して保存します。事前計算された埋め込みではなく、クエリテキストで
$vectorSearchのクエリを発行します。その後、mongotはクエリテキストの埋め込みを生成します。
サポートされている埋め込みプロバイダー
自己管理型 mongot 自動埋め込みは、Voyage AI 埋め込みモデルと統合されています。
モデル | 説明 |
|---|---|
| 大規模でコストに敏感なアプリケーション。 |
| 推奨。一般的なテキスト検索のバランスの取れたパフォーマンス。 |
| 複雑なセマンティック関係の最大精度。 |
| コード検索と技術ドキュメントに特殊化されています。 |
埋め込み生成にはコストが発生します。詳しくは、自動埋め込みの請求を管理する を参照してください。
前提条件
mongotKubernetes 配置では1.70.1以降です。MongoDB 8.2以降。
2 つの Voyage AI API キー。
インデックス時の埋め込み生成用とクエリ時間用の 2 つの別々のキーを使用します。別々のキーにより、クエリワークロードがインデックスワークロードから分離され、独立したレート制限の計算が可能になります。詳細については、「レート制限」を参照してください。
mongotから埋め込みエンドポイントとなる接続されたデバイスへのアウトバウンド ネットワーク アクセス。デフォルトの**エンドポイントとなる接続されたデバイス**は
https://ai.mongodb.com/v1/embeddingsです。これは Atlas UI を使用して生成されたキーのために、MongoDB マネージドの課金で Voyage AI のプロキシを実行します。Voyage AI から直接 API キーを生成した場合は、https://api.voyageai.com/v1/embeddingsを使用して Voyage AI に直接アクセスすることもできます。
Voyage AI API キーを生成する
Voyage AI API キーは、次のいずれかのパスを使用して生成できます。
(推奨)Atlas アカウントを使用します。Atlas は、組み込みのレート制限構成とともに API キーのマネジメントを提供します。キーは Atlas クラスターに結び付けられていません。詳しくは、「API キーの管理」を参照してください。
Voyage AI を通じて、voyageai.comで直接。
例えば mongot-prod-index と mongot-prod-query のように、2 つのキーを生成し、分かりやすい名前を付けます。キーはセキュアシークレットストレージに保存します。
自動埋め込みのために mongot を設定する
両方のキーを含む Kubernetes secret を作成します。
kubectl create secret generic voyage-api-keys \ --from-literal=indexing-key=<your-index-key> \ --from-literal=query-key=<your-query-key> \ --namespace=<your-namespace>
MongoDBSearch カスタムリソースから参照します。
apiVersion: mongodb.com/v1 kind: MongoDBSearch metadata: name: mdbs spec: # ... autoEmbedding: embeddingModelAPIKeySecret: name: voyage-api-keys
オプションで、mongot が使用する埋め込みエンドポイントを上書きするには、spec.autoEmbedding.providerEndpoint を設定します。このフィールドを省略すると、mongot は組み込みのデフォルトエンドポイントとなる接続されたデバイス https://ai.mongodb.com/v1/embeddings を使用します。詳細については、MongoDBSearch リソース仕様を参照してください。
自動埋め込みのインデックスの作成
Voyage AI APIキーでmongotを構成した後、autoEmbedフィールドタイプを使用するベクトル検索インデックスを定義します。インデックス定義には、mongotが埋め込むテキストフィールド、使用するモデル、インデックスの作成方法、量子化、その他のパラメータが指定されます。autoEmbedインデックス定義の詳細については、MongoDBベクトル検索インデックスフィールドを参照してください。
kubectl exec --context "${K8S_CTX}" -n "${MDB_NS}" mongodb-tools-pod -- \ mongosh --quiet "${MDB_CONNECTION_STRING}" \ --eval "use sample_mflix" \ --eval 'db.movies.createSearchIndex("vector_auto_embed_index", "vectorSearch", { "fields": [ { "type": "autoEmbed", "modality": "text", "path": "plot", "model": "'"${EMBEDDING_MODEL}"'", "numDimensions": 1024, "similarity": "cosine", "quantization": "scalar", "indexingMethod": "hnsw", "hnswOptions": { "maxEdges": 16, "numEdgeCandidates": 200 } } ] });'
次の表では、autoEmbed インデックス定義フィールドを説明しています。
フィールド | 目的 |
|---|---|
| フィールドを自動埋め込みの対象としてマークします。 |
| データ モダリティ。 |
| 埋め込むコレクションのフィールド。 |
| Voyage AI モデル名。モデルは、API キーでアクセスできるものである必要があります。 |
| 埋め込みベクトルの次元数。モデルによって、サポートされる次元が決定されます。 |
| ベクトル検索に使用する類似度関数。サポートされている関数は |
| 使用するインデックスの作成方法。サポートされている方法は |
| (任意) HNSW インデックスオプション。 |
| (任意)使用する量子化の種類。サポートされているタイプは |
同じインデックスで autoEmbed フィールドと filter フィールドを混合することができます。同じパス上で autoEmbed と生のベクトル フィールドを混合することはできません。
自動埋め込みクエリを実行する
事前計算された埋め込みではなく、クエリテキストを提出します。mongotがクエリ埋め込みを生成します。
kubectl exec --context "${K8S_CTX}" -n "${MDB_NS}" mongodb-tools-pod -- \ mongosh --quiet "${MDB_CONNECTION_STRING}" \ --eval "use sample_mflix" \ --eval 'db.movies.aggregate([ { $vectorSearch: { index: "vector_auto_embed_index", path: "plot", query: "spy thriller", numCandidates: 150, limit: 10 } }, { $project: { _id: 0, plot: 1, title: 1, score: { $meta: "vectorSearchScore" } } }]);'
詳細については、「ベクトル検索クエリの実行」を参照してください。
埋め込みストレージ
mongot Kubernetes クラスター上の専用の内部データベースに埋め込みを持続します。mongot は、ソース コレクションに埋め込みを保存しません。mongot は、ソース テキストから埋め込みを再生成できますが、埋め込み生成には料金が発生します。
埋め込みモデル、出力ディメンジョン、または量子化の変更により、影響を受けるインデックスの完全な再埋め込みがtriggerされます。再生成には課金が発生します。詳細については、「mongotが埋め込みを再生成するとき」を参照してください。
詳細については、「生成された埋め込みコレクション」を参照してください。
mongot が埋め込みを再生成するとき
mongot 次のいずれかが発生した場合、autoEmbed フィールドの埋め込みを再生成します。
ドキュメントを挿入します。
ドキュメントの埋め込みフィールドを変更します。
mongotは、変更ストリームを介して変更を検出します。インデックス定義で埋め込みモデルを変更します。
埋め込み出力の次元またはデータ型を変更します。
テキストフィールドパスを変更します。
最後の3つの項目のいずれかを変更すると、mongotはインデックス全体をゼロから再構築します。再構築は大規模なコレクションにとっては高コストになる可能性があります。モデルの変更は慎重に計画します。
コストとレート制限
MongoDB では、モデル固有の料金で 100 万トークンごとに課金されます。インデックスの作成コストは、コレクション全体のインデックスフィールドの合計テキスト量に比例します。クエリコストは、クエリテキストの量に比例します。
Atlas アカウントを使用して作成した Voyage AI API キーを使用する場合は、Atlas UI で API キーの使用状況とレート制限を表示できます。詳しくは、Embedding and Reranking API の請求を管理するを参照してください。Voyage AI から直接作成されたキーを使用する場合は、Voyage AI ダッシュボードで使用状況とレート制限をモニターする必要があります。
Voyage AI 側のレート制限エラーは、mongot ログと、影響を受けたインデックスの失敗したドキュメント指示子として表示されます。これらのエラーによってインデックスが無効になることはありませんが、新しいドキュメントのインデックスの作成が遅延する可能性があります。
失敗モード
シンボリック | 考えられる原因 |
|---|---|
インデックスは数分間を過ぎても |
|
インデックスの遅延が断続的に発生します。 | Voyage AI側のレート制限。レート制限を引き上げるか、インデックスの作成時の埋め込みの負荷を軽減します。 |
インデックスに対するクエリは、埋め込みに関するエラーを返します。 | クエリ API キーが無効です、または有効期限が切れています。 |
インデックスに対するすべてのクエリは空の結果を返します。 | インデックスが再構築され、コーパスの再埋め込みが続行している可能性があります。 |
制限
プレビューステータス。自動埋め込みが一般提供される前に、構成の形状、サポートされるモデル、およびデフォルトのエンドポイントが変更される可能性があります。
フィールドごとに 1 つの埋め込みモデル。混合モデル インデックスはサポートされていません。
埋め込みモデルのフェイルオーバーはありません。Voyage AI エンドポイントに接続できない場合、新しいドキュメントのインデックスの作成が停滞します。