OI, Nelson!
É muito bom ver sua análise crítica sobre o projeto. Sua percepção toca em um ponto fundamental da engenharia de dados para IA: a transição entre sistemas baseados em regras e sistemas baseados em compreensão semântica.
Você tem razão ao apontar que o método hardcoded (baseado em palavras-chave) é frágil. Palavras como "ação" podem aparecer em contextos de "ações judiciais", "ação do tempo" ou "modo de ação", gerando classificações incorretas.
O Desafio da escala e precisão:
Em projetos iniciais ou com volumes pequenos de dados, as regras manuais são usadas porque são rápidas e não geram custos de API. Mas, para sistemas profissionais, o que você sugeriu, usar o próprio modelo para classificar, é o caminho ideal.
Pra evitar os erros semânticos que você mencionou, existem três abordagens principais que superam o uso de if/else:
LLM como Classificador (a sua sugestão):
Antes de salvar o chunk no banco vetorial, você envia o texto para um modelo (como o GPT-4o-mini) com um prompt específico: "Classifique o trecho da bula abaixo em uma destas categorias: [lista]. Responda apenas o nome da categoria."
- Pró: Alta precisão semântica.
- Contra: Aumenta o custo e o tempo de processamento inicial (ingestão).
Modelos de Zero-Shot Classification:
Utilizar modelos menores e especializados em classificação (disponíveis no Hugging Face) que conseguem entender o tópico sem precisar de treinamento específico, sendo mais baratos que uma LLM generalista.
Self-Querying Retriever (LangChain):
Em vez de classificar no momento da criação, você pode usar uma técnica onde o LLM transforma a pergunta do usuário em uma busca estruturada. Se o usuário pergunta "Como a dipirona age?", o LLM percebe a intenção e filtra os metadados automaticamente.
Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!