I’m not dog no! Usando Música BREGA para aprender sobre IA e RAG 🍻
Pra quem me conhece, não é segredo que eu gosto de duas coisas: IA e BREGA.
A primeira não é surpresa, fez parte dos meus estudos desde a época da faculdade e ativamente faz parte do meu cotidiano no trabalho. A segunda também não, afinal, quem não se emociona ao som de ‘Garçom, aqui, nessa mesa de bar…’? 🍺
Mas, infelizmente, esses não são dois assuntos que se conversam muito bem…
Por uma razão muito simples: AS IAS SÃO PÉSSIMAS EM MÚSICA BRASILEIRA!
Com exceção dos cantores e bandas gigantes, que alcançam fama internacional, as ferramentas mais famosas de IA - ChatGPT, Gemini, Copilot, Claude - Simplesmente não parecem ter conhecimento básico de músicas de artistas brasileiros e se embananam com perguntas simples sobre eles.
Questionamentos como 'Qual o cantor da música X', 'Qual o nome da música que tem o verso: bla bla bla bla?' geralmente recebem respostas esdrúxulas e sem nexo com a realidade.
Mas isso é esperado.
Essas ferramentas de IA são aparatos estatísticos, que geram textos meramente a partir de probabilidades extraídas dos conjunto de dados de treinamento e, como são treinadas majoritariamente com dados em inglês, é normal que não respondam tão bem em assuntos mais específicos do nosso idioma.
E isso é um defeito conhecido das IAs Generativas - elas geralmente performam ‘mal’ ao gerar textos para contextos específicos distantes do conteúdo que foi utilizado para treiná-las.
📢 Com ‘performar mal’ eu me refiro aos momentos em que a IA gera textos que não são satisfatórios aos seres humanos, não existe uma métrica objetiva para quantificar essa performance, é algo subjetivo e empírico.
Para mitigar esse problema o pessoal inventou todo tipo de gambiarra e hoje nós vamos dar uma olhada no RAG (Retrieval Augmented Generation) e como ele pode nos ajudar a gerar respostas ‘melhores’ com IA para esse tópico de valor nacional inestimável: A música brega.
Vamos discutir um pouco de teoria e no fim comparar o desempenho do ChatGPT normal contra o ChatGPT com RAG a partir de uma aplicação web que eu desenvolvi.

