Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
O Cosmos DB em Fabric oferece agora indexação vetorial e pesquisa eficientes. Este recurso é projetado para lidar com vetores multimodais e 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 multimodais 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 Cosmos DB in Fabric 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 fornecer pesquisa vetorial multimodal eficiente e de alta precisão em qualquer escala.
A pesquisa vetorial no Cosmos DB pode ser combinada com todos os outros filtros e índices de consulta NoSQL suportados usando WHERE cláusulas. Essa combinação permite que suas pesquisas vetoriais 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 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 Cosmos DB no Fabric, 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.
Políticas de vetor de contêiner
Executar a pesquisa vetorial com o Cosmos DB na malha exige que você defina uma política de vetor para o contêiner. Esta política 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. Essa configuração 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:
path: a propriedade que contém o vetor (obrigatório).datatype: o tipo de dados da propriedade vetor. Os tipos suportados sãofloat32(padrão),int8euint8.dimensions: 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ão1536).distanceFunction: A métrica usada para calcular a distância/semelhança. As métricas suportadas são:cosine, que tem valores de $-1$ (menos semelhantes) a $+1$ (mais semelhantes).dot product, que tem valores de $-\infty$ (menos semelhante) a $+\infty$ (mais semelhante).euclidean, que tem valores de $0$ (mais semelhantes) a $+\infty$ (menos semelhantes).
Observação
Cada caminho único pode ter, no máximo, uma política. No entanto, várias políticas podem ser especificadas se todas tiverem 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
}
]
}
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 vetores.
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 estes 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 (comprime) 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 no DiskANN para uma pesquisa aproximada rápida e eficiente. | 4096 |
Observação
O quantizedFlat e diskANN índices requerem que pelo menos 1.000 vetores sejam inseridos. Este mínimo é para garantir a precisão do processo de quantização. Se houver menos de 1.000 vetores, uma verificação completa é executada em vez disso e leva a taxas de RU mais altas para uma consulta de pesquisa vetorial.
Alguns pontos a observar:
Os
flattipos de índice equantizedFlatusam o índice do Cosmos DB para armazenar e ler cada vetor durante uma pesquisa vetorial. As pesquisas vetoriais com umflatíndice são pesquisas de força bruta e produzem 100% de precisão ou recuperação. Ou seja, é garantido que eles encontrarão os vetores mais semelhantes no conjunto de dados. No entanto, existe uma limitação de505dimensões para vetores em um índice plano.O
quantizedFlatíndice armazena vetores quantizados (compactados) no índice. Pesquisas vetoriais comquantizedFlatí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 comquantized flatdevem ter menor latência, maior taxa de transferência e menor custo de RU do que as pesquisas vetoriais em umflatíndice. 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 vetorial a um conjunto relativamente pequeno de vetores.quantizedFlaté recomendado quando o número de vetores a serem indexados é algo em torno de 50.000 ou menos por partição física. No entanto, esta recomendação é apenas uma orientação geral e o desempenho real deve ser testado, uma vez que cada cenário pode ser diferente.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. Em geral, o DiskANN é o mais eficiente de todos os tipos de índice se houver mais de 50.000 vetores por partição física.
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": "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 foi adicionado à excludedPaths seção da política de indexação para garantir um desempenho otimizado para inserção. Não adicionar o caminho do vetor excludedPaths resulta em maior encargo de unidade de solicitação e latência nas inserções vetoriais.
Importante
Atualmente, não há suporte para caracteres curinga (*, []) na política de vetores ou no índice de vetores.
Realize a 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 interna VECTORDISTANCE em uma consulta. Um exemplo de uma consulta NoSQL que projeta a pontuação de semelhança como o alias scoree classifica em ordem de mais semelhante a menos semelhante:
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 a cláusula TOP N na instrução SELECT de uma consulta. Caso contrário, a pesquisa vetorial tenta retornar muito mais resultados, fazendo com que a consulta custe mais unidades de solicitação (RUs) e tenha latência maior do que o necessário.