GalvaoFilho's picture
Upload 3 files
47cb94a verified
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()