Para agentes de IA: um índice de documentação está disponível em https://www.mongodb.com/pt-br/docs/llms.txt — as versões de markdown de todas as páginas estão disponíveis anexando .md a qualquer caminho de URL.

$rerank Estágio do pipeline de agregação

$rerank

O estágio $rerank reordena os documentos de entrada usando os modelos de reclassificação do Voyage AI e retorna os mesmos documentos classificados por relevância para a query. O estágio $rerank pode aparecer em qualquer lugar em um pipeline de agregação. O MongoDB recomenda que você use $rerank após um estágio $vectorSearch, $search, $rankFusion ou $scoreFusion.

Um estágio de pipeline do $rerank tem a seguinte sintaxe:

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

O estágio $rerank recebe um documento com os seguintes campos:

Campo
Tipo
necessidade
Descrição

query

Objeto

Obrigatório

Query a ser usada para reclassificação.

query.
text

String

Obrigatório

Texto da query a ser usado para reclassificação. Por exemplo, você pode especificar:

  • O que você está procurando

  • Quais campos de um documento são mais relevantes

  • Informações complementares para esclarecer queries ambíguas

path

string ou matriz de strings

Obrigatório

Caminho para os campos a serem usados na reclassificação. Se $rerank for um estágio intermediário, especifique um campo a partir dos resultados do estágio anterior.

NOTA: a query $rerank falhará se os campos especificados em path não existirem. Use um estágio $match anterior para filtrar documentos com campos ausentes ou use $set para definir campos ausentes como "".

numDocsToRerank

Int

Obrigatório

Número máximo de documentos a serem enviados à IA do Voyage para reclassificação e retorno nos resultados. Os documentos são selecionados com base na ordem dos documento definida para o pipeline.

O valor máximo deve ser menor ou igual a 1000.

model

Objeto

Obrigatório

Voyage AI modelo para usar para reclassificar os documentos. O valor pode ser um dos seguintes modelos:

  • rerank-3 - O reranker generalista de maior precisão. Recomendado para a maioria dos aplicativo.

  • rerank-3-lite - Reranker rápido e econômico, otimizado para aplicativos sensíveis à latência.

  • rerank-2.5 - Reclassificação generalista otimizada para qualidade com suporte a instruções e multilíngue.

  • rerank-2.5-lite - Reclassificação generalista otimizada para latência e qualidade com acompanhamento de instruções e suporte multilíngue.

  • rerank-2 - Modelo legado.

  • rerank-2-lite - Modelo legado.

Os modelos rerank-3 e rerank-3-lite estão disponíveis como um recurso de pré-visualização e exigem um cluster dedicado executando o MongoDB 9.0 ou posterior. Para aprender mais, consulte Requisitos.

Revise os requisitos, limitações e o comportamento $rerank antes de usar $rerank.

Para usar $rerank:

Os modelos rerank-3 e rerank-3-lite têm os seguintes requisitos adicionais:

  • Seu cluster deve ser um cluster dedicado (M10 ou superior) executando o MongoDB 9.0 ou posterior.

Para aprender sobre o status de suporte desses modelos, consulte Status atual do modelo.

Você não pode usar o estágio $rerank:

  • Para implantações autogerenciadas ou Atlas Local.

  • Para $rankFusion ou $scoreFusion pipeline de entrada.

  • Para query em uma View.

    Se você tiver um índice MongoDB Search ou MongoDB pesquisa vetorial em uma View, consulte o índice executando .aggregate() na coleção de origem em vez da View.

  • Com a criptografia no nível do campo do lado do cliente ou a Queryable Encryption. Um pipeline que contém $rerank falha com um erro como Unrecognized pipeline stage name: '$rerank'.

    Essa limitação se aplica a todas as coleção, incluindo coleção que não têm campo criptografado, e ao uso de $rerank dentro de sub-pipeline, como $unionWith.

Os modelos rerank-3 e rerank-3-lite têm as seguintes limitações adicionais:

  • Disponível apenas em cluster dedicado (M10 ou superior) executando o MongoDB 9.0 ou posterior.

  • Ainda não disponível em clusters gratuitos (M0) ou clusters Flex.

$rerank pode aparecer em qualquer lugar no pipeline. No entanto, o MongoDB recomenda usar $rerank após um estágio como $search ou $vectorSearch que já retorna documentos relevantes em ordem classificada.

$rerank reclassifica e retorna os primeiros numDocsToRerank documentos que são passados para o estágio. Se $rerank for o primeiro estágio, ou se os estágios anteriores não retornarem resultados classificados deterministicamente, os documentos usados para $rerank poderão mudar entre as queries.

$rerank retorna um erro se algum dos campos especificados em path não estiver presente em um ou mais documentos de entrada. Para mitigar isso, use o:

  • $set estágio para definir campos ausentes como uma string vazia.

  • $match estágio para filtrar documentos onde os campos estão ausentes.

Para aprender mais sobre os limites de memória que o $rerank força e os erros que ele retorna quando uma solicitação excede um limite, consulte A solicitação $rerank falha com um erro de limite de memória.

O campo query.text determina como o modelo de reranker pontua cada documento. O modelo de reranker Voyage especificado calcula uma pontuação de relevância entre o texto da query e o conteúdo de cada documento no path especificado. Para a maioria dos casos de uso, defina $rerank.query.text como o mesmo texto ou texto semelhante à query do estágio $search ou $vectorSearch anterior.

Use a variável score com a expressão $meta para recuperar a pontuação de cada documento nos resultados do estágio $rerank.

Exemplo: adicionar pontuação de reclassificação ao pipeline

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

O estágio $rerank substitui o valor de $meta: "score" por uma nova pontuação. Para preservar o valor de um estágio anterior como $rankFusion, você pode projeto as pontuações em campos nomeados antes do estágio $rerank.

Exemplo: Preservar pontuação do estágio anterior

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

O estágio $rerank pode ser computacionalmente caro, dependendo do tamanho da entrada, como os campos para reclassificar, o número de documentos para reclassificar e o texto da query. $rerank processa queries e documentos em conjunto no momento da query. Portanto, $rerank pode ser mais lento do que a pesquisa de relevância alimentada por um índice, como os índices para $search ou $vectorSearch. Para equilibrar a precisão e o desempenho, configure numDocsToRerank e path para limitar o tamanho da entrada. $rerank não executa modelos de reclassificação do Voyage AI nos recursos do cluster Atlas.

$rerank é mais adequado para cargas de trabalho em que a qualidade de recuperação é priorizada em relação à latência ultrabaixa, como RAG e aplicativos de IA agentic. Para cargas de trabalho que exigem latência ultrabaixa, o MongoDB recomenda usar um estágio de pesquisa baseado em índice, como $search ou $vectorSearch.

O exemplo a seguir demonstra como usar o estágio $rerank para reordenar documentos na coleção sample_mflix.embedded_movies com base em um modelo de reclassificação do Voyage AI. A query usa $rerank após o estágio $match para reordenar documentos usando o modelo de reclassificação rerank-2.5. No seguinte pipeline de agregação ,:

  • $match O estágio filtra os documentos para incluir somente documentos que tenham um campo plot do tipo string.

  • $sort O estágio classifica os documentos em ordem decrescente do campo released para garantir a ordem determinística.

  • $rerank o estágio reordena os documentos para corresponder à query usando o modelo de reclassificação rerank-2.5.

  • $addFields estágio adiciona um campo chamado rerankScore aos documentos.

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 } }])