Pular para o conteúdo principal

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 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:

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:

recíproco de 1 mais a distância quadrada

onde dist é a distância euclidiana entre a consulta q e a entrada do índice x:

Distância euclidiana, raiz quadrada da soma das diferenças quadradas

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:

Equação RRF

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:

normalizaçã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:

    1. Calcular as incorporações da consulta. A consulta pode incluir filtros de metadados.
    2. Realizar pesquisa de similaridade para identificar os documentos mais relevantes.
    3. Retornar os documentos mais relevantes e acrescentá-los à consulta.

    O banco de dados de vetores calcula embeddings.

  • 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:

    1. A consulta consiste em incorporações e pode incluir filtros de metadados.
    2. Realizar pesquisa de similaridade para identificar os documentos mais relevantes. Retornar os documentos mais relevantes e acrescentá-los à consulta.

    banco de dados vetorial, incorporações pré-calculadas

  • 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:

    banco de dados vetorial, incorporações pré-calculadas sem sincronização automática

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

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:

SQL
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

Open notebook in new tab

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.

Recurso adicional