Injeta diretrizes de estilo dinâmicas nos prompts de chat e análises de observação

This commit is contained in:
2026-06-06 15:37:56 +00:00
parent 057532191b
commit daac8c46ac
+17 -7
View File
@@ -2076,6 +2076,10 @@ app.post('/api/observacao/analisar', requireAuth, async (req, res) => {
try { try {
const agentConfig = readAgentConfig(); const agentConfig = readAgentConfig();
const agentName = agentConfig.agentName || "Kemily"; const agentName = agentConfig.agentName || "Kemily";
const temperaturePreset = agentConfig.temperaturePreset || 'equilibrado';
const presetDesc = TEMPERATURE_PRESETS[temperaturePreset]?.description || TEMPERATURE_PRESETS['equilibrado'].description;
const presetLabel = TEMPERATURE_PRESETS[temperaturePreset]?.label || 'Equilibrado';
const temperatureValue = TEMPERATURE_PRESETS[temperaturePreset]?.value || 0.6;
let contextStr = ''; let contextStr = '';
if (turmaContext && Array.isArray(turmaContext) && turmaContext.length > 0) { if (turmaContext && Array.isArray(turmaContext) && turmaContext.length > 0) {
@@ -2105,7 +2109,11 @@ REGRAS:
- Tags: escolha entre social, cognitivo, motor, linguagem, emocional, colaborativo, autónomo - Tags: escolha entre social, cognitivo, motor, linguagem, emocional, colaborativo, autónomo
- Relatório em português, linguagem formal-pedagógica, seções claras em **markdown** - Relatório em português, linguagem formal-pedagógica, seções claras em **markdown**
- Foque em evidências observáveis - Foque em evidências observáveis
- Máximo 120 palavras no relatório
🎯 DIRETRIZ DE ESTILO DE RESPOSTA (Obrigatório):
Você foi configurada para atuar no modo: "${presetLabel}".
Instrução comportamental: ${presetDesc}
Ajuste a extensão, a objetividade e o nível de detalhes do conteúdo da chave "relatorio" para refletir ESTRITAMENTE essa diretriz de estilo (ex: se "técnico e direto", faça um relatório mais sintético, pontual e breve; se "detalhista", elabore e estenda mais os contextos e reflexões pedagógicas; se "equilibrado", mantenha um tamanho médio).
OBSERVAÇÃO REGISTRADA: OBSERVAÇÃO REGISTRADA:
""" """
@@ -2121,7 +2129,7 @@ Retorne APENAS o JSON válido:`;
console.log('[Smart Report] Tentando gerar relatório via MiniMax M3...'); console.log('[Smart Report] Tentando gerar relatório via MiniMax M3...');
const result = await callMinimax({ const result = await callMinimax({
messages: [{ role: 'user', content: reportPrompt }], messages: [{ role: 'user', content: reportPrompt }],
temperature: 0.5, temperature: temperatureValue,
max_tokens: 1500 max_tokens: 1500
}); });
rawContent = result.text; rawContent = result.text;
@@ -2142,7 +2150,7 @@ Retorne APENAS o JSON válido:`;
body: JSON.stringify({ body: JSON.stringify({
model: process.env.OPENROUTER_MODEL || 'openai/gpt-4.1-nano', model: process.env.OPENROUTER_MODEL || 'openai/gpt-4.1-nano',
messages: [{ role: 'user', content: reportPrompt }], messages: [{ role: 'user', content: reportPrompt }],
temperature: 0.5, temperature: temperatureValue,
max_tokens: 1500 max_tokens: 1500
}) })
}); });
@@ -2171,7 +2179,7 @@ Retorne APENAS o JSON válido:`;
body: JSON.stringify({ body: JSON.stringify({
model: process.env.GROQ_MODEL || 'llama-3.3-70b-versatile', model: process.env.GROQ_MODEL || 'llama-3.3-70b-versatile',
messages: [{ role: 'user', content: reportPrompt }], messages: [{ role: 'user', content: reportPrompt }],
temperature: 0.5, temperature: temperatureValue,
max_tokens: 1500 max_tokens: 1500
}) })
}); });
@@ -2200,7 +2208,7 @@ Retorne APENAS o JSON válido:`;
body: JSON.stringify({ body: JSON.stringify({
model: process.env.GOOGLE_AI_MODEL || 'gemini-2.5-flash', model: process.env.GOOGLE_AI_MODEL || 'gemini-2.5-flash',
messages: [{ role: 'user', content: reportPrompt }], messages: [{ role: 'user', content: reportPrompt }],
temperature: 0.5, temperature: temperatureValue,
max_tokens: 1500 max_tokens: 1500
}) })
}); });
@@ -3956,6 +3964,8 @@ app.post('/api/chat', requireAuth, async (req, res) => {
console.error('Erro ao integrar observações no prompt da IA:', obsErr); console.error('Erro ao integrar observações no prompt da IA:', obsErr);
} }
const styleDirective = `\n\n🎯 DIRETRIZ DE ESTILO DE RESPOSTA (Obrigatório):\nVocê foi configurada para responder no modo: "${TEMPERATURE_PRESETS[temperaturePreset]?.label || 'Equilibrado'}".\nInstrução comportamental: ${TEMPERATURE_PRESETS[temperaturePreset]?.description || 'Bom para uso geral — nem muito curto, nem muito longo.'}\nSiga rigorosamente este nível de detalhamento, extensão e objetividade em TODAS as suas respostas.\n\n`;
const languageDirective = `\n\n⚠️ DIRETRIZ CRÍTICA DE IDIOMA E SAÍDA: const languageDirective = `\n\n⚠️ DIRETRIZ CRÍTICA DE IDIOMA E SAÍDA:
- Você deve responder EXCLUSIVAMENTE em português do Brasil (Brazilian Portuguese). - Você deve responder EXCLUSIVAMENTE em português do Brasil (Brazilian Portuguese).
- Nunca inclua justificativas, introduções, pensamentos, comentários ou notas em inglês. - Nunca inclua justificativas, introduções, pensamentos, comentários ou notas em inglês.
@@ -3964,9 +3974,9 @@ app.post('/api/chat', requireAuth, async (req, res) => {
const dynamicSystemPrompt = { const dynamicSystemPrompt = {
role: "system", role: "system",
content: languageDirective + KEMILY_SYSTEM_PROMPT.content content: styleDirective + languageDirective + KEMILY_SYSTEM_PROMPT.content
.replace(/Você é a Kemily/g, `Você é a ${agentName}`) .replace(/Você é a Kemily/g, `Você é a ${agentName}`)
.replace('INFORMAÇÕES PESSOAIS:', `${knowledgeText}${observationsContext}INFORMAÇÕES PESSOAIS:`) + languageDirective .replace('INFORMAÇÕES PESSOAIS:', `${knowledgeText}${observationsContext}INFORMAÇÕES PESSOAIS:`) + styleDirective + languageDirective
}; };
const enrichedMessages = [dynamicSystemPrompt, ...messages]; const enrichedMessages = [dynamicSystemPrompt, ...messages];