Matching CV et offres par recherche vectorielle : des recommandations en quelques secondes

Étude de cas

Matching CV et offres par recherche vectorielle : des recommandations en quelques secondes

Toutes les études de cas

J'ai conçu une fonction de matching de CV pour la section carrières de vaiibe.com, qui liste des offres en télétravail de micro1, Turing et Mercor. Un candidat dépose un CV en PDF ou Word, un modèle IA lit son profil, et la recherche vectorielle renvoie en quelques secondes les dix offres ouvertes les plus proches. Le CV reste dans un stockage privé et il est supprimé automatiquement au bout de 180 jours.

3
Plateformes réunies dans un index
768
Dimensions par vecteur d’offre
10
Recommandations par CV
180
Jours avant la suppression du CV

Le problème

La section carrières de mon site rassemble plusieurs centaines d'offres en télétravail issues de trois plateformes de recrutement. Les parcourir est simple ; trouver les bonnes l'est beaucoup moins.

  • Les filtres par mots-clés ratent de bonnes offres. Un « backend engineer » et un « API developer » peuvent désigner le même poste, et un filtre sur un mot masque l'autre.
  • Trois sources, trois formats. Chaque plateforme décrit différemment les compétences, les tarifs et les pays éligibles, donc un même filtre ne veut pas dire la même chose partout.
  • Les candidats abandonnent. Faire défiler des centaines d'annonces pour en trouver cinq pertinentes est exactement la tâche que l'on laisse tomber.
  • Un CV est une donnée personnelle sensible. Une fonction qui le lit doit être privée, minimale et facile à supprimer, sinon elle ne devrait pas exister.

L'approche

J'ai traité le matching comme une question de sens plutôt que de mots-clés, et la confidentialité comme une contrainte de conception dès la première ligne.

Un modèle commun pour trois plateformes

Une synchronisation quotidienne récupère les offres ouvertes de micro1, Turing et Mercor et les normalise dans un format unique, avec un résumé et des traductions en français et en arabe pour chaque annonce. Les offres fermées sont retirées au passage suivant.

Chaque offre devient un vecteur

Le résumé de chaque offre ouverte est transformé en un embedding de 768 dimensions avec le modèle d'embedding Gemini de Google, puis stocké dans un index vectoriel Firestore. Quand une offre ferme, son vecteur est supprimé : les recommandations ne pointent donc jamais vers une annonce à laquelle on ne peut plus postuler.

La lecture du CV

Un PDF est envoyé directement à Gemini Flash-Lite, et un fichier Word est d'abord converti en texte. Le modèle extrait un profil structuré : compétences, séniorité et domaines. Ce profil est converti en requête vectorielle puis comparé à chaque offre par similarité cosinus, et les dix offres ouvertes les plus proches reviennent au candidat.

La confidentialité dès la conception

  • Les fichiers sont déposés dans un espace de stockage privé, avec l'accès public bloqué.
  • Les dépôts sont limités à trois par jour par connexion pour éviter les abus.
  • Le candidat reçoit un jeton de suppression qui efface le fichier et le profil extrait en un clic.
  • Chaque CV est supprimé automatiquement au bout de 180 jours.
  • Être contacté pour une offre correspondante est un choix facultatif, jamais une condition.

Résultat

La fonction est en ligne dans la section carrières de vaiibe.com.

  • Des recommandations en quelques secondes : lors d'un test en production, un vrai CV au format PDF a renvoyé dix offres pertinentes en six secondes environ.
  • Un matching par le sens, pas par les mots : un profil Python senior fait remonter des postes Python et backend seniors, et une recherche sur le droit des contrats fait remonter des offres juridiques même quand l'annonce emploie d'autres termes.
  • Des résultats qui restent : les recommandations restent disponibles sur l'appareil du candidat, qui peut les masquer, recommencer avec un nouveau CV ou tout supprimer.
  • La confiance intégrée : stockage privé, suppression en un clic et expiration automatique rendent la fonction utilisable sans demander aux candidats une confiance aveugle.

La même architecture s'applique à tout catalogue difficile à explorer : produits, formations, biens immobiliers ou documents internes. Vous pouvez l'essayer sur la page carrières.

Stack technique

Genkit
Gemini Flash-Lite
Gemini Embedding
Firestore Vector Search
Cloud Storage
Next.js
TypeScript

Services associés