Foi um encontro sem enrolação, no clima direto que marca o Beer and Code: o Virgo entrou já avisando que ninguém sairia dali com só teoria, e cumpriu — em poucos minutos saiu da explicação de embeddings para o terminal, migration e código Laravel rodando.
Destaques
- Teoria de embeddings do zero: por que Word2Vec (2003) ficou obsoleto e como os transformers (2018) resolveram o problema de uma mesma palavra mudar de sentido conforme o contexto ("banco" de praça vs. banco digital).
- Uso do Gemini Embeddings 2 (modelo multimodal, em preview desde março) para gerar embeddings de texto, imagem e vídeo juntos — tudo no mesmo espaço vetorial de 1536 dimensões.
- Modelagem de dados: tabela
post_embeddingsseparada do post (para permitir múltiplos embeddings por conteúdo no futuro), colunavectorcom extensãopgvectorgarantida via migration, e índice HNSW (grafo de vizinhos, complexidade O(log n) em vez de O(n)) para busca rápida. - Geração de embedding assíncrona via
PostObserver(afterCommit) + job que monta o payload multimodal (texto + mídia em base64) e chama a API do Gemini. - Cálculo do "gosto" do usuário como centroide: média, dimensão a dimensão, dos embeddings de todos os posts curtidos — sem gastar token nenhum de IA nesse passo, é matemática pura dentro do Laravel.
- Query final do feed com
ORDER BY post_embeddings.embedding <=> :centroid(operador de distância de cosseno), trazendo o feed já ordenado por similaridade ao gosto do usuário, com fallback para ordenação cronológica quando o usuário ainda não tem centroide. - Evolução para arquitetura de produção: retrieval em dois estágios, vetores de longo prazo (30-90 dias) e curto prazo (24-48h), exclusão de conteúdo já visto/denunciado, MMR para re-ranking e uma camada de observabilidade para explicar por que cada post apareceu no feed — tudo especificado em Spec Driven Development e implementado com Claude Code em loop (Ralph) até fechar as fases.
Profundidade técnica
A aula não fica no superficial: discute explicitamente por que JSON no MySQL não serve para embeddings (falta o operador de cálculo de distância), por que árvore binária não indexa colunas vetoriais, a diferença prática entre HNSW e IVFFlat, e o motivo de usar cosseno em vez de distância euclidiana (evita ter que normalizar o vetor). Também aborda decisões de engenharia de produto real: threshold de similaridade (0.7–0.8) como regra de negócio, o trade-off dimensões x custo x precisão, e as armadilhas de recalcular o centroide a cada like (custo O(n) que puxa para fila) versus manter incremental.
Faça parte do Clã
Se você quer ver esse tipo de arquitetura sendo construída ao vivo, tirar dúvida na hora e ter acesso a mais de 500 horas de conteúdo técnico sobre engenharia de IA (embeddings, RAG, agentes, MCP, spec driven development e muito mais), a hora é agora. O Clã Beer and Code reúne encontros semanais ao vivo, comunidade ativa no WhatsApp e workshops práticos como este — sem enrolação, sem curso de curso, só o que realmente funciona em produção.
Engenharia de IA virou profissão, e se aprende construindo, não assistindo. O Clã Beer and Code é o ambiente onde isso acontece ao vivo, toda semana: RAG, agentes, observabilidade e LLMOps em projetos reais, ao lado de quem já está em produção. É pago, é assinatura, e é exatamente o ambiente que estes encontros dão uma amostra.
Entrar no Clã