Parabéns pela transparência e pela dissecação dos números, Rodrigo! Pouca gente que tenta automatizar candidatura chega nesse nível de maturidade analítica pra perceber que o gargalo de verdade nunca foi o CAPTCHA, e sim a heterogeneidade bizarra do schema de formulários dos ATSs.
Sobre o desafio dos selects, lidamos com problemas parecidos e algumas abordagens ajudam bastante a reduzir essas travas sem alucinação:
-
Camada de normalização semântica (Embedding Cosine Sim + Threshold): Em vez de chamar LLM pura para todo select, indexar as opções do select no momento do parse da página e calcular a similaridade de cosseno contra os atributos canônicos do perfil do candidato. Com um threshold conservador (ex: > 0.85), você resolve boa parte das variações triviais de escrita (ex: "América Latina", "LATAM", "South America / Brazil") com custo e latência mínimos.
-
Parsing de Intervalos Numéricos / Faixas Salariais: Para pretensão salarial e anos de experiência, regex com extração de bounds (min, max) mapeado contra o valor numérico exato do usuário resolve a maior parte. Ex: se o usuário pede R$ 8.000 e as opções são "5k - 8k" ou "8k - 12k", uma regra determinística de borda (ex: priorizar faixa superior quando igual ao teto) evita adivinhação aleatória.
-
Fallback Estruturado com JSON Schema (Function Calling): Quando cai abaixo do threshold do embedding, passar para um modelo leve apenas: o valor do perfil + o array exato de opções do select, forçando a resposta a ser um enum restrito à lista do HTML ou null. Se o modelo retornar null ou confiança baixa, você joga pro fallback manual (sua estratégia de perguntar pro usuário está 100% certa — errar pergunta eliminatória de visto ou modelo de contratação destrói a candidatura).
Outro ponto que você mencionou e que é brutal: o ecossistema da Gupy com autenticação proprietária e SPAs pesadas (onde o "select" muitas vezes nem é uma tag nativa, mas uma árvore de divs com listeners de click) é ordens de grandeza mais hostil que o Greenhouse/Lever. Acompanhando o projeto, baita iniciativa!