← Voltar a studyAI — Documentação do Projeto

🧠 User Intelligence

studyAI — Documentação do Projeto

Apresentação

User Intelligence — studyAI

User State / Session Intelligence — contexto do utilizador que permite aos agentes adaptar conteúdo, dificuldade e feedback.


Problema

Atualmente o Router decide só pela mensagem. Não considera:

  • Nível do utilizador
  • Histórico de erros
  • Tópicos fracos
  • Preferências de estilo

User State

user_profile (nova tabela)

CampoTipoDescrição
idUUIDPK
user_idUUIDFK users(id)
levelVARCHARbeginner | intermediate | advanced
weak_topicsJSONB["RAG", "Agents", ...] — tópicos com scores baixos
recent_errorsJSONBÚltimas N perguntas com score < 70
preferred_styleVARCHARconcise | detailed | technical
created_atTIMESTAMPTZ
updated_atTIMESTAMPTZ

Como se popula

  • level: User define ou inferido por scores médios
  • weak_topics: Agregado de user_progress por document/topic
  • recent_errors: Últimas 5–10 submissões com score < 70
  • preferred_style: User define em settings

Memória de sessão (conversation_memory)

Para "continua o que estavas a dizer" e contexto entre sessões:

CampoDescrição
user_id, project_idScope da memória
summaryResumo da conversa (últimas N mensagens)
embeddingPara retrieval semântico ("o que estávamos a discutir")
message_countNº de mensagens resumidas
last_activity_atÚltima atividade

Atualização: A cada 5–10 mensagens, ou ao fechar sessão, LLM gera summary e atualiza. Embedding do summary para retrieval.

Uso: RAG QA Agent e Content Writer podem carregar conversation_memory para contexto adicional.


Memory Layer (semântica)

Além de dados estruturados (user_profile) e conversation_memory, considerar:

Opção A: JSON + agregação

  • Guardar em user_profile.recent_errors, weak_topics
  • Sem embeddings adicionais
  • Simples, suficiente para MVP

Opção B: Embeddings de comportamento

  • "Este user erra sempre em X" → chunk com embedding
  • Retrieval quando Planner/Evaluator precisa de contexto
  • Mais complexo, para fase avançada

Opção C: user_memory (tabela)

  • Factos extraídos: "user tem dificuldade em polipectomia"
  • Tipo, conteúdo, source (question_id), created_at
  • Pode ser indexado para RAG sobre o user

Adaptação por agente

Content Planner

  • Input: + user_profile (level, weak_topics)
  • Output: Estrutura adaptada — mais detalhe em weak_topics, menos em dominados
  • Ex: Se weak_topics inclui "complicações", garantir secção dedicada

Question Generator

  • Input: + user_profile.level, preferred_style
  • Output: Perguntas com difficulty: easy | medium | hard
  • Distribuição por nível: beginner → mais easy, advanced → mais hard
  • Estilo: concise → perguntas curtas; detailed → perguntas abertas

Question Evaluator

  • Input: + user_profile (recent_errors, weak_topics)
  • Output: Feedback adaptado — mais pormenorizado em weak_topics
  • Sugerir material específico para reforçar

Router

  • Input: + user_profile (opcional para alguns intents)
  • Ex: "O que devo estudar?" → considera weak_topics, next_review_at

Schema de contexto (para agentes)

{
  "user_level": "intermediate",
  "weak_topics": ["RAG", "Guardrails"],
  "recent_errors": [
    { "question_id": "...", "score": 45, "topic": "RAG" }
  ],
  "preferred_style": "technical",
  "next_review_count": 5
}

Integração

  • Atualização: Após cada evaluate, atualizar user_profile (weak_topics, recent_errors)
  • Leitura: Antes de chamar Planner, Generator, Evaluator — carregar user_profile
  • Inferência de level: Job periódico ou em evaluate — média de scores → level

Referências

Zona de prática

Sem perguntas. Clica em Editar para adicionar.