Partilhar via


Pesquisa vetorial no Azure Cosmos DB para NoSQL (visualização)

APLICA-SE A: NoSQL

O Azure Cosmos DB para NoSQL agora oferece indexação vetorial e pesquisa na visualização. Este recurso é projetado para lidar com vetores de alta dimensão, permitindo uma pesquisa vetorial eficiente e precisa em qualquer escala. Agora você pode armazenar vetores diretamente nos documentos ao lado de seus dados. Cada documento em seu banco de dados pode conter não apenas dados tradicionais sem esquema, mas também vetores de alta dimensão como outras propriedades dos documentos. Esta colocalização de dados e vetores permite uma indexação e pesquisa eficientes, uma vez que os vetores são armazenados na mesma unidade lógica que os dados que representam. Manter vetores e dados juntos simplifica o gerenciamento de dados, as arquiteturas de aplicativos de IA e a eficiência das operações baseadas em vetores.

O Azure Cosmos DB para NoSQL oferece a flexibilidade que oferece na escolha do método de indexação vetorial:

  • Uma busca exata de vizinhos "planos" ou k-mais próximos (às vezes chamada de força bruta) pode fornecer 100% de recuperação para buscas vetoriais menores e focadas. especialmente quando combinado com filtros de consulta e chaves de partição.
  • Um índice plano quantizado que comprime vetores usando métodos de quantização baseados em DiskANN para melhor eficiência na pesquisa kNN.
  • DiskANN, um conjunto de algoritmos de indexação vetorial de última geração desenvolvidos pela Microsoft Research para realizar pesquisas vetoriais eficientes e de alta precisão em qualquer escala.

Saiba mais sobre indexação vetorial aqui

A pesquisa vetorial no Azure Cosmos DB pode ser combinada com todos os outros filtros e índices de consulta NoSQL do Azure Cosmos DB com suporte usando WHERE cláusulas. Isso permite que suas pesquisas vetoriais sejam os dados mais relevantes para seus aplicativos.

Esse recurso aprimora os principais recursos do Azure Cosmos DB, tornando-o mais versátil para lidar com dados vetoriais e requisitos de pesquisa em aplicativos de IA.

O que é um repositório vetorial?

Um repositório vetorial ou banco de dados vetorial é um banco de dados projetado para armazenar e gerenciar incorporações vetoriais, que são representações matemáticas de dados em um espaço de alta dimensão. Neste espaço, cada dimensão corresponde a uma característica dos dados, e dezenas de milhares de dimensões podem ser usadas para representar dados sofisticados. A posição de um vetor neste espaço representa suas características. Palavras, frases ou documentos inteiros, imagens, áudio e outros tipos de dados podem ser vetorizados.

Como funciona uma loja vetorial?

Em um repositório vetorial, algoritmos de pesquisa vetorial são usados para indexar e consultar incorporações. Alguns algoritmos de pesquisa vetorial bem conhecidos incluem Hierarchical Navigable Small World (HNSW), Inverted File (IVF), DiskANN, etc. A pesquisa vetorial é um método que ajuda você a encontrar itens semelhantes com base em suas características de dados, em vez de correspondências exatas em um campo de propriedade. Esta técnica é útil em aplicações como procurar texto semelhante, encontrar imagens relacionadas, fazer recomendações ou até mesmo detetar anomalias. Ele é usado para consultar as incorporações vetoriais de seus dados que você criou usando um modelo de aprendizado de máquina usando uma API de incorporação. Exemplos de APIs de incorporação são Azure OpenAI Embeddings ou Hugging Face on Azure. A pesquisa vetorial mede a distância entre os vetores de dados e o vetor de consulta. Os vetores de dados mais próximos do vetor de consulta são os mais semelhantes semanticamente.

No Banco de Dados Vetorial Integrado no Azure Cosmos DB para NoSQL, as incorporações podem ser armazenadas, indexadas e consultadas junto com os dados originais. Essa abordagem elimina o custo extra de replicar dados em um banco de dados vetorial puro separado. Além disso, essa arquitetura mantém as incorporações vetoriais e os dados originais juntos, o que facilita melhor as operações de dados multimodais e permite maior consistência, escala e desempenho dos dados.

Inscrever-se no recurso de visualização de pesquisa vetorial

A pesquisa vetorial do Azure Cosmos DB para NoSQL requer o registro do recurso de visualização na página Recursos do seu Azure Cosmos DB. Siga os passos abaixo para se inscrever:

  1. Navegue até a página de recursos do Azure Cosmos DB para NoSQL.

  2. Selecione o painel "Recursos" no item de menu "Configurações".

  3. Selecione "Pesquisa vetorial no Azure Cosmos DB para NoSQL".

  4. Leia a descrição do recurso para confirmar que deseja se inscrever na visualização.

  5. Selecione "Ativar" para se inscrever na visualização.

