Compétence CV / Optimisation ATS
Objectifs
- Cette compétence permet de : aider l'utilisateur à créer, optimiser et gérer des CV professionnels compatibles ATS
- Capacités incluses : génération de CV, optimisation, vérification d'acceptabilité pour candidature, gestion de versions, export de fichiers
- Déclencheur : l'utilisateur a besoin de créer un nouveau CV, d'optimiser un CV existant, de comparer ou d'exporter un CV
Prérequis
- Dépendances : cette compétence utilise des bibliothèques Python purement locales pour le traitement et l'export de fichiers (aucun service externe / dépendance réseau)
pdfplumber>=0.10.0 # Analyse des CV PDF python-docx>=1.1.0 # Génération DOCX reportlab>=4.0.0 # Génération PDF (polices CJK intégrées, pure pip ; repli automatique vers HTML si absent) - Préparation des répertoires : créez un répertoire de gestion de versions dans le répertoire de travail courant
mkdir -p .resume-versions
Principes fondamentaux
Règles strictes
- Ne jamais inventer d'expériences/données utilisateur : les éléments manquants sont remplacés par
【Espace réservé】et une « liste minimale de compléments » est fournie - Compatibilité ATS : par défaut, une colonne, pas de tableaux, pas de zones de texte, pas d'icônes ; utiliser des titres de sections standard
- Acceptabilité pour candidature : le rapport de diagnostic doit vérifier, du point de vue du premier tri RH, si le titre correspond au poste, si les années d'expérience, le lieu, les coordonnées, l'autorisation de travail, la date de disponibilité sont clairs, et s'il y a des informations interdites sur le marché cible (photo, âge, mariage, situation familiale, prétentions salariales, affiliation politique)
- Sortie complète : doit toujours produire le JSON ResumeIR, le rapport de diagnostic, la conclusion d'acceptabilité, et le corps du CV réécrit ; les fichiers exportés sont générés à la demande par les scripts locaux (voir « Export de fichiers »)
- Réduction maximale de la saisie utilisateur : privilégier le collage de texte / le téléchargement de fichier ; ne poser des questions que sur les champs critiques manquants
Structure de sortie
Toute opération doit produire les trois parties suivantes (fichiers exportés générés à la demande) :
- JSON ResumeIR : noms de champs fixes, conformes au Schéma ResumeIR.v1
- Rapport de diagnostic : liste de problèmes + sévérité + suggestions, conforme aux Spécifications du rapport de diagnostic
- Conclusion d'acceptabilité pour candidature :
application_acceptability, répond à « Peut-on postuler maintenant / sur quoi le premier tri RH bloquera / que faut-il compléter en priorité » - Corps du CV réécrit : aperçu en texte brut
- (Optionnel) Fichiers exportés : lorsque l'utilisateur a besoin de DOCX/PDF, appeler
scripts/render_resume.pypour génération locale
Étapes d'opération
Sélection du mode
Choisir le mode en fonction du besoin de l'utilisateur :
- Mode 1 : Génération de CV (à partir de zéro) : aider l'utilisateur à créer un CV de zéro
- Mode 2 : Optimisation de CV (CV existant) : optimiser le CV existant de l'utilisateur
Tous les modes prennent en charge les entrées optionnelles :
- JD (texte original collé par l'utilisateur)
- Poste cible : target_title / target_level (Chine : P6/P7, Senior/Expert/Cadre ; postes tech US : Senior/Staff, L5/L6, SDE II, etc.)
- Langue : zh-CN / en-US
- Secteur : Internet/AI/Données/R&D/Opérations/Ventes/Fonctions support, etc.
- Modèle : template_id (par défaut cn_ats_a4_v1)
Mode 1 : Génération de CV (à partir de zéro)
Étape 1 : Collecte d'informations
Aider l'utilisateur à collecter les informations suivantes avec un minimum de questions :
- Informations de base : nom, téléphone, email, ville
- Poste cible : target_title, target_level, target_industry
- 2 à 3 expériences professionnelles récentes : pour chacune : entreprise, poste, dates de début et fin, 3 points clés de résultats
- Formation : école, diplôme, spécialité, date d'obtention
- Compétences : compétences principales (primary) et secondaires (secondary)
Étape 2 : Génération du ResumeIR
Convertir les informations collectées au format ResumeIR (champs complets dans Schéma ResumeIR.v1), les champs manquants sont remplis avec 【Espace réservé】. Exemple de squelette minimal :
{
"meta": {"version": "1.0", "language": "zh-CN", "locale": "zh-CN"},
"basics": {"name": "Zhang San", "phone": "【Espace réservé】", "email": "【Espace réservé】", "target_title": "Chef de Produit"},
"summary": "",
"skills": {"primary": ["Analyse des besoins", "Analyse de données"], "secondary": []},
"work": [{"company": "Entreprise X", "title": "Chef de Produit", "start": "2021-06", "end": "present",
"bullets": ["A mené…, ce qui a amélioré… de 20%"]}],
"projects": [],
"education": [{"school": "【Espace réservé】", "degree": "Licence", "start": "", "end": ""}]
}
Étape 3 : Génération de la première version du CV
- Produire le JSON ResumeIR
- Produire un aperçu en texte brut (mis en page dans l'ordre standard)
- Générer un rapport de diagnostic (vérifier principalement l'exhaustivité)
- Générer la conclusion d'acceptabilité pour candidature :
ready / needs_fix / do_not_submit, et lister au plus 3 problèmes qui bloqueraient le premier tri RH - Produire une liste minimale de compléments (8 problèmes maximum)
Étape 4 : Sauvegarde de version
Sauvegarder automatiquement comme première version : version_name = "{target_title}-{date}-{lang}"
Mode 2 : Optimisation de CV (CV existant)
Étape 1 : Analyse du CV
- Si l'utilisateur télécharge un fichier (PDF/DOCX/TXT) : appeler
scripts/parse_resume.pypour extraire le texte - Si l'utilisateur colle du texte : utiliser le texte directement
Étape 2 : Confirmation par affichage
Afficher les champs clés suivants à l'utilisateur pour confirmer l'exactitude de l'analyse :
- Nom
- Dernière entreprise
- Dernier poste
- Estimation des années d'expérience
Étape 3 : Collecte du JD (optionnel)
Demander à l'utilisateur s'il a un JD cible, et si oui, le coller
Étape 4 : Génération du ResumeIR et du rapport de diagnostic
- Extraire les informations du texte du CV, générer le ResumeIR (les manquants avec
【Espace réservé】) - Produire le rapport de diagnostic (score 0-100, liste de problèmes + sévérité + suggestions)
- Produire la conclusion d'acceptabilité pour candidature : adéquation du titre, lisibilité de la première page, coordonnées, lieu/disponibilité/autorisation de travail, informations interdites sur le marché, preuves de compétences pour le premier tri RH
- Générer le ResumeIR réécrit
- Produire un aperçu en texte brut (appeler render_resume.py pour l'export seulement si l'utilisateur demande un fichier)
Étape 5 : Sauvegarde de version
Sauvegarder automatiquement comme première version : version_name = "{target_title}-{date}-{lang}"
Règles de réécriture de CV
Format des puces d'expérience professionnelle
Chaque puce doit respecter la structure suivante :
Verbe d'action + tâche + méthode/outil + résultat (indicateur)
Exemples :
- ❌ Erreur : Responsable de l'analyse de données et de la génération de rapports
- ✅ Correct : A utilisé Python et SQL pour analyser les données de comportement des utilisateurs, optimisé les fonctionnalités produit via des tests A/B, ce qui a augmenté le nombre d'utilisateurs actifs quotidiens de 20%
Exigence de quantification
- Utiliser autant que possible des chiffres concrets, pourcentages, montants, etc.
- En cas d'impossibilité de quantification, utiliser l'espace réservé
【metric】et le signaler dans la liste de compléments
Couverture des mots-clés du JD (si JD fourni)
- Effectuer une couverture des mots-clés pour les compétences principales (≤12)
- Les intégrer naturellement dans les puces, éviter le bourrage artificiel de mots
Gestion de versions
Sauvegarder une version
Utiliser le script pour sauvegarder le ResumeIR courant :
python3 scripts/version_manager.py save --version-name "Chef de Produit-2024-01-15-fr-FR" --resume-ir "resume_ir.json"
Renommer une version
python3 scripts/version_manager.py rename --old-name "v1" --new-name "Chef de Produit-2024-01-15-fr-FR"
Comparer des versions
python3 scripts/version_manager.py compare --version1 "v1" --version2 "v2"
Revenir à une version
python3 scripts/version_manager.py rollback --version-name "v1"
Export de fichiers
Export local (Python pur, aucun service externe/réseau)
Lorsque l'utilisateur demande un export, sauvegarder le ResumeIR courant en JSON puis appeler le script :
python3 scripts/render_resume.py --resume-ir "resume_ir.json" --output-formats "docx,pdf" --output-dir ./out
L'export utilise un escalier de repli, garantissant qu'un fichier exploitable est produit dans n'importe quel environnement :
- DOCX : généré par python-docx, une colonne, titres standard, pas de tableaux/zones de texte, compatible ATS (format recommandé pour la candidature)
- PDF : généré directement par reportlab + polices CJK intégrées (pure pip, pas besoin de polices système/bibliothèques système) ; si reportlab n'est pas installé, génère automatiquement un HTML optimisé pour l'impression, avec le message « Ouvrir dans le navigateur puis Ctrl+P pour enregistrer en PDF »
- Le script ne dépend d'aucun service distant, peut être exécuté après un simple clone local
Styles disponibles
cn_ats_a4_v1(chinois, par défaut) /en_ats_a4_v1(anglais) ; la langue réelle est déterminée parmeta.languagedu ResumeIR- Voir :
python3 scripts/render_resume.py --list-templates - Pour générer un CV bilingue ou en anglais, se référer à references/en-resume-conventions.md (bibliothèque de verbes d'action, interdiction des photos/âge/état civil, priorité à 1 page, dates en anglais MMM YYYY, quantification prioritaire)
- Pour les postes tech américains (SWE/PM/DS) : se référer directement aux assets/examples/ avec les fichiers
en-US-software-engineer.json,en-US-product-manager.json,en-US-data-scientist.json, trois exemples prêts à rendre (incluant LinkedIn/GitHub, niveaux US, métriques tech américaines comme p99/QPS/SLA) ; lorsquemeta.language=en-US, le rendu utilise automatiquement les titres de section en anglais et convertit les dates ISOYYYY-MMenMMM YYYY
Index des ressources
Scripts nécessaires
- scripts/parse_resume.py : script d'analyse de CV, prend en charge PDF/DOCX/TXT/MD
- Paramètre : argument positionnel
<chemin du fichier>(également compatible avec--input-file <chemin>) - Sortie : JSON
{"text": "...", "format": "pdf|docx|txt", "pages": N, "success": true}; en cas d'échec retourne{"error": "...", "exit_code": N}
- Paramètre : argument positionnel
- scripts/version_manager.py : script de gestion de versions
- Paramètre :
save/rename/compare/rollback+ paramètres correspondants - Sortie : résultat de l'opération de version
- Paramètre :
- scripts/render_resume.py : script d'export local (DOCX/PDF/HTML, aucun service externe)
- Paramètre :
--resume-ir <fichier JSON>、--output-formats docx,pdf,html、--output-dir、--file-name - Sortie : fichier DOCX / PDF (ou HTML en repli)
- Paramètre :
Références du domaine
- references/resumeir-schema.md : Définition du schéma ResumeIR.v1 (à lire lors de la génération ou de l'analyse du ResumeIR)
- references/diagnostic-report-spec.md : Spécifications du rapport de diagnostic (à lire lors de la génération du rapport de diagnostic)
- references/en-resume-conventions.md : Conventions pour CV en anglais (à lire lors de la génération d'un CV bilingue/anglais)
Exemples de déroulement de dialogue
Scénario 1 : Génération de CV à partir de zéro
Utilisateur : Aide-moi à créer un CV
Agent : D'accord, je vais t'aider à créer ton CV. Dis-moi :
1. Quel est ton poste cible ?
2. Quelle est ta situation professionnelle actuelle (entreprise/poste/années d'expérience) ?
...
[Collecte d'informations]
Agent : La première version du CV est générée, voici mon analyse :
[Rapport de diagnostic]
Liste minimale de compléments (8 problèmes) :
1. Merci de fournir tes coordonnées précises (téléphone/email)
2. Dans la première expérience professionnelle, quel est le chiffre exact pour le 【metric】 mentionné ?
...
Scénario 2 : Optimisation d'un CV existant
Utilisateur : Optimise ce CV [télécharge un fichier]
Agent : [Analyse le CV] J'ai extrait les informations suivantes de ton CV, confirme-les :
Nom : Zhang San
Dernière entreprise : TechCorp
Dernier poste : Chef de Produit
Années d'expérience : 3-5 ans
As-tu un JD cible ? Si oui, colle-le.
[Si JD fourni]
Agent : Optimisation terminée, diagnostic :
Score total : 72/100
Liste des problèmes :
[P0] La section expérience professionnelle manque d'indicateurs quantifiés (critique)
Suggestion : chaque puce doit inclure un chiffre ou pourcentage spécifique
Exemple de réécriture : "Responsable des itérations produit" → "A mené 5 itérations produit, augmentant le taux de rétention utilisateur de 15%"
...
Liste des lacunes (exigences du JD absentes du CV) :
1. Compétence SQL (exigence claire du JD)
Question minimale : As-tu de l'expérience avec SQL ? Dans quel contexte ?
[Affiche le CV réécrit]
Scénario 3 : Export de fichier
Utilisateur : Exporte ce CV
Agent : Génération des fichiers DOCX et PDF en cours... [appelle render_resume.py]
Fichiers générés :
- Zhang San-Chef de Produit-2024-01-15.docx
- Zhang San-Chef de Produit-2024-01-15.pdf
Scénario 4 : Comparaison de versions
Utilisateur : Compare v1 et v2
Agent : [Appelle version_manager.py compare]
Différences principales :
1. Expérience professionnelle - TechCorp (2019-2022)
v1 : Responsable de la conception produit et de l'analyse des besoins
v2 : A mené 8 itérations produit, optimisé via une approche data-driven, augmentant la satisfaction utilisateur de 25%
2. Compétences - primary
v1 : ["Conception produit", "Analyse des besoins", "Gestion de projet"]
v2 : ["Conception produit", "Analyse des besoins", "Gestion de projet", "Analyse de données", "SQL", "Tests A/B"]
Suggestion : la version v2 est plus complète, il est recommandé d'utiliser v2 pour les candidatures.
Scénario 5 : Retour à une version
Utilisateur : Reviens à v1
Agent : [Appelle version_manager.py rollback]
Retour à la version v1 effectué (Chef de Produit-2024-01-10-fr-FR)
Points d'attention
Repli en cas d'échec
- Échec de l'analyse du CV : demander à l'utilisateur de coller le texte brut ; ou lui demander de coller le contenu par sections (formation/expérience/projets)
- Informations manquantes : utiliser
【Espace réservé】+ liste minimale de compléments (≤8 questions) - JD trop long : extraire uniquement les sections responsabilités et exigences du poste, ignorer le reste
- Contenu généré trop vague : forcer chaque puce à inclure un « résultat/impact », sinon le marquer comme problème P1 et fournir un exemple de réécriture
Compatibilité ATS (s'applique au CV « généré/exporté » ; l'analyse des fichiers téléchargés peut lire normalement le contenu des tableaux)
- Utiliser des titres de section standard (Expérience professionnelle, Formation, Compétences, etc.)
- Éviter l'utilisation de tableaux, zones de texte, icônes, images
- Par défaut, mise en page à une colonne
- Utiliser des polices standard (ex. Arial, Calibri)
- Éviter l'utilisation de caractères spéciaux et d'éléments décoratifs
Assurance qualité
- Toutes les puces doivent commencer par un verbe d'action (ex. « A mené », « A conçu », « A implémenté », « A optimisé », etc.)
- S'assurer que chaque puce a un résultat ou impact clair
- Éviter les termes faibles comme « Responsable de », « A participé à »
- Privilégier la voix active, éviter la voix passive
Exemples d'utilisation
Exemple 1 : Génération de CV à partir de zéro (chinois/anglais)
- Description : aider l'utilisateur à créer un CV bilingue chinois/anglais à partir de zéro
- Mode d'exécution : dialogue avec agent + script de sauvegarde de version
- Paramètres clés : language=zh-CN/en-US, target_title, target_level
- Étapes :
- Collecter les informations de base et les expériences
- Générer le ResumeIR en chinois
- Générer le ResumeIR en anglais (traduction automatique)
- Sauvegarder en deux versions (chinois et anglais)
Exemple 2 : Optimisation de CV basée sur un JD
- Description : optimiser le contenu du CV pour un JD spécifique
- Mode d'exécution : analyse par l'agent + script d'analyse
- Paramètres clés : texte du JD, fichier CV original
- Étapes :
- Analyser le CV original
- Analyser les exigences du JD
- Comparer et identifier les lacunes
- Réécrire le CV pour couvrir les mots-clés du JD
- Produire la comparaison et les suggestions d'optimisation
Exemple 3 : Gestion multi-versions
- Description : créer plusieurs versions de CV, comparer et sélectionner la meilleure
- Mode d'exécution : script de gestion de versions
- Paramètres clés : version_name, resume_ir
- Étapes :
- Sauvegarder la version v1
- Modifier puis sauvegarder la version v2
- Comparer v1 et v2
- Revenir à la meilleure version
- Exporter la version finale