Let's Build: analizador de currículums con IA y Transloadit
Convierte un currículum PDF o DOCX en un archivo JSON local con datos de contacto, competencias, experiencia laboral y formación académica. Este ejemplo en TypeScript usa Transloadit para convertir los documentos cuando sea necesario y extraer campos con un modelo de IA. Puedes ejecutarlo desde un directorio nuevo sin el repositorio de este sitio web y después comparar el resultado guardado con tu documento original.
Qué vamos a crear
- Aceptar un currículum PDF o DOCX.
- Convertir DOCX a PDF con 🤖 /document/convert.
- Extraer campos con 🤖 /ai/chat y guardarlos como JSON.
El ejemplo selecciona anthropic/claude-sonnet-4-6, que admite archivos PDF de entrada mediante /ai/chat.
No acepta archivos de imagen ni clasifica candidatos. La validación del esquema comprueba la
estructura de la respuesta; no establece que la información extraída sea correcta.
Primero el esquema (zod)
El script de ejemplo exporta el esquema que se usa tanto para la
solicitud al modelo como para la validación local. Después de descargar la aplicación que aparece
más abajo, guarda lo siguiente como inspect-schema.ts en la raíz de tu proyecto y ejecuta 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))
Todos los campos son obligatorios en la respuesta. Para el texto desconocido se usa una cadena vacía,
y para las listas sin entradas, arrays vacíos. Además de los campos de contacto y empleo, el esquema
incluye summary,
certifications y links; no devuelve puntuaciones de confianza. Una extracción completamente vacía
se rechaza, pero un valor plausible e incorrecto puede superar la validación.
Visión general del pipeline
PDF resumes ──▶ /ai/chat ──▶ local JSON
DOCX resumes ──▶ /document/convert (pdf) ──▶ /ai/chat ──▶ local JSON
Fragmento de Assembly
Para inspeccionar los Steps reales sin enviar una
Assembly, guarda lo siguiente como inspect-steps.ts en la misma
raíz del proyecto y ejecuta 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 configuración filtra los PDF subidos y los dirige a pdf_verified, y convierte los demás documentos aceptados mediante
pdf_converted. El Step extract_resume consume esos resultados y solicita JSON con un esquema
serializado. Construir estas instrucciones no envía ninguna solicitud a la API. La CLI se encarga de
subir el archivo, esperar, descargar el resultado y validarlo antes de guardarlo.
Prueba la aplicación de ejemplo
Usa un directorio nuevo y vacío y sigue las
instrucciones de configuración completas. Estas instalan la combinación probada
de @transloadit/node 4.14.0, Zod 3.25.76 y zod-to-json-schema 3.25.2 con Yarn 4.12.0.
Este tutorial se probó con Node.js 26.12.1;
usa una versión de Node.js que siga recibiendo mantenimiento y cumpla el requisito del README.
Corepack y cURL también deben estar disponibles. Estas versiones permiten reproducir el ejemplo;
no se afirma que sean las más recientes.
Este programa existente usa esquemas de Zod 3 con el conversor a JSON Schema obsoleto. Conserva las versiones fijas indicadas para reproducirlo. Adaptar la aplicación a Zod 4 también requiere actualizar la conversión de su esquema; cambiar solo la versión principal instalada no es suficiente.
Descarga tanto resume-parser/run.ts como shared/runtime.ts con los comandos del README. Su
ubicación relativa importa porque el analizador importa el entorno de ejecución compartido.
Ejecuta la configuración fuera de un proyecto existente para que la configuración de su gestor
de paquetes no afecte a tu primera prueba. El comando final
--help del README inicia la aplicación sin subir nada.
La configuración crea package.json sin reemplazar un archivo existente. Si la instalación o una descarga se detiene
a mitad del proceso, conserva ese directorio para inspeccionarlo y vuelve a empezar en otro vacío.
Exporta la Auth Key y el Auth Secret de tu Workspace de Transloadit como TRANSLOADIT_AUTH_KEY y
TRANSLOADIT_AUTH_SECRET en la sesión de shell donde ejecutarás la aplicación. Mantén sus valores fuera del
control de versiones. El script lee el entorno del proceso y no carga ningún archivo de entorno.
Para el siguiente comando, deja TRANSLOADIT_AI_CREDENTIALS sin definir: --test-credentials selecciona explícitamente
las credenciales de IA proporcionadas por Transloadit. Las credenciales de prueba de IA y los demás
Steps de procesamiento se facturan. Como alternativa, usa el nombre de una credencial de IA de
Anthropic existente en TRANSLOADIT_AI_CREDENTIALS y omite la opción. Selecciona exactamente un modo; el programa no crea
ni cambia credenciales. Revisa la documentación de credenciales de IA antes de
elegir un modo.
Coloca un currículum que tengas autorización para subir en resume.pdf y luego ejecuta:
node resume-parser/run.ts --input ./resume.pdf --output ./result.json --test-credentials
Usa un destino nuevo en cada ejecución. La aplicación rechaza un archivo de salida existente antes de enviar una Assembly y deja intacto el archivo de entrada. Este tutorial limita la entrada y la salida descargada a 20 MiB; son límites del ejemplo, no del producto Transloadit. Permite cinco minutos para el procesamiento y 30 segundos para descargar el resultado.
Si la ejecución finaliza correctamente, la terminal imprime el ID de la Assembly y un mensaje Saved seguido de la ruta local de salida. Inspecciona ese archivo:
cat ./result.json
Compara los nombres, las direcciones de email, las competencias, las fechas y las entradas de experiencia laboral con el original antes de importarlos a un ATS. Una Assembly completada correctamente o un JSON legible no bastan para demostrar que la extracción sea precisa. Mantén privado el archivo guardado cuando contenga información personal.
Si la ejecución falla después de imprimir el ID de una Assembly, inspecciona esa Assembly en la Console antes de volver a intentarlo. Un tiempo de espera agotado o una interrupción local no establecen que el procesamiento remoto se haya detenido, y el trabajo aún puede facturarse. El script no reintenta automáticamente una Assembly. Cuando el script gestiona un fallo de validación del resultado, elimina la salida incompleta y conserva cualquier destino preexistente. Una interrupción puede dejar un archivo local parcial; inspecciónalo antes de elegir un destino nuevo.
Archivos de entrada de ejemplo
Empieza con un currículum sintético que crees como PDF o DOCX. Por ejemplo, usa «Jamie Example»,
jamie@example.test, las competencias «TypeScript» y «PostgreSQL», y un puesto en «Example Systems».
Asigna a ese puesto un logro concreto, como «Desarrollé un servicio interno de búsqueda de
documentos». Estos datos conocidos te permiten comprobar el resultado guardado sin subir
información de una persona real.
Reemplaza --input ./resume.pdf por la ruta de tu DOCX para usar la rama de conversión. Se aplican la misma CLI y el
mismo esquema JSON. La disposición del documento y la inferencia del modelo pueden afectar al
resultado, así que inspecciona cada archivo de salida en lugar de considerar que una muestra que
supera la validación garantiza la precisión.
Próximos pasos
Normaliza los números de teléfono y las fechas solo después de revisar sus valores originales. Trata los campos vacíos como información ausente y deriva las extracciones inciertas a una revisión manual. Al adaptar el script de ejemplo para un ATS, conserva ese paso de revisión entre la extracción y la importación.
