Disciplina: IA368HH - FEEC-UNICAMP
Responsável pelo projeto: Hiuri Noronha Supervisão: Prof. Roberto Lotufo
O DeepMentor é um sistema inteligente de tutoria adaptativa que utiliza uma arquitetura multi-agente baseada em CrewAI Flows para promover aprendizado personalizado em Deep Learning. Diferentemente de chatbots convencionais baseados apenas em Retrieval-Augmented Generation (RAG), o DeepMentor é capaz de:
- 🎯 Planejar trajetórias de ensino personalizadas baseadas no perfil do aluno
- 📊 Avaliar dinamicamente o nível de compreensão através de testes práticos
- 🔄 Ajustar o conteúdo em tempo real conforme o progresso do aprendiz
- 💡 Ensinar de forma socrática com ciclos de ensino-teste-avaliação
O sistema utiliza como fonte o livro "Dive into Deep Learning" (Zhang et al., 2023), processado via OCR e estruturado em formato JSON para acesso eficiente pelos agentes.
O DeepMentor implementa uma arquitetura de fluxo orquestrado com 5 agentes especializados:
- Função: Primeiro contato com o aluno, coleta de perfil
- Responsabilidades:
- Apresentar o sistema e a base de conhecimento
- Coletar nome, interesses, nível (iniciante/intermediário/avançado)
- Identificar tipo de foco (teórico/prático/equilibrado)
- Listar tópicos disponíveis e capturar seleção do aluno
- Função: Coordenador central de fluxos
- Responsabilidades:
- Analisar o estado atual da interação (turno, agente anterior, instrução)
- Decidir qual pipeline executar a seguir
- Rotear entre os agentes Dean e Professor conforme o contexto
- Gerenciar transições entre as fases do fluxo
- Função: Diretor Acadêmico e Arquiteto de Planos de Ensino
- Responsabilidades:
- Criar plano de ensino personalizado (4-8 tópicos progressivos)
- Analisar o conteúdo do capítulo selecionado
- Adaptar profundidade conforme o nível do aluno
- Gerenciar aprovação/revisão do plano pelo aluno
- Atualizar progresso conforme tópicos são concluídos
- Função: Tutor Especialista em Deep Learning
- Responsabilidades:
- Ensinar tópicos de forma didática e adaptativa
- Criar testes práticos de código (Python)
- Avaliar respostas e código submetido pelo aluno
- Fornecer feedback construtivo e específico
- Seguir ciclo pedagógico: ENSINAR → TESTAR → AVALIAR
- Função: Gerador de Sugestões Contextuais
- Responsabilidades:
- Gerar exemplos dinâmicos de mensagens baseados no contexto
- Atualizar sugestões conforme o progresso do aluno
- Facilitar a interação do usuário
- Sistema apresenta o DeepMentor e base de conhecimento D2L
- Coleta informações do aluno:
- Nome
- Tópicos de interesse
- Tema/capítulo escolhido
- Tipo de foco (teórico/prático/equilibrado)
- Nível (iniciante/intermediário/avançado)
- Valida se todas as informações foram coletadas
- Dean analisa o capítulo selecionado
- Cria plano de ensino personalizado (4-8 tópicos)
- Apresenta o plano ao aluno
- Aguarda confirmação ou solicitação de ajustes
- Revisa o plano conforme feedback (se necessário)
Para cada tópico do plano:
- Ensino: Professor apresenta o conteúdo de forma didática
- Esclarecimento: Responde dúvidas do aluno
- Teste: Cria desafio prático de código com template
- Avaliação: Analisa código submetido e fornece feedback
- Progressão: Marca tópico como concluído se aprovado
- Repetição: Avança para próximo tópico
deepmentor/
├── deepmentor/ # Módulo principal do projeto
│ ├── __init__.py
│ ├── config.py # Configurações centralizadas (paths, APIs, modelos)
│ ├── main.py # Ponto de entrada principal
│ ├── data_loader.py # Ferramentas de processamento da base de conhecimento
│ └── tester.py # Scripts de teste de APIs
│
├── flows/ # Fluxos CrewAI
│ └── deepmentor_flow/
│ ├── crews/
│ │ └── teaching_crew/
│ │ ├── config/
│ │ │ ├── agents.yaml # Definição dos agentes
│ │ │ └── tasks.yaml # Definição das tarefas
│ │ ├── knowledge/ # Base de conhecimento estática
│ │ │ ├── d2l-ocr.json
│ │ │ └── chapter-3.json
│ │ └── teaching_crew.py # Implementação do fluxo multi-agente
│ └── tools/ # Ferramentas customizadas (futuro)
│
├── knowledge/ # Base de conhecimento dinâmica (runtime)
│ └── d2l-ocr.json # Copiado em runtime do knowledge estático
│
├── data/ # Dados do projeto
│ ├── raw/
│ │ └── d2l_book/
│ │ ├── d2l-en.pdf # Livro original
│ │ └── pages/ # Páginas convertidas em PNG
│ ├── interim/
│ ├── processed/
│ └── external/
│
├── docs/ # Documentação gerada
│ ├── DeepMentorFlow.html # Visualização do fluxo CrewAI
│ ├── crewai_flow_script.js
│ └── crewai_flow_style.css
│
├── models/ # Modelos treinados (futuro)
├── notebooks/ # Jupyter notebooks para análises
├── reports/ # Relatórios e figuras
│
├── requirements.txt # Dependências Python
├── .env # Variáveis de ambiente (não versionado)
└── README.md # Este arquivo
- Python 3.10+
- Ollama (opcional, para modelos locais)
- Acesso à API OpenAI (recomendado)
git clone <repository-url>
cd deepmentorpython3 -m venv .venv
source .venv/bin/activate # Linux/Mac
# ou
.venv\Scripts\activate # Windowspip install -U -r requirements.txtCrie um arquivo .env na raiz do projeto:
# APIs de LLM
OPENAI_API_KEY=sk-your-openai-key-here
OLLAMA_API_BASE=http://localhost:11434
# API de OCR (NeuralMind) - Opcional
NEURALMIND_API_KEY=your-neuralmind-key
NEURALMIND_OCR_URL=https://api.neuralmind.ai/ocrEdite deepmentor/config.py:
# Escolha do modelo
LLM_MODEL = 0 # 0 = OpenAI, 1 = Ollama
# Modelos específicos
GPT_MODEL = "gpt-4o-mini" # Para OpenAI
OLLAMA_MODEL = "ollama/gpt-oss:120b" # Para OllamaSe você já possui os arquivos d2l-ocr.json e chapter-3.json na pasta flows/deepmentor_flow/crews/teaching_crew/knowledge/, pule para a seção "Execução".
Execute os seguintes comandos para processar o livro D2L:
# 1. Baixar o livro "Dive into Deep Learning"
python3 -m deepmentor.data_loader download-book
# 2. Converter páginas do PDF para PNG
python3 -m deepmentor.data_loader prepare-images
# 3. Executar OCR nas páginas (requer API NeuralMind)
python3 -m deepmentor.data_loader run-ocr
# 4. Calcular tokens do conteúdo processado
python3 -m deepmentor.data_loader calculate-tokenspython3 -m deepmentor.mainIsso irá:
- Carregar a base de conhecimento
- Inicializar os agentes
- Gerar visualização do fluxo em
docs/DeepMentorFlow.html - Iniciar a interface Gradio
Após a execução, acesse:
- Local:
http://localhost:7860 - Público (se habilitado): Link exibido no terminal
# Testar conexão com Ollama
python3 -m deepmentor.tester --test_self_hosted
# Testar conexão com OpenAI
python3 -m deepmentor.tester --test_openai-
Início da Conversa:
- Sistema: "Olá! Sou o DeepMentor 🎓. Qual é seu nome?"
- Aluno: "Meu nome é João"
-
Coleta de Perfil:
- Sistema: Lista capítulos disponíveis do D2L
- Aluno: "Quero aprender Capítulo 3: Regressão Linear"
- Sistema: "Qual seu nível e tipo de foco?"
- Aluno: "Iniciante e foco equilibrado"
-
Plano de Ensino:
- Dean apresenta plano com 5 tópicos progressivos
- Aluno aprova ou solicita ajustes
-
Ensino:
- Professor ensina primeiro tópico
- Esclarece dúvidas
- Aplica teste prático de código
- Avalia resposta
- Avança para próximo tópico
- CrewAI: Framework multi-agente com suporte a Flows
- Gradio: Interface web interativa
- Pydantic: Validação de dados estruturados
- LangChain/OpenAI: Integração com LLMs
- Ollama: Suporte a modelos locais
- tiktoken: Contagem de tokens
- PyPDF2/pdf2image: Processamento de PDFs
- Loguru: Logging avançado
- ✅ Coleta de perfil do aluno (nome, nível, foco, interesses)
- ✅ Criação automática de plano de ensino personalizado
- ✅ Confirmação e revisão do plano pelo aluno
- ✅ Ensino adaptativo por tópicos
- ✅ Testes práticos de código Python
- ✅ Avaliação automática com feedback construtivo (incompleto)
- ✅ Acompanhamento de progresso (checklist + barra de progresso) (incompleto)
- ✅ Interface Gradio com chat + editor de código
- ✅ Geração de exemplos contextuais dinâmicos
- ✅ Visualização do fluxo de agentes
- ✅ Base de conhecimento RAG com JSONKnowledgeSource
- 🔲 Histórico de sessões persistente
- 🔲 Múltiplos capítulos simultâneos
- 🔲 Execução e validação automática de código
- 🔲 Métricas de aprendizado (tempo, tentativas, scores)
- 🔲 Exportação de progresso em PDF
- 🔲 Suporte a múltiplos idiomas
- 🔲 Integração com Jupyter Notebooks
- 🔲 Sistema de badges e gamificação
- Estrutura de diretórios baseada em Cookiecutter Data Science
- Sistema de configuração centralizado (
config.py) - Pipeline de processamento do livro D2L:
- Download automático
- Conversão PDF → PNG
- OCR via API NeuralMind
- Cálculo de tokens com tiktoken
- Base de conhecimento estruturada em JSON
- Implementação do framework CrewAI com Flows
- Definição de 5 agentes especializados:
- DeepMentor Presentation
- Orchestrator
- Dean
- Professor
- Generator Examples
- Sistema de roteamento entre agentes
- Validação de saídas com Pydantic
- Fluxo de apresentação e coleta de perfil
- Fluxo de criação e confirmação de plano de ensino
- Fluxo de ensino iterativo (ensinar → testar → avaliar)
- Sistema de gerenciamento de estado (InteractionState)
- Interface Gradio com chat interativo
- Editor de código para testes práticos
- Checklist de progresso do plano de ensino
- Barra de progresso visual
- Sistema de sugestões contextuais dinâmicas
- Visualização do fluxo de agentes (HTML)
- Ajuste de prompts para melhor performance
- Otimização de tokens e custos de API
- Melhoria na avaliação de código
- Testes de usabilidade
- Suporte a múltiplos capítulos
- Sistema de persistência de sessões
- Métricas e analytics de aprendizado
- Execução automática de código Python
- Gamificação e badges
Edite deepmentor/config.py:
# Para usar GPT-4
GPT_MODEL = "gpt-4"
LLM_MODEL = 0
# Para usar Ollama local
OLLAMA_MODEL = "ollama/llama3:70b"
LLM_MODEL = 1
# Para interface pública Gradio
GRADIO_PUBLIC_SHARE = TrueEdite a lista OCR_PAGES em config.py:
OCR_PAGES = [
{
"section": "summary",
"start_page": 3,
"end": 24
},
{
"section": "chapter-3",
"start_page": 122,
"end": 164
},
{
"section": "chapter-4", # Novo capítulo
"start_page": 165,
"end": 210
}
]O sistema usa Loguru para logging. Para ajustar verbosidade:
# Em config.py
FLOW_VERBOSITY = True # False para logs mínimos- Verifique se o arquivo
.envexiste na raiz do projeto - Confirme que a variável
OPENAI_API_KEYestá definida no.env
# Reinstale as dependências
pip install -U -r requirements.txt# Verifique se os arquivos JSON existem
ls flows/deepmentor_flow/crews/teaching_crew/knowledge/
# Deve conter: d2l-ocr.json e chapter-3.json- Verifique se a porta 7860 está disponível
- Tente acessar manualmente:
http://127.0.0.1:7860 - Habilite compartilhamento público:
GRADIO_PUBLIC_SHARE = Truenoconfig.py
Contribuições são bem-vindas! Para contribuir:
- Fork o repositório
- Crie uma branch para sua feature (
git checkout -b feature/nova-funcionalidade) - Commit suas mudanças (
git commit -am 'Adiciona nova funcionalidade') - Push para a branch (
git push origin feature/nova-funcionalidade) - Abra um Pull Request
Este projeto é desenvolvido como parte da disciplina IA368HH da FEEC-UNICAMP.
A base de conhecimento é estruturada em JSON com a seguinte hierarquia:
{
"summary": {
"page_number": {
"text": "Conteúdo OCR da página"
}
},
"chapter-X": {
"page_number": {
"text": "Conteúdo OCR da página do capítulo"
}
}
}- Summary: Páginas 3-24 (índice, prefácio, visão geral)
- Chapter 3: Páginas 122-164 (Regressão Linear)
- DeepMentor Presentation: Lê o
summarypara listar capítulos disponíveis - Dean: Analisa o conteúdo completo do capítulo escolhido para criar o plano
- Professor: Usa
JSONKnowledgeSourcepara buscar informações específicas durante o ensino - Todos os agentes: Acessam via
self.state.summary_d2leself.state.chapter_3_d2l
- Summary: ~15.000-20.000 tokens
- Chapter 3: ~40.000-50.000 tokens
- Total: ~60.000-70.000 tokens
- Coleta de perfil: ~2.000 tokens ($0.001)
- Criação do plano: ~50.000 tokens ($0.025)
- Ensino por tópico: ~10.000 tokens ($0.005)
- Sessão completa (5 tópicos):
100.000 tokens ($0.05)
Valores aproximados, variam conforme o modelo e verbosidade
- State Machine: Gerenciamento de estado com
InteractionState - Router Pattern: Fluxo condicional entre agentes
- Strategy Pattern: Agentes especializados com responsabilidades únicas
- Observer Pattern: Atualização reativa da interface Gradio
- Factory Pattern: Criação de agentes e tarefas via YAML
Usuario → Gradio → chat_callback() → State Update → Flow Router
↓
┌──────────────────────────────────────┐
│ Orchestrator │
└──────────────────────────────────────┘
↓ ↓
┌──────────┐ ┌─────────────┐
│ Dean │ │ Professor │
└──────────┘ └─────────────┘
↓ ↓
Knowledge Base JSONKnowledge
↓ ↓
State Update ← Response Format
↓
Gradio Interface Update
- Verifique os prompts em
config/tasks.yaml - Ajuste a temperatura do modelo no
config.py - Ative verbose nos agentes:
verbose: truenoagents.yaml
- Modelos LLM podem retornar JSON mal formatado
- Ajuste o prompt para reforçar a estrutura JSON
- Use modelos mais avançados (GPT-4 em vez de GPT-3.5)
- Reduza o número de páginas em
OCR_PAGES - Use embedding + vector search (implementação futura)
- Fragmente o conhecimento por seção
Dive into Deep Learning - Zhang et al. (2023)
@book{zhang2023dive,
title={Dive into Deep Learning},
author={Zhang, Aston and Lipton, Zachary C. and Li, Mu and Smola, Alexander J.},
publisher={Cambridge University Press},
note={\url{https://D2L.ai}},
year={2023}
}- CrewAI: https://www.crewai.com/
- Gradio: https://gradio.app/
- Pydantic: https://docs.pydantic.dev/
Para dúvidas, sugestões ou contribuições:
- Responsável: Hiuri Noronha
- Disciplina: IA368HH - FEEC-UNICAMP
- Ano: 2025
DeepMentor - Tutoria Adaptativa de Deep Learning com Arquitetura Multi-Agente 🎓🤖