A publicidade de hoje exige mais do que apenas imagens atraentes. É preciso um criativo que realmente se adapte aos gostos, segmentos e expectativas de um público-alvo. Este é o natural próximo passo depois de entender seu público; usar o que você sabe sobre as preferências de um segmento para criar imagens que realmente repercutam (personalizadas para seu público).
A Geração Aumentada por Recuperação (RAG) Multimodal oferece uma maneira prática de fazer isso em escala. Ela funciona combinando uma compreensão baseada em texto de um segmento-alvo (por exemplo, “dono de cachorro que adora atividades ao ar livre”) com busca e recuperação rápidas de imagens reais semanticamente relevantes. Essas imagens recuperadas servem como contexto para gerar um novo criativo. Isso preenche a lacuna entre os dados do cliente e o conteúdo de alta qualidade, garantindo que o resultado se conecte com o público-alvo.
Esta postagem no blog demonstrará como a AI moderna, por meio da recuperação de imagens e do RAG multimodal, pode tornar os criativos de anúncios mais fundamentados e relevantes, tudo com tecnologia Databricks de ponta a ponta. Mostraremos como isso funciona na prática para uma marca hipotética de ração para animais de estimação chamada “Bricks”, que veicula campanhas com o tema de pets, mas a mesma técnica pode ser aplicada a quaisquer indústrias em que a personalização e a qualidade visual sejam importantes.
Esta solução transforma o entendimento do público em visuais relevantes e alinhados à marca, aproveitando o Unity Catalog, Agent Framework, Model Serving, inferência em lotes, Vector Search e Apps. O diagrama abaixo fornece uma visão geral de alto nível da arquitetura.
Como tudo flui pelo UC, o sistema é seguro por default, observável (rastreamento do MLflow na recuperação e geração) e fácil de evoluir (swap modelos, ajustar prompts). Vamos nos aprofundar.
Todos os ativos de imagem de pets (imagens semente de pets, imagem da marca e anúncios finais) ficam em um Volume UC, por exemplo:
Os Volumes do UC fornecem uma solução de armazenamento eficiente para nossos dados de imagem com um ponto de montagem FUSE e são úteis, pois permitem um único plano de governança. As mesmas ACLs se aplicam independentemente de você acessar os arquivos a partir de Notebooks, Endpoints de serviço ou do aplicativo Databricks. Isso também significa que não há keys de blob em nosso código. Passamos caminhos (não bytes) entre os serviços.
Para uma indexação e governança rápidas, espelhamos o Volume em uma tabela Delta que carrega os bytes brutos das imagens (como uma coluna BINARY) juntamente com os metadados. Em seguida, convertemos isso em uma string codificada em base64 (necessária para o endpoint de servindo modelo). Isso torna os trabalhos em lote downstream (como a incorporação) simples e eficientes.
Agora há uma tabela consultável e também preservamos os caminhos de Volume originais para facilitar a leitura humana e o uso em aplicativos.
CLIP é um codificador de imagem leve com um modelo codificador de texto transformer que é treinado por meio de aprendizado contrastivo para produzir embeddings de imagem e texto alinhados para classificação e recuperação zero-shot. Para manter a recuperação rápida e reproduzível, expomos os codificadores CLIP por trás de um endpoint de Model Serving do Databricks, que podemos usar tanto para consultas online quanto para inferência em lote offline. Nós simplesmente pacote o codificador como uma função pyfunc do MLflow, o registro como um modelo do UC e o servimos com um servindo modelo personalizado e, em seguida, o chamamos do SQL com ai_query para preencher a coluna de embeddings na tabela Delta.
Envolvemos o CLIP ViT-L/14 como um pequeno pyfunc que aceita uma strings de imagem base64 e retorna um vetor normalizado. Após o log, fazemos o registro do modelo para ser servido.
Fazemos o log do modelo usando o MLflow e o registro em um registro de modelo do UC.
Criamos um endpoint de serviço de GPU para o modelo registrado. Isso nos dá uma API versionada e de baixa latência que podemos chamar.
Com as imagens inseridas em uma tabela Delta, compute os embeddings no local usando SQL. O resultado é uma nova tabela com uma coluna image_embeddings, pronta para a Vector Search.
Depois de materializarmos os embeddings de imagem no Delta, nós os tornamos pesquisáveis com o Databricks Vector Search. O padrão é criar um índice do Delta Sync com embeddings autogerenciados, depois, em Runtime, incorporar o prompt de texto usando o CLIP e executar uma pesquisa de similaridade top-K. O serviço retorna resultados pequenos e estruturados (caminhos + metadados opcionais), e passamos os caminhos do Volume do UC adiante (não bytes brutos) para que o resto do pipeline permaneça leve e governado.
Crie um índice de vetor uma única vez. Ele sincroniza continuamente a partir da nossa tabela de incorporações e atende a queries de baixa latência.
Como o índice é sincronizado com o Delta, quaisquer novas linhas da tabela de embeddings (ou linhas de embeddings atualizadas) serão indexadas automaticamente. O acesso à tabela e ao índice herda as ACLs do Unity Catalog, portanto, você não precisa de permissões separadas.
Na inferência, incorporamos o prompt de texto e consultamos os três principais resultados com a pesquisa de similaridade.
Quando passarmos os resultados para o agente mais tarde, manteremos a resposta mínima e acionável. Retornamos apenas os caminhos UC classificados que o agente irá percorrer (se um usuário rejeitar a imagem semente inicial) sem consultar novamente o índice.
Aqui, criamos um endpoint que aceita um prompt de texto curto e orquestra dois os passos:
Esta segunda parte é opcional e controlada por um seletor, dependendo se queremos a execução da geração da imagem ou apenas a recuperação.
Para o passo de geração, estamos chamando o Replicate usando o modelo Kontext multi-image max. Essa escolha é pragmática:
Chamada de geração:
Gravação de volta no Volume UC: decodifique o base64 do gerador e grave por meio da API de Arquivos:
Se desejado, é fácil substituir Kontext/Replicate por qualquer API de imagem externa (p. ex., OpenAI) ou um modelo interno servido no Databricks sem alterar o resto do pipeline. Basta substituir os componentes internos do método _replicate_image_generation e manter idênticos o contrato de entrada (bytes da semente do pet + bytes da marca) e a saída (bytes PNG → upload no UC). O agente de chat, a recuperação e o aplicativo permanecem os mesmos porque operam em caminhos UC, e não em payloads de imagem.
O agente de chat é um endpoint de serviço final que contém a política de conversação e chama o endpoint de geração de imagem como uma ferramenta. Ele propõe um tipo de pet, recupera as imagens semente candidatas e só gera a imagem final do anúncio com a confirmação do usuário.
O esquema da ferramenta é mantido de forma minimalista:
Em seguida, criamos a função de execução da ferramenta, onde o agente pode chamar o endpoint image-gen, que retorna uma resposta JSON estruturada.
O parâmetro replicate_toogle controla a geração de imagem.
Por que dividir os Endpoints?
Separamos os Endpoints do agente de chat e de geração de imagem por alguns motivos:
O acima é tudo construído no Databricks Agent Framework, que nos fornece as ferramentas para transformar recuperação + geração em um agente confiável e governado. Primeiro, a estrutura nos permite registro o serviço de geração de imagem (incluindo o Vector Search) como ferramentas e invocá-las deterministicamente a partir da política/prompt. Ele também nos fornece um scaffolding de produção pronto para uso. Usamos a interface ResponsesAgent para o loop de chat, com MLflow tracing em cada o passo. Isso oferece observabilidade total para depuração e operação de um fluxo de trabalho de várias etapas em produção. A MLflow tracing UI nos permite explorar isso visualmente.
O aplicativo Streamlit apresenta uma experiência de conversação única que permite que o usuário converse com o agente de chat e renderiza as imagens. Ele combina todas as peças que construímos em uma experiência de produto única e governada.
Como tudo se encaixa:
Abaixo são mostrados os dois key pontos de contato no código do aplicativo. Primeiro, chame o endpoint do agent:
E renderizar pelo caminho do UC Volume:
Vamos conhecer um fluxo único que conecta todo o sistema. Imagine que um comerciante queira gerar uma imagem de anúncio de pet personalizada para “jovens profissionais urbanos”.
O agente de chat interpreta o segmento e propõe um tipo de pet, por exemplo, um buldogue francês.
Com a resposta “sim”, o agent chama o endpoint image-gen em modo de recuperação e retorna as três principais imagens (caminhos de volume) do Vector Search, classificadas por similaridade. O aplicativo exibe o candidato nº 0 como a imagem semente.
Se o usuário disser algo como “parece bom”, nós prosseguimos. Se disserem “não é bem isso”, o agente incrementa seed_index para 1 (depois 2) e reutiliza o mesmo conjunto top 3 (sem query vetoriais extras) para mostrar a próxima opção. Se, após três imagens, o usuário ainda não estiver satisfeito, o agente sugerirá uma nova descrição de pet e triggerá outra chamada da Vector Search. Isso mantém a UX ágil e determinística.
Após a confirmação, o agente chama o endpoint novamente com replicate_toggle=true e o mesmo seed_index. O endpoint lê a imagem semente escolhida do UC, combina-a com a imagem da marca, executa o gerador Kontext multi-image-max no Replicate e, em seguida, faz o upload do PNG final de volta para um Volume UC. Apenas o caminho do UC é retornado. O app então faz o download da imagem e a renderiza de volta para o usuário.
Neste blog, demonstramos como o RAG multimodal possibilita a personalização avançada de anúncios. Ancorar a geração na recuperação de imagens reais é a diferença entre visuais genéricos e um criativo que repercute em um público específico. Isso permite:
O Databricks garante aplicações escaláveis, governadas e de alto desempenho. Esta arquitetura permanece pronta para produção, com cada o passo executado de ponta a ponta dentro da plataforma:
O resultado é um agente RAG modular e governado que transforma as percepções do público em criativos de alta qualidade e alinhados à marca em escala.
(This blog post has been translated using AI-powered tools) Original Post
Setores
November 13, 2025/3 min de leitura
Saúde e ciências da vida
December 1, 2025/5 min de leitura