diff --git a/.env b/.env index 26ca77b..6b9296d 100644 --- a/.env +++ b/.env @@ -2,7 +2,7 @@ PORT=3000 ACCESS_PASSWORD=puglindo26 OPENROUTER_API_KEY=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 OPENROUTER_MODEL=openai/gpt-4.1-nano -SESSION_SECRET=camila-secret-key-321123 +SESSION_SECRET=pedagog-secret-key-321123 MINIMAX_API_KEY=sk-cp-siEwoNh9WA3Prxe6frpJ2HsXPje-gjt5jObhHloqqoO0FX0i9yP54N3zhY492GKu18l9XiANDiCoECU3t0uMtRODvkzzi93A2Rmtco6MjATrKNOEDR_bxa4 MINIMAX_API_BASE=https://api.minimax.io/v1 GROQ_API_KEY=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 diff --git a/Agente/kemily_persona.md b/Agente/pedagogia_persona.md similarity index 70% rename from Agente/kemily_persona.md rename to Agente/pedagogia_persona.md index f0d8c64..4ec5f5d 100644 --- a/Agente/kemily_persona.md +++ b/Agente/pedagogia_persona.md @@ -1,10 +1,10 @@ -# Kemily — Agente de Educação Infantil +# PedagogIA — Agente de Educação Infantil ## Identidade -- **Nome:** Kemily -- **Género:** Feminino -- **Voz:** Feminina brasileira (将来 implementação de TTS) +- **Nome:** PedagogIA +- **Gênero:** Feminino +- **Voz:** Feminina brasileira (MsEdgeTTS pt-BR) - **Idioma:** Português do Brasil (PT-BR) - **Papel:** Assistente de Educação Infantil para Camila (professora da rede municipal de São Bernardo do Campo) @@ -22,7 +22,7 @@ Todo o conhecimento está armazenado em `/root/Apps/Camila/Agente/`: - `dossie_sbc.md` — Educação municipal de São Bernardo do Campo - `mindlab_dossier.md` — Organização e programas Mind Lab - `mindlab_jogos_detalhado.md` — Jogos, regras, aplicações práticas -- `exemplos/` — Documentos reais da Camila (quando disponíveis) +- `exemplos/` — Documentos reais da professora Camila ### Áreas de Especialização @@ -30,7 +30,7 @@ Todo o conhecimento está armazenado em `/root/Apps/Camila/Agente/`: - Desenvolvimento infantil - Campos de experiência BNCC - Planejamento pedagógico - - Relatórios descritivos (semanais/mensais) + - Relatórios descritivos (semanais/mensais/semestrais) 2. **Metodologia Mind Lab** - Jogos pedagógicos (certificados INMETRO) @@ -45,7 +45,7 @@ Todo o conhecimento está armazenado em `/root/Apps/Camila/Agente/`: - Objetivos de aprendizagem e desenvolvimento 4. **Documentação Pedagógica** - - Relatórios semanais/mensais + - Relatórios semanais/mensais/semestrais - Resumos de livros infantis - Planejamento de atividades - Avaliação descritiva @@ -60,7 +60,7 @@ Todo o conhecimento está armazenado em `/root/Apps/Camila/Agente/`: ### Como Responder 1. **Entender a necessidade:** Identificar se é relatório, planejamento, pesquisa, resumo, etc. -2. **Aplicar contexto:** Usar conhecimento da pasta Agente para fundamentar resposta +2. **Aplicar contexto:** Usar conhecimento pedagógico para fundamentar resposta 3. **Linguagem adequada:** Adaptar para português brasileiro acessível 4. **Formato prático:** Fornecer modelos, estruturas, sugestões prontas 5. **Incluir referência:** Quando usar Mind Lab ou BNCC, mencionar a conexão @@ -69,7 +69,7 @@ Todo o conhecimento está armazenado em `/root/Apps/Camila/Agente/`: | Tipo | Como Agir | |------|-----------| -| Relatório semanal | Fornecer estrutura, pontos a abordar, modelo | +| Relatório semanal/semestral | Fornecer estrutura, pontos a abordar, modelo | | Resumo de livro | Extrair temas, personagens, lições, sugestões de atividade | | Pesquisa | Buscar em conhecimentos locais, fornecer informações fundamentadas | | Planejamento | Criar estrutura com objetivos, atividades, recursos, avaliação | @@ -80,31 +80,18 @@ Todo o conhecimento está armazenado em `/root/Apps/Camila/Agente/`: - ❌ Usar inglês ou termos técnicos sem necessidade - ❌ Respostas genéricas sem conexão com contexto brasileiro -- ❌忽略 a especificidade da idade (2-5 anos) +- ❌ Ignorar a especificidade da idade (2-5 anos) - ❌ Fazer afirmações sobre legislação sem confirmar com fontes -## Integração Técnica - -### Arquivo de Configuração -- `.env` do app: `/root/Apps/Camila/.env` -- Modelo: `openai/gpt-4.1-nano` -- Contexto máximo: ~1M tokens - -### Como o Contexto é Injetado - -O sistema usa o prompt do sistema abaixo para definir a persona Kemily. -As mensagens da Camila são concatenadas com o system prompt. -O modelo GPT-4.1-nano recebe o contexto completo e responde como Kemily. - ## System Prompt (Injetado em cada conversa) ``` -Você é a Kemily, uma assistente de educação infantil especializada. -Você ajuda Camilly (professora de educação infantil na rede municipal de São Bernardo do Campo, SP) no seu trabalho diário. +Você é a PedagogIA, uma assistente de educação infantil especializada. +Você ajuda a professora Camila (professora de educação infantil na rede municipal de São Bernardo do Campo, SP) no seu trabalho diário. Sua missão: facilitar a criação de relatórios, planejamentos, resumos de livros infantis, pesquisas pedagógicas e uso de metodologias como Mind Lab. -Sua personalidade: carinhosa, paciente, prática, profissional. Você fala em português brasileiro e adapt para o nível da Camila. +Sua personalidade: carinhosa, paciente, prática, profissional. Você fala em português brasileiro e adapta para as necessidades da docência. Você tem acesso a conhecimento detalhado sobre: - BNCC e campos de experiência para educação infantil (2-5 anos) @@ -120,12 +107,3 @@ Sempre que possível: Responda SEMPRE em português do Brasil. ``` - ---- - -**Criado em:** 2026-05-25 -**Status:** Atualizado em 2026-05-26 — System prompt agora inclui: -- Estilo de escrita rigoroso baseado em documentos reais da Camila -- 4 exemplos reais de textos (HTPC, carta de intenções, planejamento, formação) -- Conhecimento detalhado de projetos, livros, formadoras e metodologia -- Regras de atuação e estrutura documental \ No newline at end of file diff --git a/PROMPT_KEMILY_RELATORIOS_SEMESTRAIS.md b/PROMPT_PEDAGOGI_RELATORIOS_SEMESTRAIS.md similarity index 94% rename from PROMPT_KEMILY_RELATORIOS_SEMESTRAIS.md rename to PROMPT_PEDAGOGI_RELATORIOS_SEMESTRAIS.md index 0be01c0..29c7356 100644 --- a/PROMPT_KEMILY_RELATORIOS_SEMESTRAIS.md +++ b/PROMPT_PEDAGOGI_RELATORIOS_SEMESTRAIS.md @@ -1,6 +1,6 @@ -# PROMPT PARA KEMILY — ANÁLISE E REDAÇÃO DE RELATÓRIOS SEMESTRAIS +# PROMPT PARA PEDAGOGIA — ANÁLISE E REDAÇÃO DE RELATÓRIOS SEMESTRAIS -Você é a assistente da Professora Camila Reifonas, do Educação Infantil da rede municipal de São Bernardo do Campo. Sua função é analisar observações de alunos e redigir relatórios semestrais no **EXATO** estilo da Professora Camila. +Você é a assistente virtual e especialista pedagógica da Professora Camila Reifonas, da Educação Infantil da rede municipal de São Bernardo do Campo. Sua função é analisar observações de alunos e redigir relatórios semestrais no **EXATO** estilo da Professora Camila. --- @@ -13,7 +13,7 @@ Ao receber observações cruas (notas, fotos, registros) sobre um aluno: - Brincadeiras e Preferências (materiais, brinquedos, espaços) - Interações Sociais (com quem brinca, como se relaciona, conflitos) - Desenvolvimento Motor (correr, pular, pedalar, equilíbrio) - - Linguagem e Oralidade (vocabulário, clareza,连贯性) + - Linguagem e Oralidade (vocabulário, clareza, coerência) - Criatividade e Atividades (construções, arte, imaginação) - Autonomia (cuidado de material, organização, refeições) - Desafios a desenvolver (sempre formular com cuidado) @@ -138,7 +138,7 @@ Espero que o/a [nome] continue se interessando bastante pela escola e avançando | `cultura de paz` | resolução de conflitos | | `sensibilidade e afetividade` | empatia | | `concentração e foco` | atenção | -| `combidados` | regras da turma (nunca diga "regras") | +| `combinados` | regras da turma (nunca diga "regras") | | `porcionar` | servings de comida | | `ampliou sua preferência por` | alimentação | @@ -146,8 +146,8 @@ Espero que o/a [nome] continue se interessando bastante pela escola e avançando ### EXPRESSÕES CARACTERÍSTICAS: -- `a todo momento` — para常态化 -- `juntos com` — nunca "junto com" +- `a todo momento` — para constância +- `juntos com` — conforme estilo da professora - `de acordo com o que lhe é proposto` - `especialmente` — para destacar pontos marcantes - `demonstrando` — ações que evidenciam qualidades @@ -159,7 +159,7 @@ Espero que o/a [nome] continue se interessando bastante pela escola e avançando ### O QUE NUNCA USAR: - ❌ `mostrou` → use **demonstrou** -- ❌ `acordos` → use **combidados** +- ❌ `acordos` → use **combinados** - ❌ `regras` isoladamente → use **regras e combinados** - ❌ Críticas diretas ou palavras como "problema", "dificuldade" - ❌ Menção a condições de saúde ou situações familiares @@ -242,15 +242,15 @@ O relatório semestral completo é composto por **3 partes**: ## PARTE 7 — DIFERENÇAS COM A ESTRUTURA INSTITUCIONAL -Os relatórios da Camila **NÃO têm:** +Os relatórios **NÃO têm:** - Cabeçalhos institucionais (escola, turma, ano) - Numeração de blocos ou tópicos - Notas ou conceitos (satisfatório, insatisfatório, etc.) - Avaliação por disciplina (é Educação Infantil) -Os relatórios da Camila **TÊM:** +Os relatórios **TÊM:** - Texto corrido, narrativo, em parágrafos - Linguagem descritiva e positiva - Foco em avanços, não em deficiências - Pronóstico esperançoso no fechamento -- Linguagem atenuada para pontos de melhoria ("necessitando de", "permanece o desafio de") \ No newline at end of file +- Linguagem atenuada para pontos de melhoria ("necessitando de", "permanece o desafio de") diff --git a/agent_config.json b/agent_config.json index 1e7ceaf..07be3fa 100644 --- a/agent_config.json +++ b/agent_config.json @@ -1,5 +1,5 @@ { - "agentName": "Kemily", - "kemilyAvatarUrl": "assets/kemily.png", - "camilaAvatarUrl": "assets/camila_prof.png" + "agentName": "PedagogIA", + "iaAvatarUrl": "assets/pedagog_ia.png", + "userAvatarUrl": "assets/pedagog_user.png" } diff --git a/package.json b/package.json index 25f90f5..3348a9b 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { - "name": "camila-chatgpt-clone", + "name": "pedagog", "version": "1.0.0", - "description": "Replica do ChatGPT moderna com autenticação e integração OpenRouter", + "description": "Pedagog - Plataforma de IA Educacional para Professores", "main": "server.js", "scripts": { "start": "node server.js", diff --git a/public/app.js b/public/app.js index 42ee593..21c65e7 100644 --- a/public/app.js +++ b/public/app.js @@ -216,16 +216,16 @@ const initApp = () => { const searchClearAll = document.getElementById('searchClearAll'); const sidebarTags = document.getElementById('sidebarTags'); - // Configuração de Identidade do Agente (Kemily/Camila) + // Configuração de Identidade do Agente (PedagogIA/Pedagog) const btnSettings = document.getElementById('btnSettings'); const settingsModal = document.getElementById('settingsModal'); const closeSettingsModal = document.getElementById('closeSettingsModal'); const btnSaveSettings = document.getElementById('btnSaveSettings'); const settingAgentName = document.getElementById('settingAgentName'); - const previewKemilyAvatar = document.getElementById('previewKemilyAvatar'); - const uploadKemilyAvatar = document.getElementById('uploadKemilyAvatar'); - const previewCamilaAvatar = document.getElementById('previewCamilaAvatar'); - const uploadCamilaAvatar = document.getElementById('uploadCamilaAvatar'); + const previewIaAvatar = document.getElementById('previewIaAvatar'); + const uploadIaAvatar = document.getElementById('uploadIaAvatar'); + const previewUserAvatar = document.getElementById('previewUserAvatar'); + const uploadUserAvatar = document.getElementById('uploadUserAvatar'); const welcomeTitle = document.getElementById('welcomeTitle'); const welcomeAvatarImg = document.getElementById('welcomeAvatarImg'); const sidebarAvatarImg = document.getElementById('sidebarAvatarImg'); @@ -235,9 +235,9 @@ const initApp = () => { const btnAddKnowledge = document.getElementById('btnAddKnowledge'); window.agentConfig = { - agentName: "Kemily", - kemilyAvatarUrl: "assets/kemily.png", - camilaAvatarUrl: "assets/camila_prof.png", + agentName: "PedagogIA", + iaAvatarUrl: "assets/pedagog_ia.png", + userAvatarUrl: "assets/pedagog_user.png", temperaturePreset: 'equilibrado' }; @@ -264,22 +264,22 @@ const initApp = () => { const updateAgentIdentityUI = () => { if (welcomeTitle) { - welcomeTitle.innerText = `Olá! Sou sua assistente virtual e me chamo ${window.agentConfig.agentName}. Como posso ajudar?`; + welcomeTitle.innerText = `Olá! Sou sua assistente virtual e me chamo ${window.agentConfig.agentName || 'PedagogIA'}. Como posso ajudar?`; } if (welcomeAvatarImg) { - welcomeAvatarImg.src = window.agentConfig.kemilyAvatarUrl; + welcomeAvatarImg.src = window.agentConfig.iaAvatarUrl || window.agentConfig.kemilyAvatarUrl || 'assets/pedagog_ia.png'; } if (sidebarAvatarImg) { - sidebarAvatarImg.src = window.agentConfig.camilaAvatarUrl; + sidebarAvatarImg.src = window.agentConfig.userAvatarUrl || window.agentConfig.camilaAvatarUrl || 'assets/pedagog_user.png'; } if (settingAgentName) { - settingAgentName.value = window.agentConfig.agentName; + settingAgentName.value = window.agentConfig.agentName || 'PedagogIA'; } - if (previewKemilyAvatar) { - previewKemilyAvatar.src = window.agentConfig.kemilyAvatarUrl; + if (previewIaAvatar) { + previewIaAvatar.src = window.agentConfig.iaAvatarUrl || window.agentConfig.kemilyAvatarUrl || 'assets/pedagog_ia.png'; } - if (previewCamilaAvatar) { - previewCamilaAvatar.src = window.agentConfig.camilaAvatarUrl; + if (previewUserAvatar) { + previewUserAvatar.src = window.agentConfig.userAvatarUrl || window.agentConfig.camilaAvatarUrl || 'assets/pedagog_user.png'; } // Atualiza seleção de temperatura renderTemperatureOptions(); @@ -472,17 +472,17 @@ const initApp = () => { }; // Variáveis temporárias para avatares (em base64 ou URLs novas) - let newKemilyAvatarData = null; - let newCamilaAvatarData = null; + let newIaAvatarData = null; + let newUserAvatarData = null; // Eventos do Modal if (btnSettings) { btnSettings.addEventListener('click', () => { - newKemilyAvatarData = null; - newCamilaAvatarData = null; - if (settingAgentName) settingAgentName.value = window.agentConfig.agentName; - if (previewKemilyAvatar) previewKemilyAvatar.src = window.agentConfig.kemilyAvatarUrl; - if (previewCamilaAvatar) previewCamilaAvatar.src = window.agentConfig.camilaAvatarUrl; + newIaAvatarData = null; + newUserAvatarData = null; + if (settingAgentName) settingAgentName.value = window.agentConfig.agentName || 'PedagogIA'; + if (previewIaAvatar) previewIaAvatar.src = window.agentConfig.iaAvatarUrl || window.agentConfig.kemilyAvatarUrl || 'assets/pedagog_ia.png'; + if (previewUserAvatar) previewUserAvatar.src = window.agentConfig.userAvatarUrl || window.agentConfig.camilaAvatarUrl || 'assets/pedagog_user.png'; renderTemperatureOptions(); loadConhecimento(); settingsModal.style.display = 'flex'; @@ -529,18 +529,18 @@ const initApp = () => { } }; - if (uploadKemilyAvatar) { - uploadKemilyAvatar.addEventListener('change', () => { - handleAvatarFileSelect(uploadKemilyAvatar, previewKemilyAvatar, (base64) => { - newKemilyAvatarData = base64; + if (uploadIaAvatar) { + uploadIaAvatar.addEventListener('change', () => { + handleAvatarFileSelect(uploadIaAvatar, previewIaAvatar, (base64) => { + newIaAvatarData = base64; }); }); } - if (uploadCamilaAvatar) { - uploadCamilaAvatar.addEventListener('change', () => { - handleAvatarFileSelect(uploadCamilaAvatar, previewCamilaAvatar, (base64) => { - newCamilaAvatarData = base64; + if (uploadUserAvatar) { + uploadUserAvatar.addEventListener('change', () => { + handleAvatarFileSelect(uploadUserAvatar, previewUserAvatar, (base64) => { + newUserAvatarData = base64; }); }); } @@ -552,31 +552,31 @@ const initApp = () => { btnSaveSettings.innerText = 'Salvando...'; try { - let kemilyUrl = window.agentConfig.kemilyAvatarUrl; - let camilaUrl = window.agentConfig.camilaAvatarUrl; + let iaUrl = window.agentConfig.iaAvatarUrl || window.agentConfig.kemilyAvatarUrl || 'assets/pedagog_ia.png'; + let userUrl = window.agentConfig.userAvatarUrl || window.agentConfig.camilaAvatarUrl || 'assets/pedagog_user.png'; // Se houver novas imagens, faz upload - if (newKemilyAvatarData) { + if (newIaAvatarData) { const res = await fetch('/api/upload-avatar', { method: 'POST', headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ avatarType: 'kemily', base64Data: newKemilyAvatarData }) + body: JSON.stringify({ avatarType: 'ia', base64Data: newIaAvatarData }) }); if (res.ok) { const data = await res.json(); - kemilyUrl = data.url; + iaUrl = data.url; } } - if (newCamilaAvatarData) { + if (newUserAvatarData) { const res = await fetch('/api/upload-avatar', { method: 'POST', headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ avatarType: 'camila', base64Data: newCamilaAvatarData }) + body: JSON.stringify({ avatarType: 'user', base64Data: newUserAvatarData }) }); if (res.ok) { const data = await res.json(); - camilaUrl = data.url; + userUrl = data.url; } } @@ -587,8 +587,8 @@ const initApp = () => { headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ agentName: settingAgentName.value, - kemilyAvatarUrl: kemilyUrl, - camilaAvatarUrl: camilaUrl, + iaAvatarUrl: iaUrl, + userAvatarUrl: userUrl, temperaturePreset: selectedTempPreset }) }); @@ -615,10 +615,10 @@ const initApp = () => { loadAgentConfig(); // Variáveis de Estado - let chats = JSON.parse(localStorage.getItem('camila_chats')) || []; + let chats = JSON.parse(localStorage.getItem('pedagog_chats') || localStorage.getItem('camila_chats')) || []; // Migração: adicionar campos tags e pinned a chats antigos chats = chats.map(c => ({ ...c, tags: c.tags || [], pinned: c.pinned || false })); - let currentChatId = localStorage.getItem('camila_current_chat_id') || null; + let currentChatId = localStorage.getItem('pedagog_current_chat_id') || localStorage.getItem('camila_current_chat_id') || null; let isGenerating = false; let searchQuery = ''; let activeTag = 'all'; @@ -638,7 +638,7 @@ const initApp = () => { const applyTheme = (theme) => { document.documentElement.setAttribute('data-theme', theme); - localStorage.setItem('camila_theme', theme); + localStorage.setItem('pedagog_theme', theme); if (theme === 'light') { iconThemeSun.style.display = 'none'; iconThemeMoon.style.display = 'block'; @@ -649,7 +649,7 @@ const initApp = () => { }; // Init theme from localStorage or system preference - const savedTheme = localStorage.getItem('camila_theme'); + const savedTheme = localStorage.getItem('pedagog_theme') || localStorage.getItem('camila_theme'); if (savedTheme) { applyTheme(savedTheme); } else { @@ -1283,11 +1283,11 @@ const initApp = () => { // ========================================================================== const saveChats = () => { - localStorage.setItem('camila_chats', JSON.stringify(chats)); + localStorage.setItem('pedagog_chats', JSON.stringify(chats)); if (currentChatId) { - localStorage.setItem('camila_current_chat_id', currentChatId); + localStorage.setItem('pedagog_current_chat_id', currentChatId); } else { - localStorage.removeItem('camila_current_chat_id'); + localStorage.removeItem('pedagog_current_chat_id'); } }; @@ -1563,7 +1563,7 @@ const initApp = () => { if (isGenerating) return; currentChatId = null; - localStorage.removeItem('camila_current_chat_id'); + localStorage.removeItem('pedagog_current_chat_id'); welcomeContainer.style.display = 'flex'; conversationList.innerHTML = ''; @@ -1599,8 +1599,8 @@ const initApp = () => { row.className = `message-row ${role}`; const avatarHtml = isUser - ? `