import os import gradio as gr from crewai import Task, Agent, LLM from youtube import pesquisar_videos_youtube import time # Para simular a progressão GROQ_API_KEY_01 = os.getenv("GROQ_API_KEY_01") groqllm = LLM( model="groq/llama-3.3-70b-versatile", api_key=GROQ_API_KEY_01 ) GROQ_API_KEY_02 = os.getenv("GROQ_API_KEY_02") groqllm2 = LLM( model="groq/llama-3.3-70b-versatile", api_key=GROQ_API_KEY_02 ) def processar_topicos(topicos_str): """ Converte uma string de tópicos separada por vírgulas em uma lista tratada. """ return [t.strip() for t in topicos_str.split(',') if t.strip()] def executar_equipe_interface(disciplina, assunto, topicos_str, horas, dias): topicos = processar_topicos(topicos_str) solicitacao = f"Disciplina: {disciplina}\nAssunto: {assunto}\nTópicos: {topicos}\n" yield "Buscando vídeos no YouTube...", gr.update(value=10) entradaYoutube = pesquisar_videos_youtube(solicitacao) # Motivação yield "Criando mensagem motivacional...", gr.update(value=30) agentMotivador = Agent( role='Motivador', goal='Escrever uma mensagem motivacional para o estudante.', backstory='Você é um coach motivacional com experiência em ajudar estudantes a manterem o foco.', llm=groqllm, verbose=True ) taskMotivador = Task( description = ( "Escreva uma mensagem motivacional para o estudante, formatada em Markdown.\n\n" "A mensagem deve conter:\n" "## Mensagem Motivacional 🎯\n\n" "- Um parágrafo inicial incentivando o estudante a seguir seus estudos.\n" "- Frases inspiradoras para manter o foco e a disciplina.\n" "- Um fechamento encorajador, reforçando a importância do esforço e da dedicação.\n\n" "O texto deve ser positivo, motivador e adequado para estudantes de ensino médio." ), agent=agentMotivador, expected_output='Mensagem motivacional em markdown.' ) saidaMotivador = agentMotivador.execute_task(taskMotivador) # Guia de Estudos yield "Gerando guia de estudos...", gr.update(value=50) agentGuia = Agent( role="Especialista em Guia de Estudos", goal="Criar um guia de estudos estruturado, explicativo e didático sobre um determinado assunto.", backstory="Você é um especialista em educação, com experiência na criação de guias de estudo detalhados.", llm=groqllm, verbose=True ) taskGuia = Task( description = ( f"Crie um Guia de Estudos para {disciplina}, abordando {assunto} e os tópicos {topicos}. " "O guia deve seguir a seguinte estrutura e formatação:\n\n" "## Guia de Estudos: {disciplina}\n\n" "### Introdução\n" "- Texto introdutório justificado sobre o tema, destacando sua importância e contexto.\n\n" "### Conceitos Fundamentais\n" "- Explicação detalhada dos principais conceitos abordados, com exemplos práticos.\n" "- Utilize listas desordenadas para estruturar os conceitos.\n\n" "### Aplicações Práticas\n" "- Explique como o tema se aplica no mundo real.\n" "- Utilize exemplos concretos e listas para organizar as aplicações.\n\n" "### Técnicas de Aprendizado e Dificuldades Comuns\n" "- Apresente métodos eficazes para aprender o tema.\n" "- Liste dificuldades comuns dos alunos e estratégias para superá-las.\n\n" "### Indicação de Materiais Gratuitos\n" "- Forneça sugestões de livros, vídeos e artigos gratuitos sobre o tema.\n" "- Apresente os materiais em formato de lista com títulos e links quando possível.\n\n" "O conteúdo deve ser didático, acessível para alunos do ensino médio e utilizar texto justificado sempre que possível." ), agent=agentGuia, expected_output='Guia de estudos em markdown' ) saidaGuia = agentGuia.execute_task(taskGuia) # Plano de Estudos yield "Criando plano de estudos...", gr.update(value=70) agentPlano = Agent( role="Especialista em Plano de Estudos", goal="Criar um plano de estudos eficiente para que o aluno aprenda de maneira organizada.", backstory="Você é um planejador educacional especialista em cronogramas de estudo eficientes.", llm=groqllm2, verbose=True ) taskPlano = Task( description = ( f"Crie um Plano de Estudos para {disciplina}, cobrindo {assunto} e os tópicos {topicos}. " f"O aluno tem {horas} horas por dia e {dias} dias para estudar.\n\n" "O plano deve seguir esta estrutura e formatação:\n\n" "## Plano de Estudos: {disciplina}\n\n" "### Introdução\n" "- Apresentação do objetivo do plano de estudos.\n" "- Importância da organização para otimizar o aprendizado.\n\n" "### Distribuição Equilibrada dos Tópicos\n" "- Divisão dos conteúdos de forma proporcional ao tempo disponível.\n" "- Sugerir uma agenda diária/semanal equilibrada.\n\n" "### Técnicas Ativas de Aprendizado\n" "- Explicação de estratégias eficazes para o estudo, incluindo:\n" " - Resumos\n" " - Flashcards\n" " - Mapas mentais\n" " - Resolução de exercícios\n\n" "### Revisões Programadas\n" "- Definir períodos estratégicos para revisão de conteúdos.\n" "- Sugestão de técnicas como repetição espaçada e autoavaliação.\n\n" "### Monitoramento do Progresso\n" "- Métodos para acompanhar a evolução do estudo.\n" "- Uso de checklists ou aplicativos para organização.\n\n" "### Sugestões para Pausas e Evitar Sobrecarga Mental\n" "- Importância das pausas regulares para manter a produtividade.\n" "- Sugestão de técnicas como a Técnica Pomodoro.\n" "- Dicas para manter o bem-estar mental durante os estudos.\n\n" "O plano deve ser didático, bem estruturado e adaptável para alunos do ensino médio." ), agent=agentPlano, expected_output='Plano de estudos estruturado em markdown' ) saidaPlano = agentPlano.execute_task(taskPlano) # Curadoria de Vídeos yield "Organizando vídeos do YouTube...", gr.update(value=90) agentYoutube = Agent( role='Especialista em Curadoria de Vídeos Educacionais', goal='Organizar e formatar vídeos educacionais encontrados no YouTube para aprendizado eficiente.', backstory='Você é um especialista em curadoria de materiais educacionais, com experiência na seleção de vídeos para ensino.', llm=groqllm2, verbose=True ) taskYoutube = Task( description = ( f"Lista do Youtube: {entradaYoutube} " "Você receberá uma lista de vídeos extraída da API do YouTube. Sua tarefa é classificar e organizar os vídeos " "por categorias, formatando-os em Markdown. As categorias devem ser baseadas no título do vídeo.\n\n" f"## Vídeos sobre {assunto}\n\n" "### Formato de saída\n" "- Para cada vídeo, a saída deve seguir o formato abaixo:\n" " **[Título](URL)**\n\n _Descrição_\n\n" "- Se um vídeo não tiver descrição, substituir por '(Sem descrição disponível)'.\n" "- Se houver mais de um vídeo, repetir a estrutura para cada um.\n" "- Certifique-se de que a formatação Markdown esteja correta e bem organizada." ), agent=agentYoutube, expected_output="Lista de vídeos organizados em Markdown." ) saidaYoutube = agentYoutube.execute_task(taskYoutube) yield "Processo concluído!", gr.update(value=100) saidaCompleta = f""" # 🎯 Motivação {saidaMotivador} --- # 📖 Guia de Estudos {saidaGuia} --- # 📅 Plano de Estudos {saidaPlano} --- # 🎥 Vídeos Educacionais {saidaYoutube} """ yield saidaCompleta, gr.update(value=100) # Interface Gradio with gr.Blocks() as demo: gr.Markdown("# 📚 Gerador de Material de Estudos") with gr.Row(): with gr.Column(): disciplina = gr.Textbox(label="Disciplina", value="Matemática") assunto = gr.Textbox(label="Assunto", value="Funções") topicos_str = gr.Textbox(label="Tópicos", value="Função quadrática, Função exponencial, Função logarítmica") horas = gr.Textbox(label="Tempo diário", value="2 horas") dias = gr.Textbox(label="Quantos dias", value="5 dias") gerar_button = gr.Button("Gerar Material") progress = gr.Slider(minimum=0, maximum=100, step=1, value=0, label="Progresso", interactive=False) with gr.Column(): resultado = gr.Markdown(label="Material Completo (Markdown)") gerar_button.click(fn=executar_equipe_interface, inputs=[disciplina, assunto, topicos_str, horas, dias], outputs=[resultado, progress]) demo.launch()