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.
Aplica-se a: SQL Server 2025 (17.x)
Banco de Dados
SQL do AzureBanco de DadosSQL do Azure Banco de Dados SQL banco de dados SQL do Banco de Dados SQL do Azure
banco de dados SQL no Microsoft Fabric
O Mecanismo de Banco de Dados SQL fornece a capacidade de armazenar qualquer tipo de dados e executar qualquer tipo de consulta: estruturada e não estruturada e executar a pesquisa de vetor nesses dados. É uma boa opção para cenários em que você precisa pesquisar todos esses dados juntos e não deseja usar um serviço separado para pesquisa que complicaria sua arquitetura.
Observação
- Os recursos de vetor estão disponíveis na Instância Gerenciada de SQL do Azure configurada com a política de atualização do SQL Server 2025 ou Always-up-to-date.
Vectors
Vetores são matrizes ordenadas de números (normalmente floats) que podem representar informações sobre alguns dados. Por exemplo, uma imagem pode ser representada como um vetor de valores de pixel ou uma cadeia de caracteres de texto pode ser representada como um vetor de valores ASCII. O processo para transformar dados em um vetor é chamado vetorização. O tipo de dados de vetor no SQL Server foi projetado para armazenar essas matrizes de números com eficiência.
Embeddings
As inserções são vetores que representam características importantes dos dados. As incorporações são frequentemente aprendidas pelo uso de um modelo de aprendizado profundo, e os modelos de aprendizado de máquina e IA as utilizam como recursos. As inserções também podem capturar a semelhança semântica entre conceitos semelhantes. Por exemplo, ao gerar uma inserção para as palavras person e human, esperaríamos que suas inserções (representação vetorial) fossem semelhantes em valor, pois as palavras também são semanticamente semelhantes.
O OpenAI do Azure apresenta modelos para criar incorporações de dados de texto. O serviço divide o texto em tokens e gera incorporações utilizando modelos pré-treinados da OpenAI. Para saber mais, confira Criar incorporações com o OpenAI do Azure.
Depois que as inserções são geradas, elas podem ser armazenadas em um banco de dados do SQL Server. Isso permite que você armazene as incorporações junto com os dados que elas representam e execute consultas de pesquisa vetorial para encontrar pontos de dados semelhantes.
Busca em vetores
A pesquisa vetorial refere-se ao processo de encontrar todos os vetores em um conjunto de dados que são semelhantes a um vetor de consulta específico. Portanto, um vetor de consulta para a palavra human pesquisa todo o conjunto de dados em busca de vetores semelhantes e, portanto, palavras semelhantes: neste exemplo, ele deve encontrar a palavra person como uma correspondência próxima. Essa proximidade ou distância é medida usando uma métrica de distância, como a distância de cosseno. Quanto mais próximos os vetores estiverem, mais semelhantes eles serão.
O SQL Server fornece suporte interno para vetores por meio do tipo de dados vetorial . Os vetores são armazenados em um formato binário otimizado, mas expostos como matrizes JSON por conveniência. Cada elemento do vetor é armazenado usando o valor do ponto flutuante de precisão única (4 bytes). Junto com o tipo de dados, existem funções dedicadas para operar em vetores. Por exemplo, é possível encontrar a distância entre dois vetores usando a função VECTOR_DISTANCE . A função retorna um valor escalar com a distância entre dois vetores com base na métrica de distância especificada.
Como os vetores são normalmente gerenciados como matrizes de floats, a criação de um vetor pode ser feita simplesmente convertendo uma matriz JSON em um tipo de dados vetorial . Por exemplo, o código a seguir cria um vetor a partir de uma matriz JSON:
SELECT
CAST('[1.0, -0.2, 30]' AS VECTOR(3)) AS v1,
CAST(JSON_ARRAY(1.0, -0.2, 30) AS VECTOR(3)) AS v2;
Ou use conversão implícita
DECLARE @v1 VECTOR(3) = '[1.0, -0.2, 30]';
DECLARE @v2 VECTOR(3) = JSON_ARRAY(1.0, -0.2, 30);
SELECT @v1 as v1, @v2 as v2;
O mesmo vale para converter um vetor em uma matriz JSON:
DECLARE @v VECTOR(3) = '[1.0, -0.2, 30]';
SELECT
CAST(@v AS NVARCHAR(MAX)) AS s,
CAST(@v AS JSON) AS j
Pesquisa exata e distância de vetor (vizinhos exatos mais próximos)
A pesquisa exata, também conhecida como k-NN (vizinho mais próximo), envolve calcular a distância entre um determinado vetor e todos os outros vetores em um conjunto de dados, classificar os resultados e selecionar os vizinhos mais próximos com base em uma métrica de distância especificada. Esse método garante a recuperação precisa dos vizinhos mais próximos, mas pode ser computacionalmente intensivo, especialmente para grandes conjuntos de dados.
As funções de distância de vetor são usadas para medir a proximidade entre vetores. As métricas de distância comuns incluem distância euclidiana, similaridade de cosseno e produto de ponto. Essas funções são essenciais para executar pesquisas k-NN e garantir resultados precisos.
A pesquisa de vetor ENN (vizinho mais próximo) exata executa um cálculo de distância exaustiva em todos os vetores indexados para garantir a recuperação dos vizinhos mais próximos com base em uma métrica de distância especificada. Esse método é preciso, mas com uso intensivo de recursos, tornando-o adequado para conjuntos de dados menores ou cenários em que a precisão é primordial.
No Mecanismo de Banco de Dados SQL, pesquisas k-NN podem ser executadas usando a função VECTOR_DISTANCE , que permite um cálculo eficiente de distâncias entre vetores e facilita a recuperação dos vizinhos mais próximos.
O exemplo a seguir mostra como realizar k-NN para retornar os 10 vetores mais semelhantes armazenados na tabela content_vector para o vetor de consulta fornecido @qv.
DECLARE @qv VECTOR(1536) = AI_GENERATE_EMBEDDINGS(N'Pink Floyd music style' USE MODEL Ada2Embeddings);
SELECT TOP (10) id, VECTOR_DISTANCE('cosine', @qv, [content_vector]) AS distance, title
FROM [dbo].[wikipedia_articles_embeddings]
ORDER BY distance
O uso de uma pesquisa exata é recomendado quando você não tem muitos vetores para pesquisar (menos de 50.000 vetores como uma recomendação geral). A tabela pode conter muito mais vetores, desde que seus predicados de pesquisa reduzam o número de vetores a serem usados para a pesquisa de vizinhos para 50.000 ou menos.
Índice de vetor aproximado e pesquisa de vetor (vizinhos mais próximos aproximados)
Observação
Índice vetorial aproximado e busca vetorial estão em prévia e atualmente disponíveis apenas no SQL Server 2025 (17.x), Azure SQL Database e SQL Database no Microsoft Fabric.
Identificar todos os vetores próximos a um determinado vetor de consulta requer recursos substanciais para calcular a distância entre o vetor de consulta e os vetores armazenados na tabela. A pesquisa de todos os vetores próximos a um determinado vetor de consulta envolve uma verificação completa da tabela e um uso significativo da CPU. Isso é chamado de consulta "K-vizinhos mais próximos" ou "k-NN" e retorna os "k" vetores mais próximos, onde 'k' representa a quantidade de vetores desejada.
Os vetores são usados para localizar dados semelhantes para modelos de IA para responder a consultas de usuário. Isso envolve consultar o banco de dados para os vetores "k" mais próximos do vetor de consulta usando métricas de distância, como produto interno, similaridade de cosseno ou distância euclidiana.
As pesquisas K-NN geralmente enfrentam dificuldades com escalabilidade, fazendo com que seja aceitável, em muitos casos, trocar alguma precisão, particularmente no recall, por ganhos significativos de velocidade. Esse método é conhecido como vizinhos mais próximos aproximados (ANN).
O recall é um conceito importante que deve ser familiar a todos que usam ou planejam usar vetores e incorporações. Na verdade, o recall mede a proporção dos vizinhos mais próximos aproximados identificados pelo algoritmo, em comparação com os vizinhos exatos mais próximos que uma pesquisa exaustiva retornaria. Portanto, é uma boa medida da qualidade da aproximação que o algoritmo está fazendo. Um recall perfeito, que equivale a nenhuma aproximação, tem valor igual a 1.
Para aplicativos de IA, a compensação é bastante razoável. Como as inserções de vetor já são conceitos aproximados, o uso de ANN não afeta consideravelmente os resultados, desde que o recall seja próximo de 1. Isso garante que os resultados retornados sejam muito semelhantes aos da k-NN, ao mesmo tempo em que oferecem um desempenho muito melhor e um uso de recursos significativamente reduzido, o que é altamente benéfico para bancos de dados operacionais.
É importante entender que o termo "índice" quando usado referindo-se a um índice de vetor tem um significado diferente do índice com o qual você está acostumado a trabalhar em bancos de dados relacionais. Na verdade, um índice de vetor retorna resultados aproximados.
No mecanismo do Banco de Dados SQL, os índices de vetor são baseados no algoritmo DiskANN . O DiskANN depende da criação de um grafo para navegar rapidamente por todos os vetores indexados para encontrar a correspondência mais próxima de um determinado vetor. DiskANN é um sistema baseado em grafo para indexar e pesquisar grandes conjuntos de dados de vetor usando recursos computacionais limitados. Ele usa com eficiência SSDs e memória mínima para lidar com muito mais dados do que índices na memória, mantendo consultas altas por segundo (QPS) e baixa latência, garantindo um equilíbrio entre memória, uso de CPU e E/S e desempenho de pesquisa.
Uma pesquisa aproximada de algoritmos vizinhos mais próximos pode ser feita primeiro criando um índice de vetor usando o comando CREATE VECTOR INDEX T-SQL e, em seguida , usando VECTOR_SEARCH função T-SQL para executar a pesquisa aproximada.
DECLARE @qv VECTOR(1536) = AI_GENERATE_EMBEDDINGS(N'Pink Floyd music style' USE MODEL Ada2Embeddings);
SELECT
t.id, s.distance, t.title
FROM
VECTOR_SEARCH(
TABLE = [dbo].[wikipedia_articles_embeddings] AS t,
COLUMN = [content_vector],
SIMILAR_TO = @qv,
METRIC = 'cosine',
TOP_N = 10
) AS s
ORDER BY s.distance