Nota

O pedido de registo será aprovado automaticamente, no entanto poderá demorar vários minutos a entrar em vigor.

Gorjeta

Como alternativa, use a CLI do Azure para atualizar os recursos da sua conta para dar suporte à pesquisa vetorial NoSQL.

az cosmosdb update \
     --resource-group <resource-group-name> \
     --name <account-name> \
     --capabilities EnableNoSQLVectorSearch

Políticas de vetores de contêiner

Executar pesquisa vetorial com o Azure Cosmos DB para NoSQL exige que você defina uma política de vetor para o contêiner. Isso fornece informações essenciais para que o mecanismo de banco de dados realize uma pesquisa eficiente de similaridade para vetores encontrados nos documentos do contêiner. Isso também informa a política de indexação vetorial das informações necessárias, caso você opte por especificar uma. As seguintes informações estão incluídas na política de vetores contidos:

  • "caminho": a propriedade que contém o vetor (obrigatório).
  • "datatype": o tipo de dados da propriedade vetor (padrão Float32). 
  • "dimensões": A dimensionalidade ou comprimento de cada vetor no caminho. Todos os vetores em um caminho devem ter o mesmo número de dimensões. (padrão 1536).
  • "distanceFunction": A métrica usada para calcular distância/similaridade. As métricas suportadas são:
    • cosseno, que tem valores de -1 (menos semelhante) a +1 (mais semelhante).
    • produto ponto, que tem valores de -inf (menos semelhante) a +inf (mais semelhante).
    • euclidiano, que tem valores de 0 (mais semelhantes) a +inf) (menos semelhantes).

Nota

Cada caminho único pode ter, no máximo, uma política. No entanto, várias políticas podem ser especificadas, desde que todas tenham como destino um caminho diferente.

A política de vetor de contêiner pode ser descrita como objetos JSON. Aqui estão dois exemplos de políticas de vetor de contêiner válidas:

Uma política com um único caminho vetorial

{
    "vectorEmbeddings": [
        {
            "path":"/vector1",
            "dataType":"float32",
            "distanceFunction":"cosine",
            "dimensions":1536
        }
    ]
}

Uma política com dois caminhos vetoriais

{
    "vectorEmbeddings": [
        {
            "path":"/vector1",
            "dataType":"float32",
            "distanceFunction":"cosine",
            "dimensions":1536
        },
        {
            "path":"/vector2",
            "dataType":"int8",
            "distanceFunction":"dotproduct",
            "dimensions":100
        }
    ]
}

Políticas de indexação vetorial

Os índices vetoriais aumentam a eficiência ao realizar pesquisas vetoriais usando a função do VectorDistance sistema. As pesquisas de vetores têm menor latência, maior taxa de transferência e menor consumo de RU ao usar um índice vetorial. Você pode especificar os seguintes tipos de políticas de índice de vetor:

Tipo Description Dimensões máximas
flat Armazena vetores no mesmo índice que outras propriedades indexadas. 505
quantizedFlat Quantifica (comprime) vetores antes de armazenar no índice. Isso pode melhorar a latência e a taxa de transferência ao custo de uma pequena quantidade de precisão. 4096
diskANN Cria um índice baseado no DiskANN para uma pesquisa aproximada rápida e eficiente. 4096

Nota

O quantizedFlat e diskANN índices requer que pelo menos 1.000 vetores sejam inseridos. Isso é para garantir a precisão do processo de quantização. Se houver menos de 1.000 vetores, uma verificação completa será executada em vez disso e levará a taxas de RU mais altas para uma consulta de pesquisa vetorial.

Alguns pontos a observar:

  • Os flat tipos de índice e quantizedFlat usam o índice do Azure Cosmos DB para armazenar e ler cada vetor ao executar uma pesquisa vetorial. As pesquisas vetoriais com um flat índice são pesquisas de força bruta e produzem 100% de precisão ou recordação. Ou seja, é garantido encontrar os vetores mais semelhantes no conjunto de dados. No entanto, há uma limitação de 505 dimensões para vetores em um índice plano.

  • O quantizedFlat índice armazena vetores quantizados (compactados) no índice. Pesquisas vetoriais com quantizedFlat índice também são pesquisas de força bruta, no entanto, sua precisão pode ser um pouco inferior a 100%, uma vez que os vetores são quantificados antes de adicionar ao índice. No entanto, as pesquisas vetoriais com quantized flat devem ter menor latência, maior taxa de transferência e menor custo de RU do que as pesquisas vetoriais em um flat índice. Essa é uma boa opção para cenários menores ou cenários em que você está usando filtros de consulta para restringir a pesquisa vetorial a um conjunto relativamente pequeno de vetores. quantizedFlat deve ser usado quando houver pelo menos 1.000 vetores e menos de 100.000 vetores no recipiente.

  • O diskANN índice é um índice separado definido especificamente para vetores usando DiskANN, um conjunto de algoritmos de indexação vetorial de alto desempenho desenvolvidos pela Microsoft Research. Os índices DiskANN podem oferecer algumas das consultas de menor latência, maior taxa de transferência e menor custo de RU, mantendo alta precisão.

