Ma contribution au #HackAVP, le hackathon de l'OPT-NC, de Station N et de la commission Data & IA d'OPEN NC, réalisée dans le cours Interopérabilité des SI du M2 MIAGE de l'IAE de Nouvelle-Calédonie. Dans le projet de notre promo, je m'occupe de la brique matching.
Au départ, une question toute bête
Se demander « est-ce que mon CV coche vraiment les cases ? ».
Ici, en Nouvelle-Calédonie, l'OPT-NC publie ses offres d'emploi en open data, décrites compétence par compétence et ouvertes à tous. De quoi construire un outil vraiment utile au territoire, pour les candidats comme pour les recruteurs.
D'où ma question de départ : et si un CV pouvait être comparé à toutes les offres en quelques secondes… à condition que la machine explique pourquoi ?
La règle : pas de chiffre sans preuve
Beaucoup d'outils de « matching » donnent une note, point. 72 %. Pourquoi 72 ??? Mystère...
Je voulais l'inverse : chaque point du score doit pouvoir être vérifié.
CV-Matching affiche donc, pour chaque compétence de l'offre, la phrase du CV qui la prouve. Exemple réel, avec le CV fictif d'une auditrice interne face à l'offre Auditeur – Service de l'audit interne :
56 % · « Très bonne adéquation » · 8 compétences sur 15
Méthodologie d'audit ← « Réalisation de missions d'audit selon les normes professionnelles »
Si une preuve est mauvaise, ça se voit tout de suite.
Deux enquêteurs pour chaque compétence
Pour trouver ces preuves, deux modèles d'IA open source travaillent en duo :
-
le chercheur (
BAAI/bge-m3, licence MIT) passe le CV au peigne fin et ressort, pour chaque compétence, les 3 phrases qui lui ressemblent le plus ; -
le vérificateur (
BAAI/bge-reranker-v2-m3, licence Apache-2.0) relit ces phrases une par une et tranche : vraie preuve, ou simple ressemblance ?
Ensuite, on fait la moyenne, en donnant plus de poids aux compétences rares : savoir mener un audit compte plus que « rigueur ». Les savoir-être sont mis à part, parce que ça, ça se vérifie en entretien. Le référentiel ROME 4.0 de France Travail fait aussi le lien entre les outils cités dans un CV (Excel, Word…) et les compétences de l'offre.
Pour lancer une analyse, il faut trois choses : un CV au format JSON Resume (un CV « rangé dans des cases », lisible par une machine), les offres de l'OPT-NC, et un clic. Le nom, l'e-mail et le téléphone ne sont jamais lus : seul le parcours compte.
👉 À tester : huggingface.co/spaces/Myz0/CV-Matching.
Côté candidat, on dépose un CV et toutes les offres sont classées.

Côté recruteur, on choisit une offre et les CV sont classés.

