AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。

$rerank 集計パイプライン ステージ

$rerank

$rerank ステージは、Voyage AI の再ランクモデルを使用して入力ドキュメントの順序を変更し、クエリに対する関連性に基づいてソートされた同じドキュメントを返します。$rerank ステージは、集計パイプライン内のどこにでも表示できます。MongoDB は、$vectorSearch、$search、$rankFusion、または$scoreFusion ステージの後に $rerank を使用することをお勧めします。

$rerankパイプラインステージの構文は 次のとおり です。

{ "$rerank": { "query": { "text": "<query-text>" }, "path": "<text-field-name>", "numDocsToRerank": <number-of-documents-to-rerank>, "model": "<reranker-model>" }}

$rerankステージは、次のフィールドを持つドキュメントを取得します。

フィールド
タイプ
必要性
説明

query

オブジェクト

必須

再ランク付けに使用するクエリ。

query.
text

文字列

必須

再ランク付けに使用するクエリテキスト。例、以下のように指定できます。

  • 検索しているもの

  • ドキュメントのどのフィールドが最も関連性があるか

  • あいまいなクエリを明確にするための補完情報

path

文字列または複数の文字列の配列

必須

再ランク付けに使用するフィールドへのパス。$rerank が中間ステージである場合は、前のステージの結果からフィールドを指定します。

注: path で指定されたフィールドが存在しない場合、$rerank クエリは失敗します。前の $match ステージを使用して欠落しているドキュメントをフィルタリングで除外するか、$set を使用して欠落しているフィールドを "" に設定します。

numDocsToRerank

Int

必須

再ランク付けおよび結果で返されるために投票AIに送信するドキュメントの最大数。ドキュメントは、パイプラインに定義されたドキュメント順序に基づいて選択されます。

最大値は 1000 以下である必要があります。

model

オブジェクト

必須

ドキュメントを再ランクするために使用する Voyage AI モデル。値は次のいずれかのモデルになります。

  • rerank-3 最高精度の汎用リランカー。ほとんどのアプリケーションに推奨されます。

  • rerank-3-lite - レイテンシに敏感なアプリケーション向けに最適化された、高速でコスト効率の高いリランカー。

  • rerank-2.5 - 指示に従い、多言語をサポートすることで品質に最適化された一般的なリランカー。

  • rerank-2.5-lite - 指示に従い、多言語をサポートすることで、レイテンシと品質の両方を最適化した一般的なリランカー。

  • rerank-2 - レガシー モデル。

  • rerank-2-lite - レガシー モデル。

rerank-3 モデルと rerank-3-lite モデルはプレビュー機能として利用できます。また、MongoDB 9.0 以降を実行している専有クラスターが必要です。詳細を学ぶには、要件。を参照してください。

$rerank を使用する前に、要件、制限、$rerank の動作を確認してください。

$rerankを使用するには、次の手順です。

rerank-3 および rerank-3-lite モデルには、以下の追加要件があります。

  • クラスターは、MongoDB 9.0 以降を実行している専有クラスター(M10 以上)である必要があります。

これらのモデルのサポート状況については、「現在のモデルステータス」を学ぶ。

$rerank ステージは使用できません。

  • 自己管理型または Atlas Local 配置の場合。

  • $rankFusion または $scoreFusion 入力パイプライン用。

  • ビューに対するクエリの場合。

    View 上に MongoDB Search または MongoDB Vector Search インデックスがある場合は、View の代わりにソース コレクションで .aggregate() を実行してインデックスをクエリします。

  • クライアント側のフィールドレベル暗号化またはQueryable Encryptionを使用する場合。$rerank を含むパイプラインは、Unrecognized pipeline stage name: '$rerank' のようなエラーで失敗します。

    この制限は、暗号化されたフィールドがないコレクションを含むすべてのコレクション、および$unionWithなどのサブパイプライン内での$rerankの使用に適用されます。

rerank-3 モデルと rerank-3-lite モデルには、以下の追加の制限があります。

  • MongoDB 9.0以降を実行している専有クラスター(M10以上)でのみ利用可能です。

  • Free クラスター (M0) または Flex クラスターではまだ利用できません。

$rerank はパイプラインのどこにでも表示されます。ただし、MongoDBでは、既にソートされた順序で関連するドキュメントを返す$searchや$vectorSearchのようなステージの後に$rerankを使用することをお勧めします。

