Busca Semântica e RAG
Quer que seu app entenda o significado do que o usuário digita, não só as palavras exatas? Quer que ele encontre "documentos parecidos com este" ou responda perguntas baseadas no conteúdo que o próprio usuário cadastrou? Esse é o terreno da busca semântica e do RAG (Retrieval-Augmented Generation), e o Skip suporta tudo isso nativamente em apps construídos com Skip Cloud.
Quando usar
Procure por busca semântica quando o seu app precisar de qualquer uma destas capacidades:
- Busca por significado, não por palavra exata. "Mostra minhas notas sobre produtividade" deve encontrar uma nota chamada "Gerenciando meu tempo" mesmo que a palavra "produtividade" não apareça nela.
- "Encontre similares". "Artigos parecidos com este", "produtos similares", "clientes com perfil parecido".
- Chat com seus dados (RAG). O usuário faz uma pergunta em linguagem natural e o app responde usando o conteúdo cadastrado como base — tipo um "ChatGPT que só conhece os meus documentos".
- Deduplicação ou agrupamento por similaridade. "Agrupa estes chamados por assunto", "encontra anúncios duplicados".
Se o seu app só precisa de busca por palavra-chave (LIKE, match exato), você não precisa de busca semântica. Use um campo de texto normal e um filtro simples.
O que é preciso
:::info Pré-requisitos
-
Backend Skip Cloud — a busca semântica é uma funcionalidade exclusiva do Skip Cloud. Apps configurados com Supabase seguem um caminho diferente (pgvector) que também é suportado, mas esta página cobre apenas o Skip Cloud.
-
Uma chave de API de um provedor de embeddings — o Skip precisa transformar o texto em "vetores" (os números que representam o significado), e isso é feito por um serviço externo. Você escolhe qual serviço usar:
- OpenAI — platform.openai.com. É o mais comum e provavelmente o que o Skip vai sugerir se você não tiver preferência. Custo baixíssimo (centavos para milhares de documentos).
- Cohere, Voyage AI, ou outros provedores equivalentes.
- Ollama (self-hosted) — se você já roda um servidor Ollama próprio, o Skip pode usar ele e o custo é zero. Requer infraestrutura adicional.
Qualquer um funciona — diga para o Skip qual você prefere quando pedir a feature.
:::
Configurando a chave do provedor
Antes de pedir para o Skip construir a feature, adicione a chave do provedor escolhido como um secret no seu app:
- Abra seu app no Skip
- Vá em Skip Cloud → Secrets (no painel lateral)
- Clique em Adicionar secret
- Nome: dependendo do provedor, use um nome claro. Exemplos:
- OpenAI →
OPENAI_API_KEY - Cohere →
COHERE_API_KEY - Voyage →
VOYAGE_API_KEY
- OpenAI →
- Valor: a chave que você obteve no painel do provedor
- Salve
Esse secret fica protegido no servidor — ele nunca é exposto para o frontend nem para usuários do seu app. Só o código que o Skip gera no backend consegue usá-lo.
Como pedir para o Skip
Depois que a chave estiver configurada, é só pedir em linguagem natural. Alguns exemplos de prompts que funcionam bem:
- "Adiciona busca semântica nas notas usando OpenAI. Quero digitar uma frase e encontrar notas com significado parecido, não só palavras iguais."
- "Transforma o meu app num RAG: o usuário faz uma pergunta e você responde usando os documentos que eu cadastrei como base de conhecimento. Use Cohere para os embeddings."
- "Na listagem de produtos, adiciona um botão 'produtos similares' que mostra 5 produtos parecidos com o que o usuário está vendo."
- "Quero uma caixa de pesquisa no topo da página que busca por significado nos meus artigos, não por palavra-chave."
Se você não mencionar o provedor, o Skip provavelmente vai te perguntar ou sugerir OpenAI como ponto de partida.
O Skip vai:
- Adicionar um campo do tipo vetor na coleção relevante (ex: em
notas, cria o campoembedding) - Criar um hook que, toda vez que um registro é salvo, chama o provedor de embeddings para transformar o texto em um vetor e armazena no campo
- Criar uma rota de busca no backend que recebe a pergunta do usuário, converte em vetor (também via o provedor), e retorna os registros mais parecidos
- Adicionar um componente de busca no frontend que chama a nova rota e exibe os resultados
Tudo isso em uma única iteração, sem você precisar entender vetores, embeddings ou APIs de machine learning.
O que o Skip gera
Para você ter uma noção do que acontece por baixo dos panos (sem precisar tocar no código):
- No banco de dados, um campo do tipo
vectoré criado na coleção. Ele armazena uma lista de números (quantos depende do provedor — por exemplo, 1536 por registro com o modelo OpenAI mais comum) que representa o significado do texto. - No backend, um hook intercepta cada criação/atualização de registro, envia o texto para o provedor de embeddings, e salva o vetor retornado no campo.
- Uma nova rota
/backend/v1/search/<coleção>recebe perguntas em texto, converte para vetor via o mesmo provedor, e busca os registros mais próximos usando um índice otimizado embutido no Skip Cloud. - No frontend, um componente de busca (caixa de texto, botão, lista de resultados) consome essa rota.
O Skip cuida de todos os detalhes: criação do campo, manutenção dos vetores quando o texto muda, tratamento de erros, regras de acesso (quem pode ver seus dados continua seguindo as mesmas regras — a busca respeita autenticação), e ordenação por similaridade.
Testando a busca
Depois que o Skip construir a feature:
- Cadastre alguns registros de exemplo com conteúdo variado. Para busca semântica funcionar bem, você precisa de pelo menos uns 10-20 registros — com muito pouco dado, os resultados não fazem sentido.
- Aguarde alguns segundos depois de cadastrar cada registro. Gerar o embedding leva uma fração de segundo, mas o hook roda em background em alguns casos.
- Digite uma busca usando palavras diferentes das que aparecem no conteúdo, para testar se a busca está mesmo entendendo o significado. Se você buscar "produtividade" e só encontrar registros que literalmente contêm essa palavra, a busca ainda está no modo "palavra-chave" — peça para o Skip revisar.
- Verifique a ordem. Os resultados mais similares devem aparecer primeiro. Se parecerem aleatórios, provavelmente está faltando o campo
embeddingestar sendo populado corretamente — peça para o Skip investigar.
Limitações
- Precisa de conteúdo em texto. Vetores são gerados a partir de texto. Para imagens, áudio ou vídeo, o caminho é diferente (modelos multi-modais) e fora do escopo desta página — pergunte ao Skip se precisar.
- Custa (geralmente pouco) para cada embedding. Toda vez que o Skip envia texto para o provedor de embeddings, você paga pelo uso — o custo varia por provedor, mas para a maioria dos apps fica abaixo de US$ 1 por mil documentos. Se estiver preocupado com custo, provedores self-hosted como Ollama são grátis depois de configurados.
- Busca semântica não substitui busca por palavra exata. Se o usuário precisa encontrar um número de pedido, um CPF ou um código, busca por palavra-chave é mais apropriada. Você pode combinar os dois — peça para o Skip adicionar "busca híbrida".
- Trocar de provedor depois é destrutivo. Provedores diferentes geram vetores de tamanhos diferentes e os vetores não são compatíveis entre si. Se depois de implementado você quiser trocar OpenAI por Cohere (ou mudar de modelo dentro do mesmo provedor), o Skip precisa apagar todos os vetores existentes e regenerá-los do zero. Peça isso só quando tiver certeza.
Ainda com dúvidas?
- Aulas em Vídeo: Confira a trilha de capacitação.
- Grupo Suporte: Grupo do WhatsApp.
- Email: support@usecurling.com