Pular para o conteúdo principal
O conjunto de dados dbpedia contém 1 milhão de artigos da Wikipedia e seus embeddings vetoriais gerados com o modelo text-embedding-3-large da OpenAI. Esse conjunto de dados é um excelente ponto de partida para entender embeddings vetoriais, busca por similaridade vetorial e IA generativa. Usamos esse conjunto de dados para demonstrar a busca aproximada de vizinhos mais próximos no ClickHouse e uma aplicação de perguntas e respostas simples, mas poderosa.

Detalhes do conjunto de dados

O conjunto de dados contém 26 arquivos Parquet disponíveis em huggingface.co. Os arquivos têm os nomes 0.parquet, 1.parquet, …, 25.parquet. Para ver algumas linhas de exemplo do conjunto de dados, acesse esta página do Hugging Face.

Criar tabela

Crie a tabela dbpedia para armazenar o ID do artigo, o título, o texto e o vetor de embedding:

Carregar tabela

Para carregar os dados de todos os arquivos Parquet, execute o seguinte comando no shell:
Como alternativa, é possível executar instruções SQL individuais, como mostrado abaixo, para carregar cada um dos 25 arquivos Parquet:
Verifique se 1 milhão de linhas aparece na tabela dbpedia:
Leitura recomendada: guia da OpenAPI sobre “Embeddings vetoriais ” A busca semântica (também chamada de busca por similaridade) usando embeddings vetoriais envolve as seguintes etapas:
  • Receber uma consulta de busca de um usuário em linguagem natural, por exemplo, “Fale-me sobre algumas viagens cênicas de trem”, “Romances de suspense ambientados na Europa” etc.
  • Gerar um vetor de embedding para a consulta de busca usando o modelo LLM
  • Encontrar os vizinhos mais próximos do vetor de embedding da busca no conjunto de dados
Os vizinhos mais próximos são documentos, imagens ou conteúdos que representam resultados relevantes para a consulta do usuário. Os resultados recuperados são a principal entrada para Retrieval Augmented Generation (RAG) em aplicações de IA generativa. A busca KNN (k - vizinhos mais próximos) ou busca por força bruta envolve calcular a distância entre cada vetor do conjunto de dados e o vetor de embedding usado na busca e, em seguida, ordenar essas distâncias para obter os vizinhos mais próximos. Com o conjunto de dados dbpedia, uma técnica rápida para observar visualmente a busca semântica é usar vetores de embedding do próprio conjunto de dados como vetores de busca. Por exemplo:
Query
Response
Anote a latência da consulta para que possamos compará-la com a latência da consulta ANN (usando índice vetorial). Registre também a latência da consulta com o cache de arquivos do SO frio e com max_threads=1 para identificar o uso real de compute e o uso da largura de banda de armazenamento (extrapole isso para um conjunto de dados de produção com milhões de vetores!)

Criar um índice de similaridade vetorial

Execute o SQL a seguir para definir e construir um índice de similaridade vetorial na coluna vector:
Os parâmetros e as considerações de desempenho para a criação e a busca de índices estão descritos na documentação. A criação e a gravação do índice podem levar alguns minutos, dependendo do número de núcleos de CPU disponíveis e da largura de banda do armazenamento. Approximate Nearest Neighbours ou ANN refere-se a um conjunto de técnicas (por exemplo, estruturas de dados especiais, como grafos e florestas aleatórias) que calculam resultados muito mais rapidamente do que a busca vetorial exata. A precisão dos resultados normalmente é “boa o suficiente” para uso prático. Muitas técnicas aproximadas oferecem parâmetros para ajustar o compromisso entre a precisão dos resultados e o tempo de busca. Depois que o índice de similaridade vetorial for criado, as consultas de busca vetorial usarão automaticamente o índice:
Query
Response

Gerando embeddings para consulta de busca

As consultas de busca por similaridade vistas até agora usam um dos vetores existentes na tabela dbpedia como vetor de busca. Em aplicações reais, o vetor de busca precisa ser gerado para uma consulta inserida pelo usuário, que pode estar em linguagem natural. O vetor de busca deve ser gerado usando o mesmo modelo de LLM usado para gerar vetores de embedding para o dataset. Um exemplo de script em Python é mostrado abaixo para demonstrar como chamar programaticamente a API da OpenAI para gerar vetores de embedding usando o modelo text-embedding-3-large. O vetor de embedding de busca é então passado como argumento para a função cosineDistance() na consulta SELECT. A execução do script exige que uma API key da OpenAI esteja definida na variável de ambiente OPENAI_API_KEY. A API key da OpenAI pode ser obtida após se registrar em https://platform.openai.com.

Aplicativo de demonstração de perguntas e respostas

Os exemplos acima demonstraram a busca semântica e a recuperação de documentos usando o ClickHouse. A seguir, apresentamos um exemplo de aplicação de IA generativa muito simples, mas com grande potencial. A aplicação executa as seguintes etapas:
  1. Recebe um tópico como entrada do usuário
  2. Gera um vetor de embedding para o tópico chamando a API da OpenAI com o modelo text-embedding-3-large
  3. Recupera artigos/documentos altamente relevantes da Wikipedia usando busca por similaridade vetorial na tabela dbpedia
  4. Recebe do usuário uma pergunta aberta, em linguagem natural, relacionada ao tópico
  5. Usa a API de Chat gpt-3.5-turbo da OpenAI para responder à pergunta com base no conhecimento contido nos documentos recuperados na etapa #3. Os documentos recuperados na etapa #3 são passados como contexto para a API de Chat e constituem o elo principal da IA generativa.
Abaixo, são apresentados primeiro alguns exemplos de conversa ao executar a aplicação de perguntas e respostas, seguidos pelo código da aplicação de perguntas e respostas. Para executar a aplicação, é necessário definir uma API key da OpenAI na variável de ambiente OPENAI_API_KEY. A API key da OpenAI pode ser obtida após o cadastro em https://platform.openai.com.
Código:
Última modificação em 2 de julho de 2026