Uniquement des CV fictifs.
Le jour où j'ai arrêté de croire mes intuitions
Au début, je réglais « au feeling ». Mauvaise idée : une modification qui semblait meilleure rendait parfois le classement pire...
Alors j'ai écrit mes propres examens : 23 CV fictifs dont je connaissais la bonne réponse et un script qui note le classement tout seul.
À partir de là, une seule règle : mesurer, corriger, re-mesurer. Une idée qui ne fait pas mieux est abandonnée, même si je l'aimais bien.
Résultat : le bon CV arrive premier dans 84 % des cas, contre 68 % au départ.
Sauf qu'un élève qui révise avec le sujet de l'examen a forcément une bonne note. J'ai donc écrit 18 autres CV, jamais utilisés pour régler quoi que ce soit. Là, le poste visé arrive premier dans 71 % des cas. Moins flatteur, mais plus honnête. Et sur les deux jeux, aucun profil hors sujet (cuisinier, infirmier, graphiste…) ne passe devant un bon candidat.
Le test qui m'a le plus convaincu : réécrire les meilleurs CV avec d'autres mots, pour le même parcours. Une recherche par mots-clés s'effondre (1 bon poste sur 7). CV-Matching garde le bon poste en tête 7 fois sur 7. Toute la différence entre comparer des mots et comparer du sens.
Il reste du travail : le vérificateur est parfois trop sévère avec les preuves partielles, et le jeu de test est petit. Il faudra confirmer avec de vrais CV.
Une brique dans JobMatch NC
Je ne travaillais pas seul dans mon coin : notre promo a construit une chaîne de 7 microservices autour d'un hub commun, HACKAVPI.
Ma brique est le maillon matching, la fonction « score explicable » demandée par le hackathon.
Ce qui entre :
- les offres, lues directement dans le dataset open data de l'OPT-NC (
opt-nc/odata-avps), au format schema.orgJobPosting; - les CV, lus sur le hub, à la demande, avec le jeton du recruteur : c'est le hub qui gère les droits, et je ne stocke rien.
Ce qui sort : les scores, envoyés aux deux sites de la promo, AVPRO-NC pour les recruteurs et Adopte un Job pour les candidats, qui appellent mon API.
| Échange | Avec qui | Format |
|---|---|---|
| Offres → CV-Matching | dataset open data de l'OPT-NC | JSON-LD schema.org JobPosting
|
| CV → CV-Matching | hub HACKAVPI | API REST, jeton du recruteur |
| Scores → sites | AVPRO-NC, Adopte un Job | API REST JSON, OpenAPI, avec clé |
| Scores → IA | agents conversationnels | MCP (matcher_cv, classer_candidats) |
Les routes principales : POST /v1/match (un CV → les offres classées), POST /v1/avps/{id_avp}/candidats (une offre → les candidats classés), POST /v1/score (une candidature) et POST /v1/hub/avps/{id_avp}/candidatures (les candidats qui ont postulé sur le hub). Tout est documenté sur /docs. Et la clé commune entre toutes les briques reste la référence de l'offre, par exemple 3134-26-1419/SR.
Petite leçon d'humilité au passage : les premiers CV de test du hub étaient presque vides… et les scores, très bas. Logique : le service ne note que ce qui est écrit. Un CV vide ne prouve rien.
Une IA sérieuse… sur un PC portable
Pas besoin d'une machine de guerre. J'ai tout développé sur mon PC portable, avec une RTX 3050 et ses 4 Go de mémoire : il a fallu faire tenir les deux modèles dedans (bge-m3 en demi-précision). Résultat : environ 4,5 s pour comparer un CV à toutes les offres, et 1,5 s en mode simplifié, sans carte graphique.
La démo de la vidéo a d'ailleurs été filmée sur cette machine.
...partie souveraineté à bien expliquer je pense...
Le coût : environ 950 XPF par mois, l'abonnement Hugging Face PRO. Modèles, données, IA : 0 XPF.
Ce que je retiens
- Une IA qui se justifie inspire plus confiance qu'une IA qui a raison sans dire pourquoi.
- Mesurer avant de croire et mesurer sur des données qu'on n'a pas utilisées pour régler.
- L'interopérabilité, c'est surtout se mettre d'accord : sur des formats ouverts, et sur une clé commune.
Prochaines étapes : mettre CV-Matching en production chez l'OPT-NC, maintenant que les deux sites affichent les scores, le tester avec de vrais CV, et apprendre au vérificateur à être un peu moins sévère.
Remerciement !!!
Un grand merci à Adrien Sales, qui a organisé le HackAVP côté OPT-NC et qui en tant que professeur, nous a accompagnés et guidés tout au long du projet. Merci aussi à l'OPT-NC d'avoir ouvert ses données, à la Station N, à la commission Data & IA d'OPEN NC, à l'IAE de Nouvelle-Calédonie, et à toute la promo, en particulier aux équipes d'AVPRO-NC, d'Adopte un Job et du hub HACKAVPI, sans qui ma brique n'aurait parlé à personne.
Liens
- 🎬 Vidéo : CV-Matching
- 🧪 Démo : huggingface.co/spaces/Myz0/CV-Matching
- 📖 API : myz0-cv-matching.hf.space/docs
- 📦 Données : opt-nc/odata-avps
CV-Matching : le bon profil, preuves à l'appui.










Top comments (0)