MeuAgente / src /tools /grade_classifier.py
gaiotto's picture
deploy: agente aula07 no HF Space
df1da34
Raw
History Blame Contribute Delete
2.81 kB
"""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,
},
},
}