| """Tool: classifica em qual nível escolar um conteúdo se encaixa. |
| |
| Heurística simples baseada em palavras-chave do currículo BNCC. |
| Útil quando o aluno descreve um problema sem dizer a série. |
| """ |
| from typing import Literal |
|
|
| _KEYWORDS_FUNDAMENTAL_1: list[str] = [ |
| "soma", "subtração", "adição", "tabuada", "número natural", |
| "alfabeto", "sílaba", "leitura", "primeiro ano", "segundo ano", |
| "terceiro ano", "quarto ano", "quinto ano", |
| ] |
| _KEYWORDS_FUNDAMENTAL_2: list[str] = [ |
| "fração", "decimal", "porcentagem", "regra de três", "mmc", "mdc", |
| "área", "perímetro", "ângulo", "polígono", "sexto ano", "sétimo ano", |
| "oitavo ano", "nono ano", |
| ] |
| _KEYWORDS_MEDIO: list[str] = [ |
| "equação", "função", "logaritmo", "trigonometria", "matriz", |
| "vetor", "bhaskara", "primeiro grau", "segundo grau", "geometria analítica", |
| "ensino médio", "vestibular", "enem", |
| ] |
|
|
|
|
| def run_grade_level_classifier(text: str) -> str: |
| """Classifica em qual etapa da educação básica o tema se encaixa.""" |
| t = text.lower() |
|
|
| def _count(keywords: list[str]) -> int: |
| return sum(1 for kw in keywords if kw in t) |
|
|
| scores = { |
| "fundamental_anos_iniciais": _count(_KEYWORDS_FUNDAMENTAL_1), |
| "fundamental_anos_finais": _count(_KEYWORDS_FUNDAMENTAL_2), |
| "ensino_medio": _count(_KEYWORDS_MEDIO), |
| } |
| best: str = max(scores, key=lambda k: scores[k]) |
| if scores[best] == 0: |
| return ( |
| "Não foi possível classificar com confiança. " |
| "Sugestão: pedir ao aluno em qual série/ano ele está." |
| ) |
|
|
| labels: dict[str, str] = { |
| "fundamental_anos_iniciais": "Ensino Fundamental · Anos Iniciais (1º-5º)", |
| "fundamental_anos_finais": "Ensino Fundamental · Anos Finais (6º-9º)", |
| "ensino_medio": "Ensino Médio (1º-3º ano)", |
| } |
| return ( |
| f"Nível classificado: {labels[best]} " |
| f"(score: {scores[best]} palavras-chave encontradas). " |
| f"Adapte sua resposta para este nível." |
| ) |
|
|
|
|
| grade_level_classifier_tool: dict = { |
| "type": "function", |
| "function": { |
| "name": "grade_level_classifier", |
| "description": ( |
| "Classifica em qual etapa da educação básica brasileira (Fund. Iniciais, " |
| "Fund. Finais, Ensino Médio) o conteúdo se encaixa. Use no INÍCIO da " |
| "interação quando o aluno não especifica a série." |
| ), |
| "parameters": { |
| "type": "object", |
| "properties": { |
| "text": { |
| "type": "string", |
| "description": "Texto a classificar (a pergunta do aluno ou tópico).", |
| } |
| }, |
| "required": ["text"], |
| "additionalProperties": False, |
| }, |
| }, |
| } |
|
|