Arquitectura de Agentes de IA para Procesamiento de Currículums
El procesamiento masivo de currículums durante los periodos de contratación presenta desafíos significativos en términos de escalabilidad y objetividad. La implementación de agentes de inteligencia artificial mediante arquitecturas híbridas como CrewAI y LangGraph permite automatizar el ciclo de análisis de documantos, extracción de competencias y puntuación de candidatos, mitigando sesgos humanos y reduciendo drásticamente los tiempos de evaluación.
Componentes Principales del Sistema
La solución se divide en tres microservicios interconectados:
- Módulo de Análisis Documental: Encargado de la extracción de texto plano a partir de formatos PDF, DOCX y TXT. Utiliza bibliotecas como Apache Tika para garantizar una alta fidelidad en la recuperación del contenido estructurado.
- Motor de Extracción de Competencias: Emplea modelos de lenguaje preentrenados (como variantes de BERT) para clasificar y etiquetar habilidades técnicas, competencias interpersonales y certificaciones profesionales dentro del texto no estructurado.
- Sistema de Evaluación Ponderada: Algoritmo de comparación que cruza los datos extraídos del candidato con los requisitos técnicos del puesto vacante, generando un índice de idoneidad.
Lógica de Puntuación de Candidatos
El núcleo del evaluador calcula una métrica de compatibilidad basada en la intersección de conjuntos de habilidades, la proporción de experiencia y la similitud semántica de proyectos previos.
import numpy as np
from sklearn.metrics.pairwise import cosine_similarity
def compute_applicant_rating(applicant_profile, role_specifications):
# Evaluación de competencias obligatorias (45% del peso total)
required_skills_set = set(role_specifications.get('mandatory_skills', []))
applicant_skills_set = set(applicant_profile.get('technical_skills', []))
if not required_skills_set:
skill_ratio = 1.0
else:
skill_ratio = len(required_skills_set.intersection(applicant_skills_set)) / len(required_skills_set)
# Cálculo de experiencia profesional (30% del peso total)
required_years = role_specifications.get('minimum_experience_years', 1)
actual_years = applicant_profile.get('experience_years', 0)
experience_ratio = min(actual_years / required_years, 1.0)
# Afinidad semántica de proyectos (25% del peso total)
# Se asume que los embeddings han sido precalculados por un modelo NLP
semantic_score = cosine_similarity(
[applicant_profile['portfolio_embedding']],
[role_specifications['description_embedding']]
)[0][0]
# Puntuación final normalizada entre 0 y 100
final_score = (skill_ratio * 0.45) + (experience_ratio * 0.30) + (semantic_score * 0.25)
return round(final_score * 100, 2)
Configuración del Pipeline de Despliegue
Para iniciar el servicio de filtrado, se requiere definir un archivo de configuración JSON que establezca los parámetros de búsqueda y los pesos del modelo de evaluación.
{
"position": "Senior Data Engineer",
"mandatory_skills": ["Python", "Apache Spark", "Data Modeling"],
"preferred_skills": ["AWS", "Apache Kafka"],
"minimum_experience_years": 3,
"evaluation_weights": {
"skills": 0.45,
"experience": 0.30,
"academic_background": 0.10,
"portfolio_relevance": 0.15
}
}
La ejecución del pipeline de análisis sobre un directorio de documentos se realiza mediante la interfaz de línea de comnados:
python -m recruitment_pipeline.runner --source_dir ./cv_dataset --role_config data_engineer.json --export_format parquet
Optimización y Consideraciones Técnicas
Preprocesamiento OCR: Para documentos escaneados o con formato de imagen, es fundamental aplicar motores de reconocimiento óptico de caracteres como Tesseract antes de la fase de tokenización.
tesseract scanned_cv.pdf output_text -l spa+eng --oem 1 --psm 3
Ajuste Fino de Modelos: En etapas iniciales, se pueden utilizar modelos base de NLP de propósito general. Sin embargo, tras recopilar un conjunto de datos etiquetado de la industria específica, la aplicación de técnicas como LoRA (Low-Rank Adaptation) mejora significativamente la precisión en la detección de jerga técnica y acrónimos especializados.
Anonimización de Datos: Es imperativo implementar rutinas de ofuscación mediante expresiones regulares para información de identificación personal (PII), como números de teléfono y direcciones de correo electrónico, garantizando el cumplimietno de normativas de privacidad antes de que los datos sean procesados por modelos de terceros o almacenados en bases de datos analíticas.