Implementar tipos de dados vetoriais e busca vetorial
O SQL Server 2025 inclui suporte nativo para tipos de dados vetoriais e pesquisa de vetor. Esse recurso permite que você armazene inserções de vetor de alta dimensão junto com seus dados relacionais e execute pesquisas de similaridade, possibilitando a criação de aplicativos que entendam as relações semânticas dentro de seus dados.
A pesquisa de vetor aborda limitações em consultas de banco de dados tradicionais. Os bancos de dados tradicionais se destacam em correspondências exatas e consultas estruturadas, mas eles lutam para entender o contexto e o significado. A pesquisa de vetor altera isso habilitando a compreensão semântica– a capacidade de encontrar itens conceitualmente semelhantes mesmo quando eles não compartilham palavras-chave exatas. Por exemplo, uma pesquisa por "tênis de corrida confortáveis" pode encontrar produtos descritos como "calçados atléticos amortecidos" porque suas inserções de vetor capturam significado semântico semelhante.
Para desenvolvedores, isso significa que você pode criar aplicativos inteligentes sem gerenciar bancos de dados vetoriais separados ou processos complexos de sincronização de dados. Mantendo seus vetores ao lado de seus dados relacionais no SQL Server, você mantém a conformidade com ACID, usa políticas de segurança existentes, usa sintaxe T-SQL familiar e simplifica sua arquitetura. Essa integração se aplica a cenários como:
- Pesquisa semântica e recomendações: Localizar produtos, documentos ou conteúdo relevantes com base no significado, em vez de apenas palavras-chave
- Sistemas de resposta a perguntas: Capacitam chatbots e assistentes virtuais que entendem consultas feitas em linguagem natural sobre seus dados corporativos
- Detecção de anomalias: Identificar padrões incomuns localizando pontos de dados que estão semanticamente distantes do comportamento normal
- Eliminação de duplicação de conteúdo: Detectar itens semelhantes ou duplicados mesmo quando eles são formulados de forma diferente
- Mecanismos de personalização: Alinhar as preferências do usuário com produtos ou conteúdo, com base em similaridades sutis.
Explorar o tipo de dados de vetor
O tipo de dados de vetor no SQL Server 2025 foi projetado para armazenar matrizes de números de ponto flutuante com eficiência. Os vetores geralmente são usados para representar inserções geradas por modelos de IA, em que cada dimensão captura recursos específicos ou características semânticas dos dados.
Explorar as principais características
- Formato de armazenamento otimizado: Os vetores são armazenados em um formato binário otimizado internamente, mas expostos como matrizes JSON para facilitar o uso e a compatibilidade.
- Precisão flexível: Cada elemento no vetor pode ser armazenado usando valores de ponto flutuante de precisão única (4 bytes) ou de meia precisão (2 bytes), permitindo que você balancee a precisão e a eficiência de armazenamento.
- Suporte à dimensão: O SQL Server 2025 dá suporte a vetores com dimensões de até 1998 para dimensões de precisão única e 3.996 para meia precisão, acomodando uma ampla gama de modelos de inserção.
Criar e armazenar vetores
Você pode criar vetores lançando matrizes JSON para o vector tipo de dados. Veja um exemplo:
-- Create a vector from a JSON array
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;
Este código demonstra duas maneiras de criar um vetor tridimensional: convertendo diretamente uma cadeia de caracteres literal JSON ou usando a função JSON_ARRAY. Ambos os métodos produzem o mesmo resultado, armazenando os valores [1.0, -0.2, 30] em um tipo de dados de vetor.
Para armazenar vetores em uma tabela:
CREATE TABLE products (
product_id INT PRIMARY KEY,
product_name NVARCHAR(100),
description NVARCHAR(MAX),
embedding VECTOR(1536) -- Common dimension for OpenAI embeddings
);
Esse código cria uma tabela para armazenar informações do produto junto com uma inserção de vetor 1536. O tamanho da dimensão de 1536 é comumente usado com os modelos de inserção de texto do OpenAI, tornando essa tabela pronta para armazenar inserções geradas a partir de descrições do produto.
Converter vetores em JSON
Você pode converter facilmente vetores de volta em matrizes JSON para exibição ou processamento:
DECLARE @v VECTOR(3) = '[1.0, -0.2, 30]';
SELECT
CAST(@v AS NVARCHAR(MAX)) AS string_representation,
CAST(@v AS JSON) AS json_representation;
Esse código converte um vetor de volta em formatos legíveis. O CAST para NVARCHAR(MAX) retorna o vetor como uma cadeia de caracteres, enquanto CAST para JSON o retorna como uma matriz JSON, o que é útil para interoperabilidade com aplicativos e APIs.
Realizar busca exata pelo vizinho mais próximo (k-NN)
A pesquisa exata do vizinho mais próximo (k-NN) envolve calcular a distância entre um vetor de consulta e todos os vetores em seu conjunto de dados e, em seguida, retornar as k correspondências mais próximas. Esse método garante resultados precisos, mas pode ser computacionalmente intensivo para grandes conjuntos de dados.
Usar a função VECTOR_DISTANCE
A VECTOR_DISTANCE função mede a similaridade entre dois vetores usando uma métrica de distância especificada:
DECLARE @query_vector VECTOR(1536) = AI_GENERATE_EMBEDDINGS(
N'Pink Floyd music style'
USE MODEL Ada2Embeddings
);
SELECT TOP (10)
product_id,
product_name,
VECTOR_DISTANCE('cosine', @query_vector, embedding) AS distance
FROM products
ORDER BY distance;
Essa consulta gera uma inserção para o texto "Estilo de música pink floyd" usando o modelo Ada2Embeddings e localiza os 10 produtos com inserções mais semelhantes à consulta. A função VECTOR_DISTANCE calcula a distância do cosseno entre o vetor de consulta e a incorporação de cada produto, sendo que distâncias menores indicam maior similaridade.
Escolher métricas de distância
O SQL Server 2025 dá suporte a várias métricas de distância:
- Similaridade de cosseno: Mede o ângulo entre vetores, ideal para incorporação de texto
- Distância euclidiana: Mede a distância de linha reta no espaço de vetor
- Produto escalar: Útil para vetores normalizados
Como determinar quando usar a pesquisa exata
A pesquisa exata é recomendada quando:
- Você tem menos de 50.000 vetores para pesquisar
- Seus predicados de consulta filtram o conjunto de dados para um tamanho gerenciável
- Você precisa de memória perfeita (100% de precisão)
- O custo computacional extra é aceitável
Implemente busca aproximada pelo vizinho mais próximo (ANN)
Para conjuntos de dados maiores, a pesquisa aproximada do vizinho mais próximo (ANN) fornece um equilíbrio entre velocidade e precisão. O SQL Server 2025 implementa ANN usando o algoritmo DiskANN, que cria um índice baseado em grafo para navegação de vetor eficiente.
Entender o conceito de recall
Recall mede a proporção de verdadeiros vizinhos mais próximos que um algoritmo ANN identifica em comparação com a busca exata. Um recall de 1.0 (100%) significa que a pesquisa aproximada retorna os mesmos resultados da pesquisa exata. Na prática, os valores de recall acima de 0,95 geralmente fornecem excelentes resultados para aplicativos de IA, ao mesmo tempo em que oferecem melhorias significativas de desempenho.
Criar índices de vetor
Para habilitar a pesquisa ANN, crie um índice de vetor em sua coluna de vetor:
CREATE VECTOR INDEX idx_product_embedding
ON products(embedding);
Esse código cria um índice de vetor na coluna de inserção usando o algoritmo DiskANN. O índice melhora o desempenho de pesquisas aproximadas de vizinhos mais próximos em grandes conjuntos de dados criando uma estrutura de grafo para navegação de vetor eficiente.
Índices de vetor no SQL Server 2025:
- Usar o algoritmo DiskANN para uma pesquisa eficiente baseada em grafo
- Dar suporte a recursos limitados de memória e CPU
- Balancear a E/S do disco, o uso de memória e o desempenho da consulta
- Atualizar automaticamente conforme os dados são alterados
Usar a função VECTOR_SEARCH
A função VECTOR_SEARCH executa buscas aproximadas de vizinhança mais próxima.
DECLARE @query_vector VECTOR(1536) = AI_GENERATE_EMBEDDINGS(
N'Pink Floyd music style'
USE MODEL Ada2Embeddings
);
SELECT
t.product_id,
t.product_name,
s.distance
FROM
VECTOR_SEARCH(
TABLE = products AS t,
COLUMN = embedding,
SIMILAR_TO = @query_vector,
METRIC = 'cosine',
TOP_N = 10
) AS s
ORDER BY s.distance;
Essa consulta executa uma pesquisa de vizinho mais próxima aproximada usando o índice de vetor criado anteriormente. A VECTOR_SEARCH função usa o algoritmo DiskANN para localizar os 10 produtos mais semelhantes sem verificar todos os vetores, fornecendo melhorias de desempenho para grandes conjuntos de dados, mantendo a alta precisão.
Considere os benefícios de desempenho
Ofertas de pesquisa ANN:
- Execução de consulta mais rápida: Especialmente para conjuntos de dados com milhões de vetores
- Menor consumo de recursos: Redução do uso de CPU e memória em comparação com a pesquisa exata
- Escalabilidade: Lida com conjuntos de dados de vetor em larga escala com eficiência
- Alta taxa de recuperação: Normalmente atinge taxas de mais de 95%, garantindo resultados de qualidade
Criar cenários de pesquisa híbrida
O SQL Server 2025 dá suporte à combinação de pesquisa de vetor com operações sql tradicionais para cenários de pesquisa híbrida.
Combinar pesquisa semântica e de palavra-chave
Você pode executar a pesquisa semântica usando vetores e, ao mesmo tempo, aplicar filtros tradicionais:
DECLARE @query_vector VECTOR(1536) = AI_GENERATE_EMBEDDINGS(
N'comfortable running shoes'
USE MODEL Ada2Embeddings
);
SELECT
t.product_id,
t.product_name,
t.category,
t.price,
s.distance
FROM
VECTOR_SEARCH(
TABLE = products AS t,
COLUMN = embedding,
SIMILAR_TO = @query_vector,
METRIC = 'cosine',
TOP_N = 20
) AS s
WHERE
t.category = 'Footwear'
AND t.price BETWEEN 50 AND 150
ORDER BY s.distance;
Essa pesquisa híbrida combina a pesquisa de similaridade semântica com a filtragem de SQL tradicional. Primeiro, ele encontra os 20 produtos mais semanticamente semelhantes a "tênis de corrida confortáveis", em seguida, filtra esses resultados para incluir apenas itens de calçados com preços entre 50 USD e 150 USD. Essa abordagem permite o direcionamento preciso ao usar a compreensão semântica.
Integrar o texto completo e a pesquisa de vetor
Combine a pesquisa de texto completo com a pesquisa de vetor para obter resultados abrangentes:
DECLARE @query_vector VECTOR(1536) = AI_GENERATE_EMBEDDINGS(
N'sustainable materials'
USE MODEL Ada2Embeddings
);
SELECT
t.product_id,
t.product_name,
s.distance,
fts.RANK AS text_rank
FROM
VECTOR_SEARCH(
TABLE = products AS t,
COLUMN = embedding,
SIMILAR_TO = @query_vector,
METRIC = 'cosine',
TOP_N = 50
) AS s
INNER JOIN CONTAINSTABLE(products, description, 'sustainable OR eco-friendly') AS fts
ON t.product_id = fts.[KEY]
ORDER BY (s.distance * 0.6) + ((1.0 - fts.RANK/1000.0) * 0.4);
Essa consulta combina a pesquisa de vetor com a pesquisa de texto completo. Ele encontra produtos semanticamente semelhantes a "materiais sustentáveis" usando inserções vetoriais e, em seguida, une-se aos resultados de pesquisa de texto completo para palavras-chave "sustentáveis" ou "eco-friendly" na descrição. A classificação final combina ambas as pontuações com uma fórmula ponderada (60% similaridade semântica, 40% correspondência de palavra-chave).
Aplicar melhores práticas
Ao implementar a pesquisa de vetor no SQL Server 2025:
- Escolha a precisão certa: Use precisão reduzida para dimensões maiores quando o armazenamento for uma preocupação
- Indexar estrategicamente: Criar índices de vetor em colunas que são pesquisadas com frequência
- Monitorar o recall: Teste suas consultas ANN para garantir taxas de recall aceitáveis para seu caso de uso
- Otimizar consultas: Usar filtros apropriados para reduzir o espaço de pesquisa antes das operações de vetor
- Operações em lote: Gerar e inserir inserções em lotes para melhorar o desempenho
Usando essas funcionalidades de vetor, você pode criar aplicativos movidos a IA que entendam relações semânticas, forneçam recomendações inteligentes e ofereçam experiências de pesquisa de linguagem natural, tudo dentro da plataforma confiável do SQL Server.