$rerank は再ランク付けされ、 ステージに渡される最初の numDocsToRerank ドキュメントを返します。$rerank が最初のステージであるか、その前のステージで明確にソートされた結果が返されない場合、$rerank に使用されるドキュメントはクエリ間で変更される可能性があります。

$rerank path で指定されたフィールドのいずれかが 1 つ以上の入力ドキュメントに存在しない場合、エラーが返されます。これを軽減するには、次のものを使用します。

  • $set ステージでは、不足しているフィールドを空のstringに設定します。

  • $match ステージでは、フィールドが不足しているドキュメントをフィルターします。

$rerank が強制するメモリ制限と、リクエストが制限を超えた場合に返されるエラーの詳細については、「$rerank リクエストがメモリ制限エラーで失敗する」を参照してください。

query.textフィールドは、リランカー モデルが各ドキュメントのスコアを計算する方法を決定します。指定されたVoyage リランカー モデルは、指定されたpathでクエリ テキストと各ドキュメントのコンテンツの間の関連度スコアを計算します。ほとんどのユースケースでは、$rerank.query.textを前の$searchまたは$vectorSearchステージのクエリと同じまたは類似したテキストに設定します。

score 変数と $meta 式を組み合わせて、$rerank ステージの結果内の各ドキュメントのスコアを取得します。

例: パイプラインへの Rerank スコアの追加

{ "$addFields": { "rerankScore": { "$meta": "score" } }}

$rerank ステージでは、$meta: "score" の値が新しいスコアに置き換えられます。$rankFusion のように先行するステージの値を保持するには、$rerank ステージの前の名前付きフィールドにスコアをプロジェクトします。

例: 前のステージのスコアを保持する

{ "$addFields": { "originalRankFusionScore": { "$meta": "score" } }},{ "$rerank": { ... }},{ "$addFields": { "rerankScore": { "$meta": "score" } }}

$rerank ステージは、再ランクするフィールド、再ランクするドキュメントの数、クエリ テキストなどの入力のサイズに応じて、計算コストが高くなる可能性があります。$rerank は、クエリ時にクエリとドキュメントを合わせて処理します。したがって、$rerank は、$search や $vectorSearch のインデックスなど、インデックスによる関連性検索よりも低速になる可能性があります。正確性とパフォーマンスのバランスを取るには、numDocsToRerank と path を構成して入力サイズを制限します。$rerank は、Atlas クラスター リソース上で Voyage AI 再ランクモデルを実行しません。

$rerank RAG やエージェント AI アプリケーションなど、超低レイテンシが優先されるよりも取得品質が優先されるワークロードに最適です。超低レイテンシが必要なワークロードの場合、MongoDB は $search や $vectorSearch のようなインデックスを利用した検索ステージの使用をお勧めします。

次の例は、$rerank ステージを使用して、Vyage AIリランクモデルに基づいて sample_mflix.embedded_moviesコレクション内のドキュメントを順序付けする方法を示しています。クエリは、$matchステージの後に $rerank を使用して、rerank-2.5 リランク モデルを使用してドキュメントを並べ替えます。次の集計パイプラインでは、 は次のようになります。

  • $match ステージでは、ドキュメントをフィルタリングして、plotフィールドが string 型のドキュメントのみを含めます。

  • $sort ステージでは、ドキュメントを releasedフィールドの降順でソートし、確実な順序付けを確保します。

  • $rerank ステージでは、rerank-2.5 リランク モデルを使用して、クエリに一致するようにドキュメントが並べ替えられます。

  • $addFields ステージはドキュメントに rerankScore という名前のフィールドを追加します。

db.embedded_movies.aggregate([ { "$match": { "plot": { "$exists": true, "$type": "string" } } }, { "$sort": { "released": -1 } }, { "$rerank": { "model": "rerank-2.5", "query": { "text": "a group of heroes band together to stop a powerful enemy and save the world" }, "numDocsToRerank": 100, "path": ["title", "plot"] } }, { "$addFields": { "rerankScore": { "$meta": "score" } } }, { "$limit": 10 }, { "$project": { "_id": 0, "title": 1, "plot": 1, "rerankScore": 1 } }])