Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O Cosmos DB no Fabric agora oferece indexação e pesquisa de vetores eficientes. Esse recurso foi projetado para lidar com vetores multidimensionais e de alta dimensão, permitindo uma pesquisa de vetor eficiente e precisa em qualquer escala. Agora você pode armazenar vetores diretamente nos documentos, junto com seus dados. Cada documento em seu banco de dados pode conter não apenas dados tradicionais sem esquema, mas também vetores multidimensionais de alta dimensão como outras propriedades dos documentos. Essa colocalização de dados e vetores permite processos de indexação e busca eficientes, pois os vetores são armazenados na mesma unidade lógica dos dados que representam. Manter os vetores e os dados juntos simplifica o gerenciamento de dados, as arquiteturas de aplicativos de IA e a eficiência das operações baseadas em vetores.
O Cosmos DB no Fabric oferece a flexibilidade oferecida na escolha do método de indexação de vetor:
Uma busca exata "plana" (flat) ou de k-vizinhos mais próximos (k-nearest neighbors), às vezes chamada de busca por força bruta, pode proporcionar recall de recuperação de 100% para buscas em vetores menores e específicas. especialmente quando combinada com filtros de consulta e chaves de partição.
Um índice plano compartimentalizado que comprime vetores usando métodos de compartimentalização baseados em DiskANN para obter melhor eficiência na busca kNN.
DiskANN, um conjunto de algoritmos de indexação de vetor de última geração desenvolvidos pela Microsoft Research para impulsionar uma pesquisa de vetor multimodal eficiente e de alta precisão em qualquer escala.
A pesquisa de vetor no Cosmos DB pode ser combinada com todos os outros filtros e índices de consulta NoSQL suportados, usando cláusulas WHERE. Essa combinação permite que suas pesquisas de vetor sejam os dados mais relevantes para seus aplicativos.
Esse recurso aprimora os principais recursos do Cosmos DB, tornando-o mais versátil para lidar com os dados de vetor e os requisitos de pesquisa em aplicativos de IA.
O que é um repositório de vetores?
Um repositório de vetores ou um banco de dados vetor é um banco de dados projetado para armazenar e gerenciar inserções de vetor, que são representações matemáticas de dados em um espaço de alta dimensão. Nesse espaço, cada dimensão corresponde a um recurso dos dados e dezenas de milhares de dimensões podem ser usadas para representar dados sofisticados. A posição de um vetor nesse espaço representa as características dele. Palavras, frases ou documentos inteiros e imagens, áudio e outros tipos de dados podem ser vetorizados.
Como funciona um repositório de vetores?
Em um repositório de vetores, algoritmos de busca em vetores são usados para indexar e consultar inserções. Alguns algoritmos de busca em vetores conhecidos incluem HNSW (Hierarchical Navigable Small World), IVF (Arquivo Invertido), DiskANN etc. A busca em vetores é um método que ajuda a localizar itens semelhantes com base em suas características de dados, em vez de correspondências exatas em um campo de propriedade. Essa técnica é útil em usos como pesquisa de texto semelhante, localização de imagens relacionadas, recomendações ou até mesmo detecção de anomalias. Ela é usada para consultar as inserções de vetores dos seus dados que você criou usando um modelo de machine learning por meio de uma API de inserções. Exemplos de APIs de inserções são as Inserções do Azure OpenAI ou o Hugging Face no Azure. A busca em vetores 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 vetor integrado no Cosmos DB no Fabric, as inserções podem ser armazenadas, indexadas e consultadas junto com os dados originais. Essa abordagem elimina o custo extra de replicação de dados em um banco de dados vetoriais puro separado. Além disso, essa arquitetura mantém as inserções vetoriais e os dados originais juntos, o que facilita melhor as operações de dados multimodais e possibilita maior consistência, escala e desempenho de dados.
Políticas de vetor de contêiner
A execução da pesquisa de vetor com o Cosmos DB no Fabric exige que você defina uma política de vetor para o contêiner. Essa política fornece informações essenciais para que o mecanismo de banco de dados realize uma pesquisa de similaridade eficiente para vetores encontrados nos documentos do contêiner. Essa configuração também informa a política de indexação de vetor das informações necessárias, caso você opte por especificar uma. As seguintes informações estão incluídas na política vetorial contida:
path: a propriedade que contém o vetor (obrigatório).datatype: o tipo de dados da propriedade de vetor. Os tipos com suporte sãofloat32(padrão)int8euint8.dimensions: a dimensionalidade ou o comprimento de cada vetor no caminho. Todos os vetores em um caminho devem ter o mesmo número de dimensões. (padrão1536).distanceFunction: a métrica usada para calcular distância/similaridade. As métricas com suporte são:cosine, que tem valores de $-1$ (menos similar) a $+1$ (mais semelhante).dot product, que tem valores de $-\infty$ (menos similar) a $+\infty$ (mais semelhante).euclidean, que tem valores de $0$ (mais semelhantes) a $+\infty$ (menos similar).
Observação
Cada caminho exclusivo pode ter no máximo uma política. No entanto, várias políticas poderão ser especificadas se todas elas forem direcionadas a um caminho diferente.
A política vetorial para contêineres pode ser descrita como objetos JSON. Aqui estão dois exemplos de políticas vetoriais para contêineres válidas:
Uma política com um único caminho de vetor
{
"vectorEmbeddings": [
{
"path": "/vector1",
"dataType": "float32",
"distanceFunction": "cosine",
"dimensions": 1536
}
]
}
Uma política com duas trajetórias vetoriais
{
"vectorEmbeddings": [
{
"path": "/vector1",
"dataType": "float32",
"distanceFunction": "cosine",
"dimensions": 1536
},
{
"path": "/vector2",
"dataType": "int8",
"distanceFunction": "dotproduct",
"dimensions": 100
}
]
}
Para obter mais informações e exemplos de configurações de uma política de vetor de contêiner, consulte exemplos de política de indexação de vetor.
Políticas de indexação vetorial
Índices de vetores aumentam a eficiência ao realizar buscas em vetores usando a função de sistema VectorDistance. As buscas em vetores têm menor latência, maior taxa de transferência e menor consumo de Unidade de Solicitação (RU) ao usar um índice de vetores. Você pode especificar esses tipos de políticas de índice de vetor:
| Descrição | Dimensões máximas | |
|---|---|---|
flat |
Armazena vetores no mesmo índice que outras propriedades indexadas. | 505 |
quantizedFlat |
Quantifica (compacta) vetores antes de armazenar no índice. Essa política 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 em DiskANN para uma pesquisa aproximada rápida e eficiente. | 4096 |
Observação
quantizedFlat e diskANN os índices exigem que pelo menos 1.000 vetores devem ser inseridos. Esse mínimo é garantir a precisão do processo de quantização. Se houver menos de 1.000 vetores, uma varredura completa será executada em vez disso, o que resulta em cobranças de unidades de requisição mais altas para uma consulta de vetor.
Alguns pontos a serem observados:
Os tipos de índice
flatequantizedFlatusam o índice do Cosmos DB para armazenar e ler cada vetor durante uma pesquisa de vetor. Buscas em vetores com um índiceflatsão buscas de força bruta e garantem 100% de exatidão ou recall. Ou seja, eles têm a garantia de encontrar os vetores mais semelhantes no conjunto de dados. No entanto, existe uma limitação de505dimensões para vetores em um índice simples.O índice
quantizedFlatarmazena vetores compartimentalizados (comprimidos) no índice. Buscas em vetores com índicequantizedFlattambém são pesquisas de força bruta; no entanto, sua precisão pode ser ligeiramente menor que 100%, uma vez que os vetores são quantificados antes de adicionar ao índice. No entanto, buscas em vetores comquantized flatdevem ter menor latência, maior taxa de transferência e menor custo de RU do que buscas em vetores em um índiceflat. Esse índice é uma boa opção para cenários menores ou cenários em que você está usando filtros de consulta para restringir a pesquisa de vetor a um conjunto relativamente pequeno de vetores.quantizedFlaté recomendável quando o número de vetores a serem indexados é algo em torno de 50.000 ou menos por partição física. No entanto, essa recomendação é apenas uma diretriz geral e o desempenho real deve ser testado, pois cada cenário pode ser diferente.O índice
diskANNé separado e definido especificamente para vetores usando DiskANN, uma série de algoritmos de indexação de vetores de alta 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 ainda uma alta exatidão. Em geral, DiskANN será o mais executado de todos os tipos de índice se houver mais de 50.000 vetores por partição física.
Aqui estão alguns exemplos de políticas de índice de vetores válidas:
{
"indexingMode": "consistent",
"automatic": true,
"includedPaths": [
{
"path": "/*"
}
],
"excludedPaths": [
{
"path": "/_etag/?"
},
{
"path": "/vector1/*"
}
],
"vectorIndexes": [
{
"path": "/vector1",
"type": "diskANN"
}
]
}
{
"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 de vetor adicionado na seção excludedPaths da política de indexação para garantir desempenho otimizado para a inserção. Não adicionar o caminho do vetor ao excludedPaths resulta em maior taxa de unidade de solicitação e latência para inserções de vetor.
Importante
Caracteres curinga (*, []) não são suportados atualmente na política de vetor ou no índice de vetor.
Executar pesquisa de vetor com consultas usando VECTORDISTANCE
Depois de criar um contêiner com a política de vetor desejada e inserir dados de vetor no contêiner, você poderá realizar uma pesquisa de vetor usando a função interna VECTORDISTANCE em uma consulta. Um exemplo de uma consulta NoSQL que projeta a pontuação de similaridade como o alias score e classifica na ordem do mais similar para o menos similar:
SELECT TOP 10
c.title,
VECTORDISTANCE(c.contentVector, [1,2,3]) AS score
FROM
container c
ORDER BY
VECTORDISTANCE(c.contentVector, [1,2,3])
Importante
Sempre use uma cláusula TOP N na instrução SELECT de uma consulta. Caso contrário, a pesquisa de vetor tentará retornar muito mais resultados, fazendo com que a consulta custe mais RUs (unidades de solicitação) e tenha uma latência maior do que o necessário.