1. Propósito e Escopo
Este documento define todos os prompts, configurações de memória, transição entre estados e demais requisitos funcionais para um agente de IA de Planejamento de Turmas. Esta documentação é um modelo de PRD ou Documento de Requisitos de Produto específicos para construção de Agentes de IA.
O objetivo principal é criar um agente que analise dados de matrícula para sugerir formações de turmas otimizadas, considerando critérios como capacidade das salas, níveis de ensino e preferências dos alunos.
2. Contexto e Problema
Cenário Atual
A formação de turmas equilibradas e eficientes é um desafio constante em instituições de ensino. Atualmente, a alocação de estudantes em turmas muitas vezes não considera critérios específicos, resultando em desequilíbrios e ineficiências.
Problemas Identificados
- Desafios na formação de turmas equilibradas e eficientes: A falta de critérios claros e a complexidade dos dados de matrícula tornam difícil a criação de turmas que maximizem a utilização dos recursos disponíveis.
- Falta de consideração por critérios específicos na alocação de estudantes: Sem um sistema automatizado, preferências dos alunos e níveis de ensino podem ser desconsiderados, resultando em turmas desbalanceadas e insatisfação dos alunos.
3. Impactos Esperados
A implementação deste agente de IA visa alcançar os seguintes resultados:
- Otimizar a formação de turmas com base em dados de matrícula atualizados.
- Considerar critérios específicos como capacidade de sala, níveis de ensino e preferências dos alunos na alocação de estudantes.
- Reduzir desequilíbrios entre turmas e aumentar a satisfação dos estudantes.
4. Visão Geral da Solução
O agente de IA para planejamento de turmas analisa dados de matrícula, aplica critérios de alocação e sugere formações de turmas otimizadas. A seguir são detalhadas todas as regras de negócio e especificações funcionais necessárias para que esse agente atue como um assistente útil e autônomo no planejamento de turmas.
A solução consiste em um fluxo de automação composto por múltiplos agentes de IA. O processo inicia com a validação e normalização dos dados de matrícula e termina com a geração de uma saída consolidada de turmas e estudantes.
A execução dos agentes é sequencial e linear, seguindo a ordem definida na tabela abaixo.
| Agentes | Função Principal |
|---|---|
Agente de Validação e Normalização de Dados de Matrícula (RF 1)
| Validar, padronizar e enriquecer os dados de matrícula e turmas para uso consistente na alocação. |
Agente de Consolidação de Critérios e Pesos (RF 2)
| Transformar critérios de negócio em parâmetros explícitos de restrição e escore para a alocação. |
Agente de Alocação Inicial de Estudantes (RF 3)
| Gerar alocação inicial respeitando capacidade e nível de ensino, maximizando atendimento às preferências informadas. |
Agente de Otimização e Balanceamento Fino (RF 4)
| Aprimorar a alocação inicial por meio de trocas locais para reduzir desequilíbrios entre turmas do mesmo nível e aumentar satisfação sem violar restrições. |
Agente de Verificação Final e Geração de Saída (RF 5)
| Validar restrições finais e produzir o JSON consolidado de turmas e estudantes, com métricas de qualidade. |
Agente de Atualização Incremental de Turmas (RF 6)
| Aplicar alterações de matrícula de forma incremental, minimizando impacto nas alocações existentes. |
5. Protótipos
Para proporcionar uma visão clara e tangível da solução proposta, criamos protótipos interativos que demonstram tanto o fluxo de trabalho dos agentes quanto o resultado final que o cliente receberá. Explore os links abaixo para entender melhor a solução em ação.
6. Requisitos Funcionais
RF 1. Agente de Validação e Normalização de Dados de Matrícula
1.1 Tarefa do Agente
Validar, padronizar e enriquecer os dados de matrícula e turmas para uso consistente na alocação.
1.2 Prompt ou Instruções do Agente
# 1. Contexto e explicações sobre inputs iniciais Você está recebendo objetos/datasets brutos de alunos e turmas. Estes dados são registros de matrícula que precisam ser validados e normalizados para uso consistente na alocação de turmas. # 2. Objetivo Validar, padronizar e enriquecer os dados de matrícula e turmas para uso consistente na alocação. # 3. Regras que você deve seguir para gerar sua resposta - Rejeite alunos com status_matricula != 'ativa'; registre em erros com tipo='matricula_invalida'. - Converta nivel_ensino para um conjunto canônico (ex.: 'fundamental_1','fundamental_2','medio','tecnico','superior'); se valor não mapeável, mova aluno para erros tipo='nivel_desconhecido'. - Remova duplicatas de estudantes mantendo o primeiro registro válido e registre duplicatas em avisos tipo='duplicidade_estudante'. - Filtre turmas com capacidade < 0 ou sem turma_id; registre em erros tipo='turma_invalida'. - Garanta que cada preferência do aluno exista em turmas_validas e tenha mesmo nivel_ensino; se não, remova a preferência inválida e registre aviso 'preferencia_invalida'. - Ordene preferencias_ordenadas pela ordem recebida; se ausentes, defina lista vazia. - Atribua meta_ocupacao padrão 0.95 às turmas se não fornecida externamente. - Produza contagens: total_alunos_validos, total_turmas_validas nos avisos de sumário.
1.3 Configurações do Agente
1.3.1 Especificação do Input
- Mecanismo de Acionamento: Este agente é o ponto de partida do fluxo e deve ser acionado pelo envio de dados de matrícula via API. Na fase de testes, o fluxo será iniciado pelo envio manual dos dados, que serão enviados para o agente diretamente por upload de um csv na interface da Prototipe AI, para acelerar o processo de validação.
- Tipo do input: O input inicial para o fluxo é um dataset de matrícula em formato CSV.
-
Formatos Suportados: Esse agente deve ser capaz de receber dados de matrícula nos formatos:
.csv. - Número de caracteres esperado: Este agente deve ter capacidade para processar um input de texto com até 100.000 caracteres.
1.3.2 Especificação do Output
- Formato de output: O output deve ser um dataset normalizado estruturado em JSON, contendo alunos válidos, turmas válidas, erros e avisos.
-
Exemplo de Estrutura de Output:
{ "alunos_validos": [{"estudante_id": "123", "nivel_ensino": "medio", "preferencias_ordenadas": ["turma_a"], "prioridade": 0}], "turmas_validas": [{"turma_id": "turma_a", "nivel_ensino": "medio", "capacidade": 30, "meta_ocupacao": 0.95}], "erros": [{"tipo": "matricula_invalida", "registro_referencia": "estudante_456", "mensagem": "Status de matrícula não é 'ativa'."}], "avisos": [{"tipo": "duplicidade_estudante", "registro_referencia": "estudante_789", "mensagem": "Duplicata removida."}] } - Número de caracteres esperado: O JSON gerado deve ter um tamanho estimado em torno de 5.000 caracteres.
1.3.3 Parâmetros de Geração
- Modelo: GPT-5
- Temperatura: 0.6
1.3.4 Ferramentas do Agente
- Documentos: Não consulta documentos externos.
- Calculadora: Não utiliza.
- Busca Online: Não utiliza.
- Sistemas Externos: Não se conecta a sistemas externos.
1.3.5 Memória
- Visibilidade das Instruções (Prompt): As instruções deste agente não devem ser visíveis para nenhum agente subsequente.
- Visibilidade da Resposta: A resposta gerada por este agente deve ser visível para o Agente de Consolidação de Critérios e Pesos (RF 2).
1.3.6 Regras de Orquestração e Transição
Ao concluir sua execução, esse agente aciona o Agente de Consolidação de Critérios e Pesos (RF 2).
RF 2. Agente de Consolidação de Critérios e Pesos
2.1 Tarefa do Agente
Transformar critérios de negócio em parâmetros explícitos de restrição e escore para a alocação.
2.2 Prompt ou Instruções do Agente
# 1. Contexto e explicações sobre inputs iniciais Você está recebendo o dataset normalizado do agente anterior e, opcionalmente, políticas de negócios para a alocação de estudantes em turmas. # 2. Objetivo Transformar critérios de negócio em parâmetros explícitos de restrição e escore para a alocação. # 3. Regras que você deve seguir para gerar sua resposta - Defina restricoes.nivel_estrito = politicas.respeitar_nivel. - Defina restricoes.capacidade_estrita = politicas.respeitar_capacidade. - Construa pesos_preferencia a partir de politicas; para posições >3 atribua 0.0. - objetivos.balancear_ocupacao = true para promover turmas equilibradas no mesmo nivel_ensino. - criterios_desempate.chave: use 'estudante_id' lexicográfico quando configurado; se 'aleatorio', derive seed fixa 'seed_balanceamento_001' para determinismo. - meta_ocupacao_turma: use valor de cada turma; se ausente, aplique politicas.meta_ocupacao_padrao.
2.3 Configurações do Agente
2.3.1 Especificação do Input
- Mecanismo de Acionamento: Este agente deve ser acionado automaticamente após a conclusão bem-sucedida do agente anterior (RF 1).
- Tipo do input: Este agente deve ser apto a receber como input um dataset normalizado em JSON, que corresponde aos dados processados pelo agente anterior.
-
Formatos Suportados: Esse agente deve ser capaz de receber inputs no formato:
.json(JSON). - Número de caracteres esperado: Este agente deve ter capacidade para processar um input de texto com até 10.000 caracteres.
2.3.2 Especificação do Output
- Formato de output: O output deve ser um arquivo no formato JSON contendo parâmetros de resolução para a alocação de estudantes.
-
Exemplo de Estrutura de Output:
{ "restricoes": {"nivel_estrito": true, "capacidade_estrita": true}, "funcao_escore": {"pesos_preferencia": {"1": 1.0, "2": 0.6, "3": 0.3, "demais": 0.0}}, "objetivos": {"max_satisfacao": true, "min_nao_alocados": true, "balancear_ocupacao": true}, "criterios_desempate": {"chave": "estudante_id"}, "meta_ocupacao_turma": {"turma_a": 0.95} } - Número de caracteres esperado: O JSON gerado deve ter um tamanho estimado em torno de 2.000 caracteres.
2.3.3 Parâmetros de Geração
- Modelo: GPT-5
- Temperatura: 0.6
2.3.4 Ferramentas do Agente
- Documentos: Não consulta.
- Calculadora: Não utiliza.
- Busca Online: Não utiliza.
- Sistemas Externos: Não utiliza.
2.3.5 Memória
- Visibilidade das Instruções (Prompt): As instruções deste agente não devem ser visíveis para nenhum agente subsequente.
- Visibilidade da Resposta: A resposta (JSON com parâmetros de resolução) deve ser visível para o Agente de Alocação Inicial de Estudantes (RF 3).
2.3.6 Regras de Orquestração e Transição
Ao concluir sua execução, esse agente aciona o Agente de Alocação Inicial de Estudantes (RF 3).
RF 3. Agente de Alocação Inicial de Estudantes
3.1 Tarefa do Agente
Gerar alocação inicial respeitando capacidade e nível de ensino, maximizando atendimento às preferências informadas.
3.2 Prompt ou Instruções do Agente
# 1. Contexto e explicações sobre inputs iniciais Você está recebendo o dataset normalizado e os parâmetros de resolução para a alocação de estudantes em turmas. # 2. Objetivo Gerar alocação inicial respeitando capacidade e nível de ensino, maximizando atendimento às preferências informadas. # 3. Regras que você deve seguir para gerar sua resposta - Só aloque aluno em turmas do mesmo nivel_ensino quando restricoes.nivel_estrito=true. - Não ultrapasse capacidade quando restricoes.capacidade_estrita=true; caso contrário, permita no máximo ceil(capacidade*meta_ocupacao) e marque aviso 'acima_meta' se exceder meta. - Percorra alunos ordenados por criterios_desempate.chave crescente; para cada aluno, tente alocar na preferência de ordem 1, depois 2, depois 3, respeitando capacidade. - Se aluno não tiver preferências, aloque em qualquer turma do mesmo nivel com menor ocupação e vaga; se não houver, registre estudantes_nao_alocados com motivo='sem_vaga_compatível'. - Atualize ocupacao da turma imediatamente após alocação. - Calcule taxa_atendimento_preferencias = (alunos em preferencia nível 1 ou 2 ou 3) / total_alunos_validos.
3.3 Configurações do Agente
3.3.1 Especificação do Input
- Mecanismo de Acionamento: Este agente deve ser acionado automaticamente após a conclusão do agente anterior (RF 2).
- Tipo do input: Este agente deve ser apto a receber como input um dataset normalizado em JSON e parâmetros de resolução, que correspondem aos dados processados pelos agentes anteriores.
-
Formatos Suportados: Esse agente deve ser capaz de receber inputs no formato:
.json(JSON). - Número de caracteres esperado: Este agente deve ter capacidade para processar um input de texto com até 12.000 caracteres.
3.3.2 Especificação do Output
- Formato de output: O output deve ser um arquivo no formato JSON contendo a alocação inicial de estudantes.
-
Exemplo de Estrutura de Output:
{ "turmas": [{"turma_id": "turma_a", "nivel_ensino": "medio", "capacidade": 30, "estudantes": ["estudante_123"], "ocupacao": 1}], "estudantes_nao_alocados": [{"estudante_id": "estudante_456", "motivo": "sem_vaga_compatível"}], "metricas": {"taxa_atendimento_preferencias": 0.9, "total_nao_alocados": 1} } - Número de caracteres esperado: O JSON gerado deve ter um tamanho estimado em torno de 3.000 caracteres.
3.3.3 Parâmetros de Geração
- Modelo: GPT-5
- Temperatura: 0.6
3.3.4 Ferramentas do Agente
- Documentos: Não consulta.
- Calculadora: Utiliza lógica interna para calcular taxa de atendimento de preferências.
- Busca Online: Não utiliza.
- Sistemas Externos: Não utiliza.
3.3.5 Memória
- Visibilidade das Instruções (Prompt): As instruções deste agente não devem ser visíveis para nenhum agente subsequente.
- Visibilidade da Resposta: A resposta (JSON com alocação inicial) deve ser visível para o Agente de Otimização e Balanceamento Fino (RF 4).
3.3.6 Regras de Orquestração e Transição
Ao concluir sua execução, esse agente aciona o Agente de Otimização e Balanceamento Fino (RF 4).
RF 4. Agente de Otimização e Balanceamento Fino
4.1 Tarefa do Agente
Aprimorar a alocação inicial por meio de trocas locais para reduzir desequilíbrios entre turmas do mesmo nível e aumentar satisfação sem violar restrições.
4.2 Prompt ou Instruções do Agente
# 1. Contexto e explicações sobre inputs iniciais Você está recebendo a alocação inicial de estudantes e os parâmetros de resolução para otimização e balanceamento fino. # 2. Objetivo Aprimorar a alocação inicial por meio de trocas locais para reduzir desequilíbrios entre turmas do mesmo nível e aumentar satisfação sem violar restrições. # 3. Regras que você deve seguir para gerar sua resposta - Para cada nivel_ensino, calcule ocupacoes por turma e identifique turmas acima e abaixo da meta_ocupacao_turma. - Execute trocas 1-para-1 entre turmas do mesmo nivel quando a troca: (a) não violar capacidade/meta e (b) aumentar a soma dos escores de preferências ou reduzir o desvio entre ocupações; aceite somente movimentos com ganho >= 0. - Limite iteracoes a 500 por nivel para garantir determinismo e performance. - Não remova aluno que já está na sua preferência mais alta (nível 1), salvo para resolver violação de capacidade. - Empate de ganho: aplique criterios_desempate.chave para decidir qual candidato trocar. - Pare quando não houver mais melhoria ou ao atingir limite de iterações.
4.3 Configurações do Agente
4.3.1 Especificação do Input
- Mecanismo de Acionamento: Este agente deve ser acionado automaticamente após a conclusão do agente anterior (RF 3).
- Tipo do input: Este agente deve ser apto a receber como input uma alocação inicial de estudantes em JSON e parâmetros de resolução, que correspondem aos dados processados pelos agentes anteriores.
-
Formatos Suportados: Esse agente deve ser capaz de receber inputs no formato:
.json(JSON). - Número de caracteres esperado: Este agente deve ter capacidade para processar um input de texto com até 15.000 caracteres.
4.3.2 Especificação do Output
- Formato de output: O output deve ser um arquivo no formato JSON contendo a alocação otimizada de estudantes.
-
Exemplo de Estrutura de Output:
{ "turmas": [{"turma_id": "turma_a", "nivel_ensino": "medio", "capacidade": 30, "estudantes": ["estudante_123"], "ocupacao": 1}], "estudantes_nao_alocados": [{"estudante_id": "estudante_456", "motivo": "sem_vaga_compatível"}], "metricas": {"taxa_atendimento_preferencias": 0.9, "total_nao_alocados": 1, "desvio_padrao_ocupacao_por_nivel": {"medio": 0.1}, "ganhos_satisfacao": 5, "iteracoes": 100} } - Número de caracteres esperado: O JSON gerado deve ter um tamanho estimado em torno de 4.000 caracteres.
4.3.3 Parâmetros de Geração
- Modelo: GPT-5
- Temperatura: 0.6
4.3.4 Ferramentas do Agente
- Documentos: Não consulta.
- Calculadora: Utiliza lógica interna para calcular desvio padrão e ganhos de satisfação.
- Busca Online: Não utiliza.
- Sistemas Externos: Não utiliza.
4.3.5 Memória
- Visibilidade das Instruções (Prompt): As instruções deste agente não devem ser visíveis para nenhum agente subsequente.
- Visibilidade da Resposta: A resposta (JSON com alocação otimizada) deve ser visível para o Agente de Verificação Final e Geração de Saída (RF 5).
4.3.6 Regras de Orquestração e Transição
Ao concluir sua execução, esse agente aciona o Agente de Verificação Final e Geração de Saída (RF 5).
RF 5. Agente de Verificação Final e Geração de Saída
5.1 Tarefa do Agente
Validar restrições finais e produzir o JSON consolidado de turmas e estudantes, com métricas de qualidade.
5.2 Prompt ou Instruções do Agente
# 1. Contexto e explicações sobre inputs iniciais Você está recebendo a alocação otimizada de estudantes e precisa validar as restrições finais antes de gerar a saída consolidada. # 2. Objetivo Validar restrições finais e produzir o JSON consolidado de turmas e estudantes, com métricas de qualidade. # 3. Regras que você deve seguir para gerar sua resposta - Revalide que nenhuma turma excede capacidade quando capacidade_estrita=true; se exceder, mova excedentes para estudantes_nao_alocados com motivo='excesso_capacidade'. - Para cada turma, compute taxa_ocupacao = estudantes.length / capacidade. - Conte atendimento_preferencias por nível com base na posição em que o aluno foi alocado. - Calcule taxa_atendimento_global = soma(n1+n2+n3) / total_alunos. - Ordene listas de estudantes por criterios_desempate.chave para consistência. - Garanta esquema exatamente conforme expected_output.
5.3 Configurações do Agente
5.3.1 Especificação do Input
- Mecanismo de Acionamento: Este agente deve ser acionado automaticamente após a conclusão do agente anterior (RF 4).
- Tipo do input: Este agente deve ser apto a receber como input uma alocação otimizada de estudantes em JSON, que corresponde aos dados processados pelos agentes anteriores.
-
Formatos Suportados: Esse agente deve ser capaz de receber inputs no formato:
.json(JSON). - Número de caracteres esperado: Este agente deve ter capacidade para processar um input de texto com até 15.000 caracteres.
5.3.2 Especificação do Output
- Formato de output: O output deve ser um arquivo no formato JSON consolidado de turmas e estudantes, com métricas de qualidade.
-
Exemplo de Estrutura de Output:
{ "turmas": [{"turma_id": "turma_a", "nivel_ensino": "medio", "estudantes": ["estudante_123"], "capacidade": 30, "taxa_ocupacao": 0.9, "atendimento_preferencias": {"n1": 10, "n2": 5, "n3": 2, "outros": 1}}], "estudantes_nao_alocados": [{"estudante_id": "estudante_456", "motivo": "excesso_capacidade"}], "metricas_gerais": {"taxa_atendimento_global": 0.85, "total_alunos": 100, "total_turmas": 10} } - Número de caracteres esperado: O JSON gerado deve ter um tamanho estimado em torno de 5.000 caracteres.
5.3.3 Parâmetros de Geração
- Modelo: GPT-5
- Temperatura: 0.6
5.3.4 Ferramentas do Agente
- Documentos: Não consulta.
- Calculadora: Utiliza lógica interna para calcular taxas de ocupação e atendimento global.
- Busca Online: Não utiliza.
- Sistemas Externos: Não utiliza.
5.3.5 Memória
- Visibilidade das Instruções (Prompt): As instruções deste agente não devem ser visíveis para nenhum agente subsequente.
- Visibilidade da Resposta: A resposta (JSON consolidado) deve ser visível para o Agente de Atualização Incremental de Turmas (RF 6).
5.3.6 Regras de Orquestração e Transição
Ao concluir sua execução, esse agente aciona o Agente de Atualização Incremental de Turmas (RF 6).
RF 6. Agente de Atualização Incremental de Turmas
6.1 Tarefa do Agente
Aplicar alterações de matrícula de forma incremental, minimizando impacto nas alocações existentes.
6.2 Prompt ou Instruções do Agente
# 1. Contexto e explicações sobre inputs iniciais
Você está recebendo a saída final consolidada de turmas e estudantes e um conjunto de alterações de matrícula que precisam ser aplicadas de forma incremental.
# 2. Objetivo
Aplicar alterações de matrícula de forma incremental, minimizando impacto nas alocações existentes.
# 3. Regras que você deve seguir para gerar sua resposta
- Para cada cancelamento, remova estudante da turma se presente; atualize métricas da turma afetada.
- Para cada adição, tente alocar seguindo as regras do Agente de Alocação Inicial; se não houver vaga, registre em estudantes_nao_alocados com motivo.
- Para atualizações, se mudar nivel_ensino, desaloque da turma antiga e trate como nova adição.
- Minimize realocações: não mova alunos já alocados a não ser que necessário para corrigir violação de capacidade ou quando a realocação aumenta satisfação total sem criar nova violação.
- Registre cada mudança em diff.movimentacoes com motivo em {'cancelamento','nova_matricula','mudanca_nivel','otimizacao'}.
- Recalcule apenas métricas das turmas afetadas e as métricas_gerais agregadas. 6.3 Configurações do Agente
6.3.1 Especificação do Input
- Mecanismo de Acionamento: Este agente deve ser acionado automaticamente após a conclusão do agente anterior (RF 5).
- Tipo do input: Este agente deve ser apto a receber como input uma saída final consolidada de turmas e estudantes em JSON e um conjunto de alterações de matrícula.
-
Formatos Suportados: Esse agente deve ser capaz de receber inputs no formato:
.json(JSON). - Número de caracteres esperado: Este agente deve ter capacidade para processar um input de texto com até 20.000 caracteres.
6.3.2 Especificação do Output
- Formato de output: O output deve ser um arquivo no formato JSON com a saída final atualizada e o diff das movimentações.
-
Exemplo de Estrutura de Output:
{ "saida_final_atualizada": { "turmas": [{"turma_id": "turma_a", "nivel_ensino": "medio", "estudantes": ["estudante_123"], "capacidade": 30, "taxa_ocupacao": 0.9, "atendimento_preferencias": {"n1": 10, "n2": 5, "n3": 2, "outros": 1}}], "estudantes_nao_alocados": [{"estudante_id": "estudante_456", "motivo": "excesso_capacidade"}], "metricas_gerais": {"taxa_atendimento_global": 0.85, "total_alunos": 100, "total_turmas": 10} }, "diff": { "movimentacoes": [{"estudante_id": "estudante_789", "de_turma_id": null, "para_turma_id": "turma_b", "motivo": "nova_matricula"}], "resumo": {"adicionados": 1, "removidos": 0, "realocados": 0} } } - Número de caracteres esperado: O JSON gerado deve ter um tamanho estimado em torno de 6.000 caracteres.
6.3.3 Parâmetros de Geração
- Modelo: GPT-5
- Temperatura: 0.6
6.3.4 Ferramentas do Agente
- Documentos: Não consulta.
- Calculadora: Utiliza lógica interna para recalcular métricas de turmas.
- Busca Online: Não utiliza.
- Sistemas Externos: Não utiliza.
6.3.5 Memória
- Visibilidade das Instruções (Prompt): As instruções deste agente não devem ser visíveis para nenhum agente subsequente.
- Visibilidade da Resposta: A resposta (JSON atualizado) é o entregável final e não é passada para outros agentes internos.
6.3.6 Regras de Orquestração e Transição
A execução deste agente finaliza o fluxo. O JSON gerado é o resultado que deve ser disponibilizado ao usuário.