O que é o RAG?
Se a IA está respondendo mal aos meus questionamentos sobre determinado assunto por não ter conhecimento dos textos daquele assunto, é só eu entregar esses textos junto da pergunta que eu enviar, certo?
É como uma prova com consulta, onde a IA é o aluno e a sua pergunta é a questão.
Por exemplo, ao invés de apenas perguntar:
ChatGPT, o que diz a Lei de Acesso à Informação sobre dados pessoais?
Você vai dizer
ChatGPT, o que diz a Lei de Acesso à Informação sobre dados pessoais?
Aqui o texto da Lei na íntegra:
Art. 1º Esta Lei dispõe sobre ...
E esperar que, com o contexto adicional, o modelo responda mais acertadamente (nem sempre acontece).
Mas essa abordagem limites. Modelos de IA só conseguem processar uma quantidade limitada de palavras por vez e, conforme o volume aumenta, as qualidade das respostas tende a diminuir. É texto demais pra a IA processar.
Por isso, o ideal é fornecer somente os textos relacionados ao que está sendo perguntado.
A seleção manual é viável para casos pontuais, onde o usuário já tem ideia de quais documentos podem auxiliar nas respostas, mas impraticável para grandes contextos, como órgãos públicos e grandes empresas, que possuem dezenas de milhares de documentos, normativos, regras, despachos, etc.
Por exemplo, pense na pergunta
ChatGPT, o que dizem as leis brasileiras sobre distribuição
de insulina no contexto da saúde pública?
Tanto não é viável fornecer ao ChatGPT todas as leis do Brasil, como fazer uma seleção manual das leis relevantes é um trabalho muito custoso.
Se faz necessário uma forma automática de recuperar os documentos relevantes para gerar uma resposta melhor à pergunta do usuário - Esse é o objetivo do RAG.
Como o RAG funciona?
O fluxo do RAG é o seguinte:
- O usuário submete a pergunta ao ChatBot
- A aplicação consulta o banco de dados e busca os Top-10 documentos mais similares à questão enviada (esse é o passo difícil, detalhado mais abaixo)
- O texto dos documentos é anexado junto à pergunta original do usuário e enviado à IA
- A IA gera a resposta, que é retornada ao usuário
sequenceDiagram
actor U as 👤 Usuário
participant C as Chatbot
participant DB as 🗄️ Banco de Documentos
U->>C: Envia pergunta
C->>DB: Busca documentos similares à pergunta
DB-->>C: Retorna Top 10 documentos
C->>C: Gera resposta (pergunta + documentos)
C-->>U: Retorna resposta
O pulo do gato está no passo 2, como fazemos para identificar quais documentos são úteis para a pergunta do usuário?
A resposta é: Com mais IA! O que pode dar errado?
Para isso, precisamos entrar numa pequena tangente e entender um pouco mais sobre Text Embedding.
Text Embedding e como medir a semelhança entre textos
O desejo de computar a SEMELHANÇA entre dois textos existe há muito tempo nas áreas da ciência da computação e recuperação da informação. Diversas abordagens foram propostas ao longo das décadas mas, na área de Inteligência Artificial, a técnica mais utilizada é a transformação de textos em vetores mutidimensionais para posterior cálculo de similaridade com alguma operação matemática.
A técnica Bag of Words, por exemplo, transforma cada texto em um vetor de tamanho N (em que N é o número total de palavras no vocabulário), com cada posição representando quantas vezes uma determinada palavra aparece no texto, exemplo:
Se tivermos os textos “O gato come o rato” e “O cachorro não come o cachorro, o cachorro come o gato”, teremos os seguintes vetores (sequência de números):
| O | Gato | Come | Rato | Cachorro | Não | |
|---|---|---|---|---|---|---|
| O gato come o rato | 2 | 1 | 1 | 1 | 0 | 0 |
| O cachorro não come o cachorro o cachorro come o gato | 4 | 1 | 2 | 0 | 3 | 1 |
Assim, podemos atribuir uma ‘distância’ a esses 2 textos a partir da quantidade de palavras que eles diferem.
| O | Gato | Come | Rato | Cachorro | Não | |
|---|---|---|---|---|---|---|
| O gato come o rato | 2 | 1 | 1 | 1 | 0 | 0 |
| O cachorro não come o cachorro o cachorro come o gato | 4 | 1 | 2 | 0 | 3 | 1 |
| Diferença Total = 6 | 2 | 0 | 1 | 0 | 3 | 0 |
Isso nos permite ‘computar’ quais documentos de um conjunto são mais ‘similares’ a um texto de referência.
A estratégia mais moderna - e mais usada no contexto do RAG - é o uso de vetores semânticos.
Text Embedding ou Vetorização Textual são os nomes usados para se referir à técnica de transformar textos em vetores numéricos. Embedding normalmente é o termo usado quando falamos de vetores semânticos.
São vetores de tamanho reduzido (geralmente de 100 a 10.000 dimensões) que representam o “significado de um texto” (na minha opinião, isso é debatível). Eles são mais ou menos assim:
[ 0.73, -0.18, 0.94, -0.66, 0.12, -0.51, 0.38, 0.07, -0.82, 0.59,
-0.24, 0.91, -0.13, 0.46, -0.77, 0.28, 0.64, -0.39, 0.05, -0.97]
Sem entrar muito em detalhes, esses vetores normalmente são um subproduto do treinamento dos LLMs (Large Language Models - ChatGPT, Gemini, etc, que seguem a arquitetura Transformers), os valores individuais não significam muita coisa, mas foi empiricamente percebido que a semelhança matemática (distancia euclidiana, semelhança cosseno, etc) deles é uma boa aproximação para a semelhança de significado dos textos. Isto é, textos que tratam de assuntos semelhantes tendem a ter vetores numéricos semelhantes também.
Com essas informações, conseguimos detalhar melhor o fluxo, incluindo o passo de inicial preparação da base de documentos e detalhando melhor como funciona a busca de documentos relevantes.
- Preparação da base: Os vetores dos textos da base de documentos são gerados e armazenados em algum banco junto ao texto original.
- O usuário submete a pergunta ao ChatBot
- Busca dos documentos mais relevantes
- A pergunta do usuário é vetorizada (com o mesmo algoritmo dos textos)
- O vetor da pergunta do usuário é comparado com os vetores da base de documentos
- São selecionados os top-N documentos mais similares à pergunta do usuário de acordo com alguma métrica (distancia euclidiana, cosseno, etc)
- O texto dos documentos é anexado junto à pergunta original do usuário e enviado à IA
- A IA gera a resposta, que é retornada ao usuário
A imagem abaixo exemplifica visualmente o funcionamento do fluxo

O ChatGPT consegue ser brega?
Para materializar tudo isso que foi discutido, desenvolvi uma aplicação mega simples que nos permite comparar lado a lado as respostas do ChatGPT ‘puro’ com as respostas do ChatGPT incrementado com RAG quando o assunto é letras de músicas brasileiras.

