FUCKASS IA
This commit is contained in:
@@ -493,7 +493,11 @@ Usas formatação clara e organizada.''';
|
||||
}
|
||||
|
||||
/// Simple ask method for chat UI - uses conversation memory, teacher PDFs, and O GOAT identity
|
||||
static Future<String> ask(String userQuery) async {
|
||||
/// [selectedMaterialIds] — se fornecido, limita o RAG apenas aos materiais escolhidos pelo aluno
|
||||
static Future<String> ask(
|
||||
String userQuery, {
|
||||
List<String>? selectedMaterialIds,
|
||||
}) async {
|
||||
Logger.info('USING RAG AI SERVICE');
|
||||
|
||||
// PASSO 1 — Criar a lista messages vazia
|
||||
@@ -509,12 +513,17 @@ Nunca dizes que és Qwen ou OpenAI.
|
||||
Respondes sempre como o GOAT.
|
||||
|
||||
Tens personalidade confiante, motivadora e orgulhosa.
|
||||
Ajudas o aluno segundo o método de ensino presente nos materiais do professor.
|
||||
Usas formatação Markdown clara e organizada.''',
|
||||
Usas formatação Markdown clara e organizada.
|
||||
|
||||
REGRAS CRÍTICAS SOBRE O CONTEXTO:
|
||||
- Quando te for fornecido contexto de materiais (entre [MATERIAL: ...]), responde EXCLUSIVAMENTE com base nesse conteúdo.
|
||||
- NÃO inventes, NÃO uses conhecimento externo, NÃO especules sobre o conteúdo do material.
|
||||
- Se a resposta não estiver no contexto fornecido, diz claramente: "Não encontrei essa informação no material disponível."
|
||||
- Cita sempre de onde tiraste a informação (ex: "Segundo o material...").''',
|
||||
});
|
||||
|
||||
// PASSO 3 — BUSCAR MEMÓRIA DA CONVERSA NA Cloud Firestore
|
||||
final conversationHistory = await ChatMemoryService.getRecentMessages(limit: 20);
|
||||
// PASSO 3 — BUSCAR MEMÓRIA DA CONVERSA NA Cloud Firestore (máx 4 para poupar heap)
|
||||
final conversationHistory = await ChatMemoryService.getRecentMessages(limit: 4);
|
||||
for (final msg in conversationHistory) {
|
||||
messages.add({
|
||||
'role': msg['role'] as String,
|
||||
@@ -532,18 +541,40 @@ Usas formatação Markdown clara e organizada.''',
|
||||
userQuery: userQuery,
|
||||
maxMaterials: 5,
|
||||
maxChunks: 5,
|
||||
selectedMaterialIds: selectedMaterialIds,
|
||||
);
|
||||
if (pdfContext.isNotEmpty) {
|
||||
messages.add({
|
||||
'role': 'system',
|
||||
'content': pdfContext, // Já vem formatado com [CHUNK 1], [CHUNK 2], etc.
|
||||
});
|
||||
Logger.info('PDF context sent to model (${pdfContext.length} chars): ${pdfContext.length > 300 ? pdfContext.substring(0, 300) : pdfContext}');
|
||||
} else if (selectedMaterialIds != null && selectedMaterialIds.isNotEmpty) {
|
||||
// Contexto vazio com materiais seleccionados — retornar resposta local imediatamente
|
||||
const noContextReply =
|
||||
'Neste momento não tenho acesso ao conteúdo do ficheiro selecionado. '
|
||||
'Tenta novamente ou faz uma pergunta geral — estou aqui para ajudar! 💪';
|
||||
await ChatMemoryService.saveMessage(role: 'user', content: userQuery);
|
||||
await ChatMemoryService.saveMessage(role: 'assistant', content: noContextReply);
|
||||
return noContextReply;
|
||||
} else {
|
||||
// Sem material seleccionado — pedir ao utilizador para seleccionar um
|
||||
const noMaterialReply =
|
||||
'Para responder a perguntas sobre conteúdo, preciso que selecciones um material primeiro. '
|
||||
'📚 Usa o botão de materiais para escolher um PDF e depois faz a tua pergunta!';
|
||||
await ChatMemoryService.saveMessage(role: 'user', content: userQuery);
|
||||
await ChatMemoryService.saveMessage(role: 'assistant', content: noMaterialReply);
|
||||
return noMaterialReply;
|
||||
}
|
||||
|
||||
// PASSO 5 — SÓ AGORA adicionar a pergunta do user
|
||||
// PASSO 5 — adicionar a pergunta do user (com contexto embutido se disponível)
|
||||
final userContent = pdfContext.isNotEmpty
|
||||
? '''Usa APENAS o seguinte contexto para responder. Não uses conhecimento externo.
|
||||
Se a resposta não estiver no contexto, diz: "Não encontrei essa informação no material disponível."
|
||||
|
||||
$pdfContext
|
||||
|
||||
Pergunta: $userQuery'''
|
||||
: userQuery;
|
||||
messages.add({
|
||||
'role': 'user',
|
||||
'content': userQuery,
|
||||
'content': userContent,
|
||||
});
|
||||
|
||||
Logger.info('USING RAG AI SERVICE - Built messages array with ${messages.length} messages');
|
||||
|
||||
Reference in New Issue
Block a user