Let's Build: KI-Lebenslauf-Parser mit Transloadit
Das Parsen von Lebensläufen ist ein klassisches SaaS-Problem: Sie nehmen unsaubere Dokumente aus der Praxis entgegen und extrahieren daraus strukturierte Felder, die ATS-Pipelines speisen. Mit Transloadit bauen Sie diesen Workflow aus Primitiven in einer einzigen Assembly.
Was wir bauen
- Lebensläufe als PDF, DOCX oder Bild annehmen
- Nicht-PDFs mit 🤖 /document/convert in PDF konvertieren
- Felder mit 🤖 /ai/chat (English) extrahieren
Zuerst das Schema (zod)
import { z } from 'zod'
import { zodToJsonSchema } from 'zod-to-json-schema'
const resumeSchema = z.object({
full_name: z.string().optional(),
headline: z.string().optional(),
email: z.string().optional(),
phone: z.string().optional(),
location: z.string().optional(),
summary: z.string().optional(),
skills: z.array(z.string()).optional(),
work_experience: z
.array(
z.object({
company: z.string().optional(),
title: z.string().optional(),
start_date: z.string().optional(),
end_date: z.string().optional(),
highlights: z.array(z.string()).optional(),
}),
)
.optional(),
education: z
.array(
z.object({
institution: z.string().optional(),
degree: z.string().optional(),
start_date: z.string().optional(),
end_date: z.string().optional(),
}),
)
.optional(),
})
const toJsonSchema = (schema: z.ZodTypeAny): unknown =>
typeof (z as { toJSONSchema?: typeof zodToJsonSchema }).toJSONSchema === 'function'
? (z as { toJSONSchema: typeof zodToJsonSchema }).toJSONSchema(schema)
: zodToJsonSchema(schema)
const resumeJsonSchema = toJsonSchema(resumeSchema)
Überblick über die Pipeline
PDF resumes ──▶ /ai/chat
Other docs ──▶ /document/convert (pdf) ──▶ /ai/chat
Assembly-Snippet
const assembly = await transloadit.createAssembly({
params: {
steps: {
pdf_verified: {
robot: '/file/filter',
use: ':original',
accepts: [['${file.mime}', '==', 'application/pdf']],
},
non_pdf: {
robot: '/file/filter',
use: ':original',
accepts: [['${file.mime}', '!=', 'application/pdf']],
},
pdf_converted: {
robot: '/document/convert',
use: 'non_pdf',
format: 'pdf',
},
extract_resume: {
robot: '/ai/chat',
use: ['pdf_verified', 'pdf_converted'],
model: 'anthropic/claude-4-sonnet-20250514',
format: 'json',
schema: JSON.stringify(resumeJsonSchema),
messages: 'Extract resume fields. Omit keys if unknown.',
result: true,
},
},
},
files: {
document: filePath,
},
waitForCompletion: true,
})
Die Beispiel-App ausprobieren
Das vollständige Beispielskript und die Einrichtungsanleitung sind in diesem Repository enthalten. Führen Sie im Stammverzeichnis des Repositorys aus:
node public/example_apps/resume-parser/run.ts
Beispieleingaben
Verwenden Sie die mitgelieferten Beispieldateien oder setzen Sie einen echten Lebenslauf als PDF ein:
_assets/demos/inputs/first_document.pdf_assets/demos/inputs/second_document.pdf_assets/demos/inputs/scan.pdf
Nächste Schritte
- Fügen Sie eine Normalisierungsschicht für Telefonnummern und Datumsangaben hinzu.
- Markieren Sie fehlende Felder und leiten Sie sie zur manuellen Prüfung weiter.
- Speichern Sie die Ergebnisse in einer Talentdatenbank oder einem ATS.
