Compartilhar via


Busca em Vetores no Azure Cosmos DB for NoSQL (versão prévia)

O Azure Cosmos DB for NoSQL agora dá suporte a uma poderosa funcionalidade de pesquisa híbrida que combina a Busca em Vetores com a pontuação de Pesquisa de Texto Completo (BM25) usando a função RRF (Reciprocal Rank Fusion).

Observação

A Pesquisa de Texto Completo e Híbrida está em visualização antecipada e pode não estar disponível em todas as regiões no momento.

A pesquisa híbrida aproveita os pontos fortes dos métodos de pesquisa baseados em palavra-chave tradicionais e baseados em vetor para fornecer resultados de pesquisa mais relevantes e precisos. A pesquisa híbrida é fácil de fazer no Azure Cosmos DB for NoSQL devido à capacidade de armazenar metadados e vetores no mesmo documento.

A pesquisa híbrida no Azure Cosmos DB for NoSQL integra duas metodologias de pesquisa distintas:

  • Busca em Vetores: utiliza modelos de machine learning para entender o significado semântico de consultas e documentos. Isso permite resultados de pesquisa com mais nuances e reconhecimento de contexto, especialmente úteis para consultas complexas em que a pesquisa de palavra-chave tradicional pode ficar aquém.
  • Pesquisa de texto completo (BM25): um algoritmo bem estabelecido que pontua documentos com base na presença e frequência de palavras e termos. O BM25 é particularmente eficaz para pesquisas de palavras-chave simples, fornecendo uma linha de base robusta para relevância de pesquisa.

Os resultados da busca em vetores e da pesquisa de texto completo são combinados usando a função RRF (Reciprocal Rank Fusion). O RRF é um método de agregação de classificação que mescla as classificações de vários algoritmos de pesquisa para produzir uma única classificação unificada. Isso garante que os resultados finais da pesquisa se beneficiem dos pontos fortes das abordagens de pesquisa e ofereçam vários benefícios.

  • Relevância Aprimorada: combinando a compreensão semântica com a correspondência de palavras-chave, a pesquisa híbrida fornece resultados mais relevantes para uma ampla gama de consultas.
  • Precisão Aprimorada: a função RRF garante que os resultados mais pertinentes de ambos os métodos de pesquisa sejam priorizados.
  • Versatilidade: adequado para vários casos de uso, incluindo Recuperação de Geração Aumentada (RAG) para melhorar as respostas geradas por uma LLM baseada em seus próprios dados.
  1. Habilite o recurso busca em vetores no Azure Cosmos DB for NoSQL.
  2. Habilite a versão prévia do recurso de Texto Completo e Pesquisa Híbrida para NoSQL.
  3. Crie um contêiner com uma política de vetor, uma política de texto completo, um índice de vetor e um índice de texto completo.
  4. Insira seus dados com as propriedades de texto e vetor.
  5. Execute consultas híbridas nos dados.

Importante

Atualmente, as políticas de vetor e os índices de vetor são imutáveis após a criação. Para fazer alterações, crie uma nova coleção.

Uma política de vetor de exemplo

{
   "vectorEmbeddings": [
       {
           "path":"/vector",
           "dataType":"float32",
           "distanceFunction":"cosine",
           "dimensions":3
       },

}

Uma política de texto completo de exemplo

{
    "defaultLanguage": "en-US",
    "fullTextPaths": [
        {
            "path": "/text",
            "language": "en-US"
        }
    ]
}

Uma política de indexação de exemplo com índices de texto completo e vetor

{
    "indexingMode": "consistent",
    "automatic": true,
    "includedPaths": [
        {
            "path": "/*"
        }
    ],
    "excludedPaths": [
        {
            "path": "/\"_etag\"/?"
        },
        {
            "path": "/vector/*"
        }
    ],
    "fullTextIndexes": [
        {
            "path": "/text"
        }
    ],
    "vectorIndexes": [
        {
            "path": "/vector",
            "type": "DiskANN"
        }
    ]
}

Consultas de pesquisa híbrida

Consultas de pesquisa híbrida podem ser executadas aproveitando a função RRF do sistema em uma cláusula ORDER BY RANK que inclui uma função VectorDistance e FullTextScore. Por exemplo, uma consulta parametrizada para localizar os k principais resultados mais relevantes seria semelhante a:

SELECT TOP @k *
FROM c
ORDER BY RANK RRF(VectorDistance(c.vector, @queryVector), FullTextScore(c.content, [@searchTerm1, @searchTerm2, ...]))

Suponha que você tenha um documento que tenha inserções de vetor armazenadas em cada documento na propriedade c.vector e nos dados de texto contidos na propriedade c.text. Para obter os 10 documentos mais relevantes usando a pesquisa híbrida, a consulta pode ser gravada como:

SELECT TOP 10 * 
FROM c
ORDER BY RANK RRF(VectorDistance(c.vector, [1,2,3]), FullTextScore(c.text, ["text", "to", "search", "goes" ,"here])