Conceitos e Exemplos Práticos
A. Modelos de Diálogo (DialoGPT e Conversational Pipelines)
Conceito: Diferente de um modelo de classificação (que apenas rotula), modelos de diálogo são treinados em estruturas de Turn-taking (Troca de turnos). Eles entendem que uma frase é uma resposta a uma anterior.
Exemplo Prático: Se o usuário diz "Estou triste", o modelo não apenas extrai a label SAD, mas gera uma resposta empática: "Sinto muito por isso. Que tal uma música para te confortar?"
B. Gerenciamento de Estado (Session State)
Conceito: Em chatbots, é necessário manter uma "memória de curto prazo" para que a conversa não pareça uma sequência de frases isoladas.
Exemplo Prático: Se o usuário pede "algo animado" e depois diz "mais uma", o chatbot precisa saber que "mais uma" se refere a "algo animado" (o último sentimento consultado).
C. Interfaces Reativas com Gradio
Conceito: O Gradio permite criar um front-end para modelos de IA com poucas linhas de Python, facilitando o teste de usabilidade (UX) sem precisar de HTML/JavaScript complexo.
Etapa 3 - Implementação
conceitos
Pipeline Conversational: Uso do pipeline("conversational") do Hugging Face para gerenciar o histórico da conversa automaticamente.
Mapeamento de Intenção (Intent Mapping): Identificar se o usuário quer uma recomendação ou apenas bater papo.
Integração com o Recommender: O chatbot atua como o "controlador", chamando a lógica da Etapa 2.
Código Fonte: Chatbot Playcatch com Gradio:
import gradio as gr
from transformers import pipeline, Conversation
import pandas as pd
1. SETUP DO MODELO CONVERSACIONAL
Usando DialoGPT-medium para respostas mais naturais
chatbot_model = pipeline("conversational", model="microsoft/DialoGPT-medium")
Mock do Recommender da Etapa 2 (Integrar com seu código anterior)
def get_mock_recommendation(mood):
# Simulação de busca no CSV da Etapa 1/2
catalog = {
"feliz": ["Festa em Goiás - Artista X", "Alegria Geral - Banda Y"],
"melancolico": ["Chuva de Saudade - Cantor Z", "Solidão no Campo - Dupla W"]
}
return catalog.get(mood.lower(), ["Música Genérica - Playcatch"])
2. LÓGICA DO CHATBOT
def playcatch_chat(message, history):
"""
message: entrada do usuário
history: lista de tuplas [(user, bot), ...] mantida pelo Gradio
"""
# Lógica Simples de Intenção (Keywords)
# Em produção, usaríamos um classificador de intenção (NLU)
mood = None
if "animado" in message or "feliz" in message:
mood = "feliz"
elif "triste" in message or "relaxar" in message or "melancolico" in message:
mood = "melancolico"
if mood:
recs = get_mock_recommendation(mood)
response = f"Entendi que você está se sentindo {mood}. Aqui estão algumas sugestões: {', '.join(recs)}. Gostaria de ouvir mais?"
else:
# Se não detectar humor, usa o modelo de diálogo para responder
conv = Conversation(message)
# Adiciona histórico se necessário (opcional para simplicidade)
result = chatbot_model(conv)
response = result.generated_responses[-1]
return response
3. INTERFACE GRADIO (ChatInterface)
Big O: O(N) para processar o histórico a cada turno
demo = gr.ChatInterface(
fn=playcatch_chat,
title="Playcatch: Seu Assistente Musical",
description="Diga como você está se sentindo e eu encontro a trilha sonora perfeita.",
examples=["Quero ouvir algo animado", "Estou um pouco triste hoje", "Me indique uma música para relaxar"]
)
if name == "main":
demo.launch()