注意
自動埋め込みは、Kubernetes クラスターの mongot のプレビューです。機能および関連するドキュメントは、プレビュー期間中にいつでも変更される可能性があります。詳細については、「プレビュー機能」を参照してください。
このページでは、ベクトル検索の Kubernetes 配置で自動埋め込みを構成する方法について説明します。ベクトル検索の自動埋め込み機能は、インデックス時にテキストデータのベクトル埋め込みを生成し、クエリ時にクエリテキストのベクトル埋め込みを生成します。したがって、アプリケーションで別の埋め込みパイプラインを維持する必要はありません。
このチュートリアルは、セマンティック検索または RAG 機能を構築している開発者で、埋め込みを管理するために mongot を使用したいと考えている開発者向けです。
自動埋め込みの機能
自動埋め込みを使用しない場合、アプリケーションは次のことを行います。
挿入または更新する各ドキュメントの埋め込みを生成します。
この埋め込みをコレクション内のドキュメントと一緒に保存します。
クエリ時に同じモデルを使用して、すべてのクエリの埋め込みを生成します。
クエリ埋め込みを
$vectorSearchに提出します。
自動埋め込み機能では、mongotプロセスが1、2、および3のステップを取り扱います。アプリケーション:
テキスト フィールドに
autoEmbedフィールド タイプのベクトル検索インデックスを構成します。ドキュメントの挿入と更新は通常どおりです。次に、
mongotはテキスト フィールドを読み取り、構成された埋め込みモデルを使用して埋め込みを生成して保存します。事前計算された埋め込みではなく、クエリテキストで
$vectorSearchのクエリを発行します。その後、mongotはクエリテキストの埋め込みを生成します。
サポートされている埋め込みプロバイダー
自己管理型 mongot 自動埋め込みは、Voyage AI 埋め込みモデルと統合されています。
モデル | 説明 |
|---|---|
| 大規模でコストに敏感なアプリケーション。 |
| 推奨。一般的なテキスト検索のバランスの取れたパフォーマンス。 |
| 複雑なセマンティック関係の最大精度。 |
| コード検索と技術ドキュメントに特殊化されています。 |
埋め込み生成にはコストが発生します。詳しくは、自動埋め込みの請求を管理する を参照してください。
前提条件
mongotKubernetes 配置では1.70.1以降です。MongoDB 8.3以降。
ふたつの Voyage AI API キーズ。
インデックス時の埋め込み生成用とクエリ時間用の 2 つの別々のキーを使用します。別々のキーにより、クエリワークロードがインデックスワークロードから分離され、独立したレート制限の計算が可能になります。詳細については、「レート制限」を参照してください。
mongotから埋め込みエンドポイントとなる接続されたデバイスへのアウトバウンド ネットワーク アクセス。デフォルトのエンドポイントとなる接続されたデバイスは
https://ai.mongodb.com/v1/embeddingsです。これは Atlas UI を使用して生成されたキーに対して、MongoDB マネージドの請求で Voyage AI のプロキシを実行します。Voyage AI から直接 API キーを生成した場合は、Voyage AI への直接アクセスにhttps://api.voyageai.com/v1/embeddingsを使用することもできます。
投票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/v1kind: MongoDBSearchmetadata: name: mdbsspec: # ... autoEmbedding: embeddingModelAPIKeySecret: name: voyage-api-keysオプションで、mongot が使用する埋め込みエンドポイントを上書きするには、spec.autoEmbedding.providerEndpoint を設定します。このフィールドを省略すると、mongot は組み込みのデフォルトエンドポイントとなる接続されたデバイス https://ai.mongodb.com/v1/embeddings を使用します。詳細については、MongoDBSearch リソース仕様を参照してください。
自動埋め込みのインデックスの作成
mongot を Voyage AI の API キーで構成した後、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 エンドポイントに接続できない場合、新しいドキュメントのインデックスの作成が停滞します。