Skill de Generación/Optimización de Currículum ATS
Objetivo de la Tarea
- Este Skill se utiliza para: ayudar a los usuarios a crear, optimizar y gestionar currículums profesionales compatibles con ATS
- Capacidades incluidas: generación de currículum, optimización de currículum, verificación de aceptabilidad para postulación, gestión de versiones, exportación de archivos
- Condiciones de activación: el usuario necesita crear un nuevo currículum, optimizar uno existente, comparar o exportar currículums
Preparación Previa
- Dependencias: este Skill utiliza bibliotecas de Python puramente locales para el procesamiento de archivos y la exportación (sin dependencias de servicios externos/red)
pdfplumber>=0.10.0 # Analizar currículums en PDF python-docx>=1.1.0 # Generar DOCX reportlab>=4.0.0 # Generar PDF (con fuente CJK incorporada, solo pip; si falta, retrocede automáticamente a HTML) - Preparación del directorio: crear un directorio de gestión de versiones en el directorio de trabajo actual
mkdir -p .resume-versions
Principios Fundamentales
Reglas Estrictas
- Nunca inventar experiencia/datos del usuario: el contenido faltante se reemplaza con
【Marcador de posición】y se genera una "Lista Mínima de Complementos" - Compatibilidad ATS: por defecto, una sola columna, sin tablas, sin cuadros de texto, sin iconos; usar títulos de sección estándar
- Aceptabilidad para postulación: el informe de diagnóstico debe verificar, desde la perspectiva del primer filtro de RH, si el título coincide, si los años/ubicación/datos de contacto/autorización laboral/fecha de inicio son claros, y si hay información tabú del mercado objetivo como foto, edad, estado civil, hijos, afiliación política, salario esperado, etc.
- Salida completa: se debe generar simultáneamente el JSON de ResumeIR, el informe de diagnóstico, la conclusión de aceptabilidad para postulación, el texto del currículum reescrito; los archivos de exportación se generan según sea necesario mediante scripts locales (ver "Exportación de Archivos")
- Minimizar el costo de entrada del usuario: priorizar el soporte para "pegar texto/subir archivo", solo preguntar por campos críticos faltantes
Estructura de Salida
Todas las operaciones deben generar las siguientes tres partes (los archivos de exportación se generan según sea necesario):
- JSON de ResumeIR: nombres de campos fijos, conforme al Esquema ResumeIR.v1
- Informe de diagnóstico: lista de problemas + gravedad + sugerencias, conforme a la Especificación del Informe de Diagnóstico
- Conclusión de aceptabilidad para postulación:
application_acceptability, respondiendo "¿Se puede postular ahora? / ¿Dónde se quedará atascado en el primer filtro de RH? / ¿Qué completar primero?" - Texto del currículum reescrito: vista previa en texto plano
- (Opcional) Archivos de exportación: cuando el usuario necesite DOCX/PDF, llamar a
scripts/render_resume.pypara generarlos localmente
Pasos de la Operación
Selección de Modo
Seleccionar el modo según la necesidad del usuario:
- Modo 1: Generar currículum (desde cero): ayudar al usuario a crear un currículum desde cero
- Modo 2: Optimizar currículum (currículum existente): optimizar basándose en el currículum existente del usuario
Todos los modos admiten entrada opcional:
- JD (el usuario pega el texto original)
- Puesto objetivo: target_title / target_level (China: P6/P7, Senior/Experto/Director; roles tecnológicos en EE. UU.: Senior/Staff, L5/L6, SDE II, etc.)
- Idioma: zh-CN / en-US
- Industria: Internet/AI/Datos/Desarrollo/Operaciones/Ventas/Funciones, etc.
- Plantilla: template_id (por defecto cn_ats_a4_v1)
Modo 1: Generar currículum (desde cero)
Paso 1: Recopilación de información
Con la menor cantidad de preguntas posible, ayudar al usuario a recopilar la siguiente información:
- Información básica: nombre, teléfono, correo electrónico, ciudad
- Puesto objetivo: target_title, target_level, target_industry
- Últimas 2-3 experiencias laborales: cada una incluye empresa, puesto, fecha de inicio y fin, 3 puntos clave de logros
- Formación académica: institución, título, especialidad, fecha de graduación
- Habilidades: habilidades principales (primary) y secundarias (secondary)
Paso 2: Generar ResumeIR
Convertir la información recopilada al formato ResumeIR (campos completos en Esquema ResumeIR.v1), los campos faltantes se rellenan con 【Marcador de posición】. Ejemplo de estructura mínima:
{
"meta": {"version": "1.0", "language": "zh-CN", "locale": "zh-CN"},
"basics": {"name": "Zhang San", "phone": "【Marcador de posición】", "email": "【Marcador de posición】", "target_title": "Product Manager"},
"summary": "",
"skills": {"primary": ["Análisis de requisitos", "Análisis de datos"], "secondary": []},
"work": [{"company": "Empresa X", "title": "Product Manager", "start": "2021-06", "end": "present",
"bullets": ["Lideré…, lo que resultó en un incremento del 20%"]}],
"projects": [],
"education": [{"school": "【Marcador de posición】", "degree": "Licenciatura", "start": "", "end": ""}]
}
Paso 3: Generar la primera versión del currículum
- Generar JSON de ResumeIR
- Generar vista previa en texto plano (ordenado según la secuencia estándar)
- Generar informe de diagnóstico (verificar principalmente la integridad)
- Generar conclusión de aceptabilidad para postulación:
ready / needs_fix / do_not_submit, y enumerar hasta 3 problemas que detendrían el primer filtro de RH - Generar lista mínima de complementos (máximo 8 preguntas)
Paso 4: Guardar versión
Guardar automáticamente como la primera versión: version_name = "{target_title}-{date}-{lang}"
Modo 2: Optimizar currículum (currículum existente)
Paso 1: Analizar currículum
- Si el usuario sube un archivo (PDF/DOCX/TXT): llamar a
scripts/parse_resume.pypara extraer el texto - Si el usuario pega texto: usar directamente el contenido del texto
Paso 2: Confirmación mostrando al usuario
Mostrar al usuario los siguientes campos clave para confirmar la precisión del análisis:
- Nombre
- Empresa más reciente
- Puesto más reciente
- Estimación de años de experiencia
Paso 3: Recopilar JD (opcional)
Preguntar al usuario si tiene un JD objetivo, si es así, que lo pegue
Paso 4: Generar ResumeIR e informe de diagnóstico
- Extraer información del texto del currículum, generar ResumeIR (los faltantes se rellenan con
【Marcador de posición】) - Generar informe de diagnóstico (puntuación 0-100, lista de problemas + gravedad + sugerencias)
- Generar conclusión de aceptabilidad para postulación: coincidencia de título, legibilidad en la primera página, datos de contacto, ubicación/fecha de inicio/autorización laboral, información tabú del mercado, si la evidencia del puesto satisface el primer filtro de RH
- Generar ResumeIR reescrito
- Generar vista previa en texto plano (cuando el usuario necesite el archivo, llamar a render_resume.py para exportar)
Paso 5: Guardar versión
Guardar automáticamente como la primera versión: version_name = "{target_title}-{date}-{lang}"
Especificaciones para la Reescritura del Currículum
Redacción de bullets de experiencia laboral
Cada bullet debe cumplir con la siguiente estructura:
Verbo de acción + Tarea + Método/Herramienta + Resultado (métrica)
Ejemplos:
- ❌ Incorrecto: Responsable del análisis de datos y la generación de informes
- ✅ Correcto: Utilicé Python y SQL para analizar datos de comportamiento de usuarios, optimicé funciones del producto mediante pruebas A/B, lo que resultó en un aumento del 20% en usuarios activos diarios
Requisitos de cuantificación
- Siempre que sea posible, usar números concretos, porcentajes, montos, etc., como indicadores cuantificables
- Cuando no sea posible cuantificar, usar el marcador de posición
【métrica】e indicarlo en la lista de complementos
Cobertura de palabras clave del JD (si hay JD)
- Realizar cobertura de palabras clave para las habilidades principales (≤12)
- Reflejarlas de forma natural en los bullets, evitando el relleno forzado
Gestión de Versiones
Guardar una versión
Usar el script para guardar el ResumeIR actual:
python3 scripts/version_manager.py save --version-name "Product Manager-2024-01-15-es" --resume-ir "resume_ir.json"
Renombrar una versión
python3 scripts/version_manager.py rename --old-name "v1" --new-name "Product Manager-2024-01-15-es"
Comparar versiones
python3 scripts/version_manager.py compare --version1 "v1" --version2 "v2"
Revertir a una versión
python3 scripts/version_manager.py rollback --version-name "v1"
Exportación de Archivos
Exportación local (Python puro, sin servicios externos/red)
Cuando el usuario solicite la exportación, guardar el ResumeIR actual como JSON y luego llamar al script:
python3 scripts/render_resume.py --resume-ir "resume_ir.json" --output-formats "docx,pdf" --output-dir ./out
La exportación utiliza una escalera de degradación, asegurando que se pueda generar un archivo utilizable en cualquier entorno:
- DOCX: generado con python-docx, una sola columna, títulos estándar, sin tablas/cuadros de texto, compatible con ATS (formato recomendado para postulación)
- PDF: generado directamente con reportlab + fuente CJK incorporada (solo pip, sin necesidad de fuentes/bibliotecas del sistema); si reportlab no está instalado, genera automáticamente un HTML optimizado para impresión e indica "Abrir en el navegador y usar Ctrl+P para guardar como PDF"
- El script no depende de ningún servicio remoto, se puede ejecutar localmente después de clonar
Estilos disponibles
cn_ats_a4_v1(chino, predeterminado) /en_ats_a4_v1(inglés); el idioma real lo determinameta.languageen ResumeIR- Ver:
python3 scripts/render_resume.py --list-templates - Para generar currículums bilingües o en inglés, consultar references/en-resume-conventions.md (banco de verbos de acción, prohibir foto/edad/estado civil, priorizar 1 página, fechas en inglés MMM YYYY, priorizar cuantificación)
- Para roles tecnológicos en EE. UU. (SWE/PM/DS): se puede hacer referencia directa a los tres ejemplos renderizables en assets/examples/:
en-US-software-engineer.json,en-US-product-manager.json,en-US-data-scientist.json(incluyen LinkedIn/GitHub, niveles de puesto en EE. UU., métricas tecnológicas estadounidenses como p99/QPS/SLA); cuandometa.language=en-US, la capa de renderizado aplica automáticamente títulos de sección en inglés y convierte las fechas ISOYYYY-MMaMMM YYYY
Índice de Recursos
Scripts Necesarios
- scripts/parse_resume.py: Script de análisis de currículums, compatible con PDF/DOCX/TXT/MD
- Parámetros: argumento posicional
<ruta_archivo>(también compatible con--input-file <ruta>) - Salida: JSON
{"text": "...", "format": "pdf|docx|txt", "pages": N, "success": true}; en caso de fallo, devuelve{"error": "...", "exit_code": N}
- Parámetros: argumento posicional
- scripts/version_manager.py : Script de gestión de versiones
- Parámetros:
save/rename/compare/rollback+ parámetros correspondientes - Salida: resultado de la operación de la versión
- Parámetros:
- scripts/render_resume.py: Script de exportación local (DOCX/PDF/HTML, sin servicios externos)
- Parámetros:
--resume-ir <archivo JSON>,--output-formats docx,pdf,html,--output-dir,--file-name - Salida: archivo DOCX / PDF (o HTML como respaldo)
- Parámetros:
Referencias del Dominio
- references/resumeir-schema.md: Definición del Esquema ResumeIR.v1 (leer al generar o analizar ResumeIR)
- references/diagnostic-report-spec.md: Especificación de salida del informe de diagnóstico (leer al generar el informe de diagnóstico)
- references/en-resume-conventions.md: Convenciones para currículums en inglés (leer al generar currículums bilingües/en inglés)
Ejemplos de Flujo de Conversación
Escenario 1: Generar currículum desde cero
Usuario: Ayúdame a crear un currículum
Agente: Claro, déjame ayudarte a crear tu currículum. Por favor, dime:
1. ¿Cuál es tu puesto objetivo?
2. ¿Cuál es tu situación laboral actual (empresa/puesto/años de experiencia)?
...
[Recopilación de información]
Agente: Se ha generado la primera versión del currículum. A continuación, mi análisis:
[Informe de diagnóstico]
Lista mínima de complementos (8 preguntas):
1. Por favor, proporciona tus datos de contacto específicos (teléfono/correo)
2. En tu primera experiencia laboral, ¿cuál es el valor de 【métrica】 que mencionaste?
...
Escenario 2: Optimizar currículum existente
Usuario: Ayúdame a optimizar este currículum [sube archivo]
Agente: [Analizando currículum] He extraído la siguiente información de tu currículum, por favor confírmala:
Nombre: Zhang San
Empresa más reciente: Empresa Tecnológica X
Puesto más reciente: Product Manager
Años de experiencia: 3-5 años
¿Tienes un JD objetivo? Si es así, pégalo.
[Si hay JD]
Agente: Optimización completada. El informe de diagnóstico es el siguiente:
Puntuación total: 72/100
Lista de problemas:
[P0] La sección de experiencia laboral carece de indicadores cuantificables (grave)
Sugerencia: cada bullet debe incluir números o porcentajes concretos
Ejemplo de reescritura: "Responsable de la iteración del producto" → "Lideré 5 iteraciones del producto, lo que resultó en un aumento del 15% en la retención de usuarios"
...
Lista de carencias (requisitos del JD que faltan en el currículum):
1. Habilidad en SQL (el JD lo requiere explícitamente)
Pregunta de complemento mínima: ¿Tienes experiencia usando SQL? ¿En qué contexto?
[Generar currículum reescrito]
Escenario 3: Exportar archivo
Usuario: Exporta este currículum
Agente: Generando archivos DOCX y PDF... [llamando a render_resume.py]
Archivos generados:
- Zhang San-Product Manager-2024-01-15.docx
- Zhang San-Product Manager-2024-01-15.pdf
Escenario 4: Comparar versiones
Usuario: Compara v1 y v2
Agente: [Llamando a version_manager.py compare]
Diferencias principales:
1. Experiencia laboral - Empresa Tecnológica X (2019-2022)
v1: Responsable del diseño de productos y análisis de requisitos
v2: Lideré 8 iteraciones del producto, optimizando mediante datos, lo que resultó en un aumento del 25% en la satisfacción del usuario
2. Habilidades - primary
v1: ["Diseño de productos", "Análisis de requisitos", "Gestión de proyectos"]
v2: ["Diseño de productos", "Análisis de requisitos", "Gestión de proyectos", "Análisis de datos", "SQL", "Pruebas A/B"]
Sugerencia: El contenido de la versión v2 es más completo, se recomienda usar la versión v2 para postularse.
Escenario 5: Revertir a una versión
Usuario: Revierte a v1
Agente: [Llamando a version_manager.py rollback]
Se ha revertido a la versión v1 (Product Manager-2024-01-10-es)
Consideraciones
Plan de Contingencia para Fallos
- Fallo en el análisis del currículum: solicitar al usuario que pegue texto plano; o que pegue por secciones ("educación/experiencia/proyecto")
- Información faltante: usar
【Marcador de posición】+ lista mínima de complementos (≤8 preguntas) - JD demasiado largo: extraer solo las secciones de responsabilidades del puesto y requisitos, ignorar el resto
- Contenido generado demasiado genérico: forzar que cada bullet incluya "resultado/impacto"; de lo contrario, marcarlo como problema P1 y dar un ejemplo de reescritura
Compatibilidad ATS (la restricción aplica al currículum "generado/exportado"; al analizar archivos subidos por el usuario, se puede leer normalmente el contenido de las tablas)
- Usar títulos de sección estándar (Experiencia laboral, Educación, Habilidades, etc.)
- Evitar el uso de tablas, cuadros de texto, iconos, imágenes
- Diseño de una sola columna por defecto
- Usar fuentes estándar (como Arial, Calibri)
- Evitar el uso de caracteres especiales y elementos decorativos
Garantía de Calidad
- Todos los bullets deben comenzar con un verbo de acción (como "Lideré", "Diseñé", "Implementé", "Optimicé", etc.)
- Asegurar que cada bullet tenga un resultado o impacto claro
- Evitar palabras debilitantes como "Responsable de", "Participé en"
- Priorizar la voz activa, evitar la voz pasiva
Ejemplos de Uso
Ejemplo 1: Generar currículum desde cero (bilingüe)
- Descripción de la función: ayudar al usuario a crear un currículum bilingüe (chino e inglés) desde cero
- Modo de ejecución: diálogo con el agente + guardar versión con script
- Parámetros clave: language=zh-CN/en-US, target_title, target_level
- Pasos:
- Recopilar información básica y experiencia
- Generar ResumeIR en chino
- Generar ResumeIR en inglés (traducción automática)
- Guardar como dos versiones (versión en chino y versión en inglés)
Ejemplo 2: Optimizar currículum basado en JD
- Descripción de la función: optimizar el contenido del currículum para un JD específico
- Modo de ejecución: análisis del agente + script de análisis
- Parámetros clave: texto del JD, archivo del currículum original
- Pasos:
- Analizar el currículum original
- Analizar los requisitos del JD
- Comparar para identificar carencias
- Reescribir el currículum para cubrir las palabras clave del JD
- Generar comparación y sugerencias de optimización
Ejemplo 3: Gestión de múltiples versiones
- Descripción de la función: crear múltiples versiones del currículum, comparar y seleccionar la mejor
- Modo de ejecución: gestión de versiones con scripts
- Parámetros clave: version_name, resume_ir
- Pasos:
- Guardar la versión v1
- Modificar y guardar la versión v2
- Comparar v1 y v2
- Revertir a la mejor versión
- Exportar la versión final