Preparei uma base com ~6mil músicas, coloquei algumas de artistas do BREGA e misturei com outras de artistas brasileiros diversos, para trazer mais variedade à base.
Reginaldo Rossi
Falcão
Zezo
José Augusto
Roberto Carlos
Fagner
Ivete Sangalo
João Gomes
Erasmo Carlos
Flavio José
Alceu Valenca
Marisa Monte
Pinduca
Joelma
Chitaozinho e Xororo
Bruno e Marrone
Utilizei a API oficial da OpenAI tanto para gerar os vetores/embeddings dos documentos quanto para gerar as respostas do ChatBot. Todo o código está disponível no Github, caso queira reproduzir na sua máquina local, você só vai precisar de um ambiente linux com Docker e uma conta na OpenAI com alguns créditos (1 real dá e sobra).
Vamos analisar algumas respostas.

Qual o resto desse refrão? 'Eu era a raposa e você era as uvas ...'
# ChatGPT Normal
Desculpe, mas não posso fornecer a letra da música.
Posso ajudar com um resumo ou análise da canção, se desejar!
# ChatGPT + RAG**
Eu era a raposa
Você era as uvas
E eu sempre querendo
Teu beijo roubar
ChatGPT totalmente perdido! Ponto pro RAG.

Tem uma música sobre faraó que eles cantam eeee faraó, qual é e quem cantou ela?
# ChatGPT Normal
A música que você está se referindo é "Faraó, Faraó".
Ela foi popularizada pelo grupo de música infantil "Banda Família Lima".
A canção é bastante conhecida e frequentemente cantada em eventos e apresentações.
# ChatGPT + RAG
A música é "Faraó Divindade do Egito" e é cantada por Ivete Sangalo.
Até onde eu pesquisei, essa música comentada pelo ChatGPT normal não existe!

Quem canta a música 'Evidências'?
# ChatGPT Normal
A música 'Evidências' é cantada por Chitãozinho e Xororó
# ChatGPT + RAG
A música "Evidências" foi interpretada por diversos artistas, incluindo:
- Roberto carlos
- Chitãozinho & Xororó
- José Augusto
- Bruno & Marrone
Aqui, os dois acertaram! Músicas famosas funcionam bem no ChatGPT normal, pois elas provavelmente aparecem várias vezes na base de treinamento do modelo.

Quem canta aquela música que tem o refrão 'e agora, que faço eu da vida sem você?
# ChatGPT Normal
A música que contém o refrão
"e agora, que faço eu da vida sem você" é "Como Eu Queria" de Risco.
A música se tornou muito popular e é bem lembrada por essa parte marcante.
# ChatGPT + RAG
A música com o refrão "e agora, que faço eu da vida sem você"
é interpretada por Jose Augusto, na canção "Não Vivo Sem Você".
Erro duplo! A música é de Caetano Veloso, Você Não Me Ensinou a Te Esquecer.
Essa música não está na base de documentos RAG, ou seja, ele não possui vantagem sobre o ChatGPT normal nesse caso.
Conclusão
OpenAI, Microsoft, Google… A gente chegou num ponto em que todas as IAs do mercado se parecem muito! Nesse cenário, não importa mais se é o GPT 3.5.1.2 ou Gemini 10x Extra Large Pro Max, a real vantagem desses modelos não sai da ‘performance crua’ deles em si, mas de como nós conseguimos utilizar eles de forma eficiente no nosso dia a dia.
Na minha experiência, utilizar esses modelos para automatizar etapas de fluxos muito específicos ou resolver problemas muito fora da caixinha é extremamente complicado. As respostas geradas são insatisfatórias e imprevisíveis. O RAG é uma tentativa de minimizar esse tipo de problema, empoderando os LLMs com mais informação contextual para que eles possam ser mais eficientes.
Naturalmente, os exemplos que eu mostrei acima são selecionados a dedo, para não ficar um post ruim de ler. Durante meus testes, a performance do RAG foi sim melhor para músicas que estão na base de documentos mas, por vezes, os textos recuperados não são muito úteis e acabam atrapalhando na resposta.
No fim, é importante ressaltar que o RAG não é uma SOLUÇÃO, é uma ABORDAGEM. Uma tentativa de ‘domar’ os modelos a partir de um contexto ‘mais bem informado’, mas que trás mais complexidade à aplicação, pois introduzimos diversas variáveis a serem otimizadas: qual o melhor algoritmo de embedding? Qual métrica de similaridade usar para comparar vetores? Quantos documentos recuperar da base? Vamos armazenar os documentos inteiros ou em fatias? Qual o melhor tamanho dos vetores? e por aí vai…
Espero que esse post tenha lhe ajudado a entender um pouco mais do RAG, vantagens , dificuldades e como ele pode ser implementado para ajudar a resolver um problema na prática. Por fim, não sou um especialista na área, esse é apenas um experimento rudimentar com dados extremamente simples, recomendo fortemente mais leitura, caso queira se aprofundar no assunto.
Obrigado por ler e até a próxima!