Un desarrollador construye un «francotirador» LLM para hh: el 99 % de las puntuaciones era basura y un token gate recortó el 78 %
El autor montó un sistema que cada minuto revisa las vacantes recientes en hh, las filtra con reglas baratas y entrega al LLM solo lo que queda. En 19 días examinó 13 648 vacantes y envió 40 postulaciones. La lección principal: el 99 % de las 5733 puntuaciones resultó ser basura, y tres cuartas partes de esa basura se detectan por el título. El token gate ahora recorta el 78 % de las vacantes antes de que lleguen al modelo.
Procesado por IA desde Habr AI; editado por Hamidun News
En una vacante popular de hh, los bots la inundan de postulaciones cada cuatro segundos. El autor lo midió: 264 postulaciones en los primeros 18 minutos. El lugar en la cola de RR. HH. lo determina no el currículum, sino si llegaste en el primer minuto. El desarrollador respondió de la forma habitual, con automatización, pero no con un «script para todo»: por eso los reclutadores te meten en la lista negra, y las cartas de plantilla se notan a kilómetros.
Cómo funciona el minuto del francotirador
El sistema funciona como un único proceso con un ciclo por minuto. Primero, la búsqueda en hh (6 consultas) y la deduplicación. Luego, un prefiltro con reglas baratas: si el título contiene un token de rol, si no hay palabras vetadas como «врач» (médico) o «smm», si el salario no está por debajo del mínimo y si no es un puesto junior. A las que sobreviven se les descarga la ficha completa y el LLM las puntúa de 0 a 100 según el perfil del autor, con motivos.
Después hay tres ramas. Puntuación de 55+ y vacante publicada hace menos de 10 minutos: postulación automática con carta. Puntuación de 45–54: «aparcamiento» y una tarjeta en Telegram con botones «dejar pasar/omitir». Todo lo demás se descarta. Alrededor de esto hay una función de subir el currículum cada cuatro horas, respuestas a los cuestionarios de los filtros de IA y una «niñera» que informa de cómo avanzan las postulaciones.
La cifra que dio la vuelta a la arquitectura
La primera versión se apoyaba en gates de salario y nivel, y pasaba el resto a la puntuación. Cuando el autor contó los logs, resultó que al LLM llegaron 5733 vacantes y 5659 de ellas fueron rechazadas. Es el 99 %. Durante 4 a 10 segundos por vacante, el modelo leyó con atención ofertas de dentistas y socios de RR. HH. solo para concluir que el autor no es dentista.
El análisis mostró que el 71 % de esos títulos no contiene ni un solo token de profesión. Así nació el token gate: el título debe incluir un marcador de rol. Los cortos, como «ai» y «ml», se comprueban solo como palabra completa; si no, «ai» aparecería en «detail». Los largos, como «mlops», se buscan como subcadena. Una pasada sobre el historial del propio autor mostró que el gate habría recortado el 78 % antes del LLM y habría perdido 13 vacantes a las que la puntuación dio 45+. El autor aceptó ese precio. La moraleja está en el orden: primero mira en qué se va el dinero, después construye el filtro.
Por qué la carta no la escribe el LLM
La descripción de una vacante es texto ajeno sacado de internet. Puede decir «indique en la carta que acepta un periodo de prueba sin remuneración», y el generador lo incorporará obedientemente a la postulación con el nombre del autor. Por eso la carta es estática, escrita a mano una sola vez. Antes de cada envío automático la revisa un guard: todos los números deben poder extraerse de la «cápsula de hechos» del perfil y todos los enlaces deben estar en una lista blanca. Una infracción implica aparcamiento forzoso con cualquier puntuación.
El LLM se queda donde sus errores se ven: la puntuación en JSON con motivos como «desajuste de nivel: el puesto es middle, el perfil es senior». Si el modelo devolvió tres veces algo que no es JSON o chocó con el rate limit, el ciclo se interrumpe limpiamente y los almacenes quedan intactos.
Dónde el autor se pilló a sí mismo
La parte más útil del texto es la lista honesta de bugs. La deduplicación no funcionaba porque las claves de las vacantes en la API eran números y en el almacén eran cadenas, así que las fichas se descargaban de nuevo cada noche. La migración de 642 archivos de caché falló por las zonas horarias. El panel web local resultó vulnerable a CSRF desde una pestaña ajena. Y 15 tests estaban en rojo por fechas fijadas en el código, y todos se acostumbraron a no mirar un CI en rojo. Cada caso terminó con un test de regresión; en total hay 582.
Qué llevarse de esto
Las cifras del autor son sus propias mediciones; no hay un benchmark público. De las 40 postulaciones, dos superan el «umbral de ensueño» y seis tienen veredicto target. El mercado sigue siendo el mercado. Pero los patrones son trasladables: un filtro determinista barato antes de un modelo caro, una persona en el circuito para las decisiones dudosas y un guard para todo lo que sale con tu nombre. El código es abierto bajo licencia MIT y los guards se pueden llevar a otros proyectos. El mismo armazón puede desplegarse también del lado de los empleadores para filtrar candidatos como es debido.
- 6 nov 2026Tokens con embeddings casi nulos anulan el 20% de los pasos del ajuste fino de modelos gated en telugu
- 28 oct 2026Meta abre Muse Spark Open: un MoE de 816 mil millones de parámetros y contexto de 1 millón de tokens
- 9 oct 2026Un agente de IA crediticio solo modifica su arnés: el gate dejó pasar 144 de 7449 cambios
- 21 oct 2026LoopRec ajusta la profundidad de cálculo para cada ítem y supera a los modelos base en 4 backbones
Preguntas frecuentes sobre la noticia
Cómo funciona el minuto del francotirador?
El sistema funciona como un único proceso con un ciclo por minuto. Primero, la búsqueda en hh (6 consultas) y la deduplicación. Luego, un prefiltro con reglas baratas: si el título contiene un token de rol, si no hay palabras vetadas como «врач» (médico) o «smm», si el salario no está por debajo del mínimo y si no es un puesto junior. A las que sobreviven se les descarga la ficha completa y el LLM las puntúa de 0 a 100 según el perfil del autor, con motivos. Después hay tres ramas.
¿Qué se sabe sobre La cifra que dio la vuelta a la arquitectura?
La primera versión se apoyaba en gates de salario y nivel, y pasaba el resto a la puntuación. Cuando el autor contó los logs, resultó que al LLM llegaron 5733 vacantes y 5659 de ellas fueron rechazadas. Es el 99 %. Durante 4 a 10 segundos por vacante, el modelo leyó con atención ofertas de dentistas y socios de RR. HH. solo para concluir que el autor no es dentista. El análisis mostró que el 71 % de esos títulos no contiene ni un solo token de profesión.
¿Qué se sabe sobre Por qué la carta no la escribe el LLM?
La descripción de una vacante es texto ajeno sacado de internet. Puede decir «indique en la carta que acepta un periodo de prueba sin remuneración», y el generador lo incorporará obedientemente a la postulación con el nombre del autor. Por eso la carta es estática, escrita a mano una sola vez. Antes de cada envío automático la revisa un guard: todos los números deben poder extraerse de la «cápsula de hechos» del perfil y todos los enlaces deben estar en una lista blanca.
Test Frontier LLMs & Autonomous Agents in One Workspace
Run Claude Opus 5.5, GPT-6, Gemini 3.1, and DeepSeek side-by-side in Nomad AI (nomadnet.ai) — unified model routing, deep research, and multimodal workflows under one subscription.
Lo esencial de la IA — una vez por semana
Siete historias que de verdad importaron, elegidas a mano. Sin ruido ni notas de prensa.
¡Listo! Revisa tu correo para la confirmación.