Mosaic AI Vector Search
Este artigo fornece uma visão geral da solução de banco de dados vetorial da Databricks, o Mosaic AI Vector Search, incluindo o que é e como funciona.
O que é o Mosaic AI Vector Search?
O Mosaic AI Vector Search é um banco de dados vetorial incorporado à Databricks Data Intelligence Platform e integrado às suas ferramentas de governança e produtividade. Um banco de dados vetorial é um banco de dados otimizado para armazenar e recuperar incorporações. As incorporações são representações matemáticas do conteúdo semântico dos dados, geralmente dados de texto ou imagem. Os embeddings são gerados por um modelo de linguagem grande e são um componente key de muitos aplicativos generativos AI que dependem da localização de documentos ou imagens semelhantes entre si. Exemplos são sistemas RAG, sistemas de recomendação e reconhecimento de imagem e vídeo.
Com o Mosaic AI Vector Search, você cria um índice de pesquisa vetorial a partir de uma tabela Delta. O índice inclui dados incorporados com metadados. Em seguida, você pode consultar o índice usando uma API REST para identificar os vetores mais semelhantes e retornar os documentos associados. Você pode estruturar o índice para sincronizar automaticamente quando a tabela Delta subjacente for atualizada.
O Mosaic AI Vector Search é compatível com o seguinte:
- Pesquisa híbrida por similaridade de palavras-chave.
- Filtragem.
- Listas de controle de acesso (ACLs) para gerenciar o ponto de extremidade de pesquisa de vetores.
- Sincronize somente as colunas selecionadas.
- Salve e sincronize os embeddings gerados.
Como funciona o Mosaic AI Vector Search?
O Mosaic AI Vector Search usa o algoritmo Hierarchical Navigable Small World (HNSW) para suas buscas aproximadas de vizinhos mais próximos e a métrica de distância L2 para medir a similaridade do vetor de incorporação. Se quiser usar a similaridade de cosseno, você precisará normalizar suas incorporações de pontos de dados antes de alimentá-las na pesquisa vetorial. Quando os pontos de dados são normalizados, a classificação produzida pela distância L2 é a mesma que a classificação produzida pela similaridade de cosseno.
O Mosaic AI Vector Search também é compatível com a pesquisa híbrida de similaridade de palavras-chave, que combina a pesquisa de incorporação baseada em vetores com técnicas tradicionais de pesquisa baseadas em palavras-chave. Essa abordagem corresponde às palavras exatas da consulta e, ao mesmo tempo, usa uma pesquisa de similaridade baseada em vetores para capturar as relações semânticas e o contexto da consulta.
Ao integrar essas duas técnicas, a pesquisa híbrida de similaridade de palavras-chave recupera documentos que contêm não apenas as palavras-chave exatas, mas também aquelas que são conceitualmente semelhantes, fornecendo resultados de pesquisa mais abrangentes e relevantes. Esse método é particularmente útil em aplicativos RAG, nos quais os dados de origem têm palavras-chave exclusivas, como SKUs ou identificadores que não são adequados para a pesquisa de similaridade pura.
Para obter detalhes sobre a API, consulte a referência do Python SDK e Consultar um endpoint de pesquisa de vetor.
Cálculo de pesquisa por similaridade
O cálculo da pesquisa de similaridade usa a seguinte fórmula:
onde dist
é a distância euclidiana entre a consulta q
e a entrada do índice x
:
algoritmo de busca por palavra-chave
As pontuações de relevância são calculadas usando o Okapi BM25. Todas as colunas de texto ou strings são pesquisadas, incluindo a incorporação do texto de origem e as colunas de metadados em formato de texto ou string. A função de tokenização divide nos limites das palavras, remove pontuação e converte todo o texto em minúsculas.
Como a pesquisa por similaridade e a pesquisa por palavra-chave são combinadas
Os resultados da pesquisa por similaridade e da pesquisa por palavras-chave são combinados usando a função Reciprocal Rank Fusion (RRF).
O RRF reavalia cada documento de cada método usando a pontuação:
Na equação acima, a classificação começa em 0, soma as pontuações de cada documento e retorna os documentos com maior pontuação.
rrf_param
controla a importância relativa dos documentos com classificação mais alta e mais baixa. Com base na literatura, rrf_param
é definido como 60.
As pontuações são normalizadas para que a pontuação mais alta seja 1 e a pontuação mais baixa seja 0 usando a seguinte equação:
Opções para fornecer incorporações vetoriais
Para criar um banco de dados vetorial no Databricks, primeiro você deve decidir como fornecer incorporações vetoriais. O Databricks é compatível com três opções:
-
Opção 1: Delta Sync Index with embeddings compute by Databricks O senhor fornece uma tabela de origem Delta que contém dados em formato de texto. O Databricks calcula os embeddings usando um modelo que o senhor especifica e, opcionalmente, salva os embeddings em uma tabela no Unity Catalog. À medida que a tabela Delta é atualizada, o índice permanece sincronizado com a tabela Delta.
O diagrama a seguir ilustra o processo:
- Calcular as incorporações da consulta. A consulta pode incluir filtros de metadados.
- Realizar pesquisa de similaridade para identificar os documentos mais relevantes.
- Retornar os documentos mais relevantes e acrescentá-los à consulta.
-
Opção 2: Delta Sync Index com embeddings aut ogerenciáveis O senhor fornece uma tabela de origem Delta que contém embeddings pré-calculados. À medida que a tabela Delta é atualizada, o índice permanece sincronizado com a tabela Delta.
O diagrama a seguir ilustra o processo:
- A consulta consiste em incorporações e pode incluir filtros de metadados.
- Realizar pesquisa de similaridade para identificar os documentos mais relevantes. Retornar os documentos mais relevantes e acrescentá-los à consulta.
-
Opção 3: Índice de acesso direto ao vetor O senhor deve atualizar manualmente o índice usando a API REST quando a tabela de embeddings for alterada.
O diagrama a seguir ilustra o processo:
Como configurar o Mosaic AI Vector Search
Para usar o Mosaic AI Vector Search, você deve criar o seguinte:
-
Uma pesquisa vetorial endpoint. Esse endpoint serve o índice de pesquisa de vetores. O senhor pode consultar e atualizar o endpoint usando a API REST ou o SDK. Consulte Criar uma pesquisa vetorial endpoint para obter instruções.
aumenta automaticamente para suportar o tamanho do índice ou o número de solicitações do concorrente. não são reduzidos automaticamente.
-
Um índice de pesquisa vetorial. O índice de pesquisa vetorial é criado a partir de uma tabela Delta e é otimizado para fornecer pesquisas de vizinhos mais próximos aproximados em tempo real. O objetivo da pesquisa é identificar documentos semelhantes à consulta. Os índices de pesquisa vetorial aparecem e são regidos pelo Unity Catalog. Consulte Criar um índice de pesquisa vetorial para obter instruções.
Além disso, se o senhor optar por ter Databricks compute os embeddings, poderá usar um Foundation Model pré-configurado APIs endpoint ou criar um modelo de serviço endpoint para servir o modelo de embedding de sua escolha. Consulte Pay-per-tokens Foundation Model APIs ou Create foundation servindo modelo endpoint para obter instruções.
Para consultar o modelo de serviço endpoint, o senhor usa o REST API ou o Python SDK. Sua consulta pode definir filtros com base em qualquer coluna da tabela Delta. Para obter detalhes, consulte Use filters on queries (Usar filtros em consultas), a referência da API ou a referência do Python SDK.
Requisitos
- Workspace habilitado para o Unity Catalog.
- sem servidor compute ativado. Para obter instruções, consulte Conectar-se a serverless compute .
- A tabela de origem deve ter a opção Alterar feed de dados ativada. Para obter instruções, consulte Usar o feed de dados de alteração do Delta Lake no Databricks.
- Para criar um índice de pesquisa vetorial, o senhor deve ter privilégios de CREATE TABLE no esquema de catálogo em que o índice será criado.
A permissão para criar e gerenciar o ponto de extremidade de pesquisa vetorial é configurada usando listas de controle de acesso. Consulte Pesquisa de vetores endpoint ACLs.
Proteção e autenticação de dados
O Databricks implementa os seguintes controles de segurança para proteger seus dados:
- Cada solicitação de cliente ao Mosaic AI Vector Search é logicamente isolada, autenticada e autorizada.
- O Mosaic AI Vector Search criptografa todos os dados em repouso (AES-256) e em trânsito (TLS 1.2+).
Mosaic AI Vector Search suporta dois modos de autenticação, entidade de serviço e acesso pessoal tokens (PATs). Para aplicativos de produção, o site Databricks recomenda que o senhor use a entidade de serviço, que pode ter um desempenho por consulta até 100 mseg mais rápido em relação ao acesso pessoal tokens.
-
entidade de serviço tokens. Um administrador pode gerar um token de entidade de serviço e passá-lo para SDK ou API. Veja usar entidade de serviço. Para casos de uso de produção, o site Databricks recomenda o uso de tokens de entidade de serviço.
Python# Pass in a service principal
vsc = VectorSearchClient(workspace_url="...",
service_principal_client_id="...",
service_principal_client_secret="..."
) -
Tokens de acesso pessoal. O senhor pode usar tokens de acesso pessoal para se autenticar em Mosaic AI Vector Search. Consulte tokens de autenticação de acesso pessoal. Se o senhor usar o SDK em um ambiente de Notebook, o SDK gera automaticamente tokens PAT para autenticação.
Python# Pass in the PAT token
client = VectorSearchClient(workspace_url="...", personal_access_token="...")
As chaves gerenciais do cliente (CMK) são compatíveis com endpoints criados a partir de 8 de maio de 2024.
Monitore o uso e os custos
A tabela do sistema de uso faturável permite que você monitore o uso e os custos associados aos índices e endpoints da pesquisa vetorial. Aqui está um exemplo de consulta:
WITH all_vector_search_usage (
SELECT *,
CASE WHEN usage_metadata.endpoint_name IS NULL THEN 'ingest'
WHEN usage_type = "STORAGE_SPACE" THEN 'storage'
ELSE 'serving'
END as workload_type
FROM system.billing.usage
WHERE billing_origin_product = 'VECTOR_SEARCH'
),
daily_dbus AS (
SELECT workspace_id,
cloud,
usage_date,
workload_type,
usage_metadata.endpoint_name as vector_search_endpoint,
CASE WHEN workload_type = 'serving' THEN SUM(usage_quantity)
WHEN workload_type = 'ingest' THEN SUM(usage_quantity)
ELSE null
END as dbus,
CASE WHEN workload_type = 'storage' THEN SUM(usage_quantity)
ELSE null
END as dsus
FROM all_vector_search_usage
GROUP BY all
ORDER BY 1,2,3,4,5 DESC
)
SELECT * FROM daily_dbus
Para obter detalhes sobre o conteúdo da tabela de uso de cobrança, consulte Referência da tabela de uso faturável do sistema. Consultas adicionais estão no exemplo de Notebook a seguir.
Sistema de pesquisa vetorial tabelas consultas Notebook
recurso e limites de tamanho de dados
A tabela a seguir resume os limites de tamanho de dados e recursos para endpoints e índices de pesquisa vetorial:
Recursos | Granularidade | Limite |
---|---|---|
Endpoints de pesquisa vetorial | Por workspace | 100 |
Incorporações | Por endpoint | 320.000.000 |
Dimensão de incorporação | Por índice | 4096 |
Índices | Por endpoint | 50 |
Colunas | Por índice | 50 |
Colunas | Tipos compatíveis: bytes, curto, inteiro, longo, flutuante, duplo, booleano, string, carimbo de data/horário, data | |
Campos de metadados | Por índice | 50 |
Nome do índice | Por índice | 128 caracteres |
Os limites a seguir se aplicam à criação e à atualização de índices de pesquisa vetorial:
Recursos | Granularidade | Limite |
---|---|---|
Tamanho da linha para o índice Delta Sync | Por índice | 100 KB |
Tamanho da coluna de origem de incorporações para o índice de sincronização Delta | Por índice | 32764 bytes |
Limite de tamanho de solicitação de upsert em massa para o índice vetorial direto | Por índice | 10 MB |
Limite de tamanho da solicitação de exclusão em massa para o índice vetorial direto | Por índice | 10 MB |
Os seguintes limites se aplicam à API de consulta.
Recursos | Granularidade | Limite |
---|---|---|
Comprimento do texto de consulta | Por consulta | 32764 bytes |
Número máximo de resultados retornados | Por consulta | 10.000 |
Limitação
Não há compatibilidade com permissões em nível de linha e coluna. No entanto, você pode implementar suas próprias ACLs em nível de aplicativo usando a API de filtro.