Importante

Durante a visualização inicial, os índices vetoriais não podem ser modificados depois de criados. Em vez disso, você terá que criar um novo contêiner com uma nova política de índice de vetor, se uma alteração for necessária.

Aqui estão exemplos de políticas válidas de índice de vetor:

{
    "indexingMode": "consistent",
    "automatic": true,
    "includedPaths": [
        {
            "path": "/*"
        }
    ],
    "excludedPaths": [
        {
            "path": "/_etag/?"
        },
        {
            "path": "/vector1/*"
        }
    ],
    "vectorIndexes": [
        {
            "path": "/vector1",
            "type": "quantizedFlat"
        }
    ]
}
{
    "indexingMode": "consistent",
    "automatic": true,
    "includedPaths": [
        {
            "path": "/*"
        }
    ],
    "excludedPaths": [
        {
            "path": "/_etag/?"
        },
        {
            "path": "/vector1/*",
        },
        {
            "path": "/vector2/*",
        }
    ],
    "vectorIndexes": [
        {
            "path": "/vector1",
            "type": "quantizedFlat"
        },
        {
            "path": "/vector2",
            "type": "DiskANN"
        }
    ]
}

Importante

O caminho do vetor adicionado à seção "excludedPaths" da política de indexação para garantir um desempenho otimizado para inserção. Não adicionar o caminho do vetor a "excludedPaths" resultará em maior carga de RU e latência para inserções vetoriais.

Importante

Neste momento, na visualização da pesquisa vetorial, não use caminho aninhado ou caracteres curinga no caminho da política de vetor. No momento, não há suporte para operações de substituição na política de vetores.

Executar pesquisa vetorial com consultas usando VectorDistance()

Depois de criar um contêiner com a política de vetor desejada e inserir dados vetoriais no contêiner, você pode realizar uma pesquisa vetorial usando a função do sistema Distância vetorial em uma consulta. Um exemplo de uma consulta NoSQL que projeta a pontuação de semelhança como o alias SimilarityScoree classifica em ordem de mais semelhante a menos semelhante:

SELECT TOP 10 c.title, VectorDistance(c.contentVector, [1,2,3]) AS SimilarityScore   
FROM c  
ORDER BY VectorDistance(c.contentVector, [1,2,3])   

Limites e restrições atuais

A indexação vetorial e a pesquisa no Azure Cosmos DB para NoSQL têm algumas limitações enquanto estão nos estágios iniciais da visualização pública.

  • Você pode especificar, no máximo, um tipo de índice DiskANN por contêiner

  • A indexação vetorial só é suportada em novos contêineres.

  • Os vetores indexados com o tipo de flat índice podem ter no máximo 505 dimensões. Os vetores indexados com o quantizedFlat tipo ou DiskANN índice podem ter no máximo 4.096 dimensões.

  • OquantizedFlat utiliza o mesmo método de quantização que o DiskANN.

  • A taxa de inserções vetoriais deve ser limitada ao usar uma visualização antecipada do DiskANN. Uma ingestão muito grande (superior a 5 milhões de vetores) pode exigir tempo adicional de construção do índice.

  • Não há suporte para bancos de dados de taxa de transferência compartilhados.

  • No momento, na visualização, a Pesquisa Vetorial não é suportada em contas com Repositório Analítico (e Synapse Link), Taxa de Transferência Compartilhada, Chaves Gerenciadas pelo Cliente, Backup Contínuo, Análise de Armazenamento e Feed de Alterações de Todas as Versões e Exclusões. Quando a Pré-visualização da Pesquisa Vetorial estiver ativada, não poderá ser desativada.

    Importante

No momento, na visualização, a Pesquisa Vetorial não é suportada em contas com Repositório Analítico (e Synapse Link), Taxa de Transferência Compartilhada, Chaves Gerenciadas pelo Cliente, Backup Contínuo, Análise de Armazenamento e Feed de Alterações de Todas as Versões e Exclusões. Quando a Pré-visualização da Pesquisa Vetorial estiver ativada, não poderá ser desativada.

Próximo passo