Let’s Build : analyseur de CV par IA avec Transloadit
Transformez un CV PDF ou DOCX en fichier JSON local contenant les coordonnées, les compétences, l’expérience professionnelle et la formation. Cet exemple TypeScript utilise Transloadit pour convertir les documents si nécessaire et extraire les champs à l’aide d’un modèle d’IA. Vous pouvez l’exécuter depuis un nouveau répertoire sans le dépôt de ce site, puis comparer le résultat sauvegardé avec votre document source.
Ce que nous allons créer
- Accepter un CV PDF ou DOCX.
- Convertir le DOCX en PDF avec 🤖 /document/convert.
- Extraire les champs avec 🤖 /ai/chat et les enregistrer en JSON.
L’exemple sélectionne anthropic/claude-sonnet-4-6, qui prend en charge les PDF en entrée via /ai/chat.
Il n’accepte pas les fichiers image et ne classe pas les candidats. La validation du schéma vérifie
la structure de la réponse ; elle n’établit pas l’exactitude des informations extraites.
Le schéma d’abord (zod)
Le script d’exemple exporte le schéma utilisé à la fois pour la
requête au modèle et la validation locale. Après avoir téléchargé l’application ci-dessous,
enregistrez ceci sous inspect-schema.ts à la racine de votre projet et exécutez node inspect-schema.ts :
import { zodToJsonSchema } from 'zod-to-json-schema'
import { resumeSchema } from './resume-parser/run.ts'
const resumeJsonSchema = zodToJsonSchema(resumeSchema)
console.log(JSON.stringify(resumeJsonSchema, null, 2))
Tous les champs sont obligatoires dans la réponse. Les textes inconnus sont représentés par une
chaîne vide et les listes sans éléments par des tableaux vides. Outre les champs de coordonnées et
d’emploi, le schéma inclut summary,
certifications et links ; il ne renvoie pas de scores de confiance.
Une extraction entièrement vide est rejetée, mais une valeur plausible et incorrecte peut tout de
même passer la validation.
Vue d’ensemble du pipeline
PDF resumes ──▶ /ai/chat ──▶ local JSON
DOCX resumes ──▶ /document/convert (pdf) ──▶ /ai/chat ──▶ local JSON
Extrait d’Assembly
Pour examiner les Steps réels sans soumettre une
Assembly, enregistrez ceci sous inspect-steps.ts à la même
racine du projet et exécutez node inspect-steps.ts :
import { example } from './resume-parser/run.ts'
const steps = example.steps({ test_credentials: true })
console.log(JSON.stringify({ steps }, null, 2))
La recette filtre les PDF téléversés vers pdf_verified et convertit les autres documents acceptés via
pdf_converted. Le Step extract_resume utilise ces sorties et demande du JSON avec un schéma
sérialisé. La construction de ces instructions n’effectue aucune requête API. La CLI gère le
téléversement, l’attente, le téléchargement du résultat et sa validation avant son enregistrement.
Essayer l’exemple d’application
Utilisez un nouveau répertoire vide et suivez les
instructions d’installation complètes. Elles installent la combinaison testée
comprenant @transloadit/node 4.14.0, Zod 3.25.76 et zod-to-json-schema 3.25.2 avec Yarn 4.12.0.
Ce tutoriel a été testé avec Node.js 26.12.1 ;
utilisez une version de Node.js encore maintenue qui satisfait le prérequis du README. Corepack et
cURL doivent également être disponibles. Ces versions servent à reproduire l’exemple ; elles ne
sont pas présentées comme les dernières versions disponibles.
Cet exécuteur existant utilise des schémas Zod 3 avec le convertisseur JSON Schema déprécié. Conservez les versions exactes indiquées pour le reproduire. Adapter l’application à Zod 4 nécessite également de mettre à jour la conversion de son schéma ; changer uniquement la version majeure installée ne suffit pas.
Téléchargez resume-parser/run.ts et shared/runtime.ts à l’aide des commandes du README. Leur
emplacement relatif compte, car l’analyseur importe l’environnement d’exécution partagé. Effectuez
l’installation en dehors d’un projet existant pour que sa configuration de gestionnaire de paquets
n’affecte pas votre premier test. La commande finale --help du README démarre
l’application sans rien téléverser.
L’installation crée package.json sans remplacer de fichier existant. Si l’installation ou un téléchargement
s’interrompt en cours de route, conservez ce répertoire pour l’examiner et recommencez dans un autre
répertoire vide.
Exportez l’Auth Key et l’Auth Secret de votre Workspace Transloadit sous les noms TRANSLOADIT_AUTH_KEY et
TRANSLOADIT_AUTH_SECRET dans le shell où vous exécuterez l’application. Ne placez pas leurs valeurs
sous gestion de versions. Le script lit l’environnement du processus et ne charge pas de fichier
d’environnement.
Pour la commande ci-dessous, laissez TRANSLOADIT_AI_CREDENTIALS non défini : --test-credentials sélectionne
explicitement les informations d’identification d’IA fournies par Transloadit. Les informations
d’identification d’IA de test et les autres Steps de traitement sont facturés. Vous pouvez aussi
indiquer le nom d’un jeu d’informations d’identification d’IA Anthropic existant dans
TRANSLOADIT_AI_CREDENTIALS et omettre l’option. Sélectionnez exactement un mode ; le programme ne crée
ni ne modifie les informations d’identification. Consultez la
documentation des informations d’identification d’IA avant de choisir un mode.
Placez un CV que vous êtes autorisé à téléverser à l’emplacement resume.pdf, puis exécutez :
node resume-parser/run.ts --input ./resume.pdf --output ./result.json --test-credentials
Utilisez une nouvelle destination à chaque exécution. L’application refuse une sortie existante avant de soumettre une Assembly et laisse le fichier d’entrée intact. Ce tutoriel limite l’entrée et la sortie téléchargée à 20 MiB ; ce sont les limites de l’exemple, pas celles du produit Transloadit. Il accorde cinq minutes au traitement et 30 secondes au téléchargement du résultat.
En cas de réussite, le terminal affiche un identifiant d’Assembly et un message Saved suivi du chemin local du fichier de sortie. Examinez ce fichier :
cat ./result.json
Comparez les noms, adresses e-mail, compétences, dates et expériences professionnelles avec l’original avant de les importer dans un ATS. Une Assembly réussie ou un JSON lisible ne suffit pas à prouver l’exactitude de l’extraction. Gardez le fichier enregistré privé lorsqu’il contient des informations personnelles.
Si l’exécution échoue après l’affichage d’un identifiant d’Assembly, examinez cette Assembly dans la Console avant de réessayer. Un dépassement de délai ou une interruption locale ne prouve pas que le traitement distant s’est arrêté, et le travail peut toujours être facturé. Le script ne relance pas automatiquement une Assembly. Lorsqu’il gère un échec de validation du résultat, il supprime la sortie inachevée et préserve toute destination préexistante. Une interruption peut laisser un fichier local partiel ; examinez-le avant de choisir une nouvelle destination.
Exemples d’entrées
Commencez par un CV fictif que vous créez au format PDF ou DOCX. Utilisez par exemple « Jamie Example »,
jamie@example.test, les compétences « TypeScript » et « PostgreSQL », et un poste chez « Example Systems ».
Associez à ce poste une réalisation concrète telle que « Création d’un service interne de recherche
documentaire ». Ces faits connus vous permettent de vérifier le résultat enregistré sans téléverser
les informations d’une personne réelle.
Remplacez --input ./resume.pdf par le chemin de votre DOCX pour utiliser la branche de conversion. La même CLI et
le même schéma JSON s’appliquent. La mise en page du document et l’inférence du modèle peuvent
affecter le résultat ; examinez donc chaque sortie au lieu de considérer un exemple validé comme
une garantie d’exactitude.
Étapes suivantes
Normalisez les numéros de téléphone et les dates uniquement après avoir vérifié leurs valeurs sources. Traitez les champs vides comme des informations manquantes et soumettez les extractions incertaines à une vérification manuelle. Lorsque vous adaptez le script d’exemple à un ATS, conservez cette étape de vérification entre l’extraction et l’importation.

