Let's Build: analisador de currículos com IA e Transloadit
Transforme um currículo em PDF ou DOCX em um arquivo JSON local com dados de contato, habilidades, experiência profissional e formação. Este exemplo em TypeScript usa a Transloadit para converter documentos quando necessário e extrair campos com um modelo de IA. Você pode executá-lo em um diretório novo sem o repositório deste site e comparar o resultado salvo com o documento original.
O que vamos construir
- Aceitar um único currículo em PDF ou DOCX.
- Converter DOCX em PDF com 🤖 /document/convert.
- Extrair campos com 🤖 /ai/chat e salvá-los como JSON.
O exemplo seleciona anthropic/claude-sonnet-4-6, que aceita entrada em PDF por meio de /ai/chat.
Ele não aceita arquivos de imagem nem classifica candidatos. A validação do esquema verifica a
estrutura da resposta; ela não comprova que as informações extraídas estão corretas.
Primeiro, o esquema (zod)
O script de exemplo exporta o esquema usado tanto na solicitação ao
modelo quanto na validação local. Depois de baixar o aplicativo abaixo, salve este conteúdo como
inspect-schema.ts na raiz do projeto e execute 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 os campos são obrigatórios na resposta. Textos desconhecidos usam uma string vazia, e listas
sem entradas usam arrays vazios. Além dos campos de contato e experiência profissional, o esquema
inclui summary,
certifications e links; ele não retorna pontuações de confiança.
Uma extração totalmente vazia é rejeitada, mas um valor plausível e incorreto ainda pode passar
pela validação.
Visão geral do pipeline
PDF resumes ──▶ /ai/chat ──▶ local JSON
DOCX resumes ──▶ /document/convert (pdf) ──▶ /ai/chat ──▶ local JSON
Trecho da Assembly
Para inspecionar os Steps reais sem enviar uma
Assembly, salve este conteúdo como inspect-steps.ts na mesma
raiz do projeto e execute 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))
A receita filtra os PDFs enviados por upload para pdf_verified e converte os outros documentos aceitos por meio de
pdf_converted. O Step extract_resume consome essas saídas e solicita JSON com um esquema
serializado. A construção dessas instruções não faz nenhuma solicitação à API. A CLI cuida do upload,
da espera, do download do resultado e da validação antes de salvá-lo.
Experimente o aplicativo de exemplo
Use um diretório novo e vazio e siga as
instruções completas de configuração. Elas instalam a combinação testada
de @transloadit/node 4.14.0, Zod 3.25.76 e zod-to-json-schema 3.25.2 com Yarn 4.12.0.
Este tutorial foi testado com o Node.js 26.12.1;
use uma versão do Node.js que ainda receba manutenção e atenda ao pré-requisito do README. Corepack e
cURL também precisam estar disponíveis. Essas são as versões para reproduzir o exemplo, sem qualquer
afirmação de que sejam as mais recentes.
Este executor existente usa esquemas do Zod 3 com o conversor para JSON Schema descontinuado. Mantenha as versões fixadas na lista para reproduzi-lo. Adaptar o aplicativo ao Zod 4 também exige atualizar a conversão do esquema; alterar apenas a versão principal instalada não é suficiente.
Baixe tanto resume-parser/run.ts quanto shared/runtime.ts usando os comandos do README.
A disposição relativa deles importa porque o analisador importa o código de execução compartilhado.
Execute a configuração fora de um projeto existente para que a configuração do gerenciador de
pacotes desse projeto não afete seu primeiro teste. O comando final
--help do README inicia o aplicativo sem fazer nenhum upload.
A configuração cria package.json sem substituir um arquivo existente. Se a instalação ou um download parar
antes de terminar, mantenha esse diretório para inspeção e recomece em outro diretório vazio.
Exporte a Auth Key e o Auth Secret do seu Workspace da Transloadit como TRANSLOADIT_AUTH_KEY e
TRANSLOADIT_AUTH_SECRET no shell em que você executará o aplicativo. Mantenha esses valores fora do
controle de versão. O script lê o ambiente do processo e não carrega um arquivo de ambiente.
Para o comando abaixo, deixe TRANSLOADIT_AI_CREDENTIALS sem definir: --test-credentials seleciona explicitamente
as credenciais de IA fornecidas pela Transloadit. As credenciais de teste de IA e os outros Steps
de processamento são cobrados. Como alternativa, use o nome de uma credencial de IA da Anthropic
existente em TRANSLOADIT_AI_CREDENTIALS e omita a opção. Selecione exatamente um modo; o programa não cria
nem altera credenciais. Consulte a documentação de credenciais de IA antes de
escolher um modo.
Coloque um currículo que você tenha autorização para enviar por upload em resume.pdf e execute:
node resume-parser/run.ts --input ./resume.pdf --output ./result.json --test-credentials
Use um novo destino para cada execução. O aplicativo recusa uma saída já existente antes de enviar uma Assembly e mantém a entrada intacta. Este tutorial limita a entrada e a saída baixada a 20 MiB; esses são limites do exemplo, não limites do produto Transloadit. Ele permite cinco minutos para o processamento e 30 segundos para o download do resultado.
Em caso de sucesso, o terminal imprime um Assembly ID e uma mensagem Saved seguida do caminho local de saída. Inspecione esse arquivo:
cat ./result.json
Compare nomes, endereços de e-mail, habilidades, datas e experiências profissionais com o original antes de importá-los para um ATS. Uma Assembly bem-sucedida ou um JSON legível não são evidência suficiente de uma extração precisa. Mantenha o arquivo salvo privado quando ele contiver informações pessoais.
Se a execução falhar depois de imprimir um Assembly ID, inspecione essa Assembly no Console antes de tentar novamente. Um tempo limite local excedido ou uma interrupção local não comprovam que o processamento remoto parou, e o trabalho ainda pode ser cobrado. O script não repete automaticamente uma Assembly. Quando trata uma falha na validação do resultado, ele remove a saída incompleta e preserva qualquer destino preexistente. Uma interrupção pode deixar um arquivo local parcial; inspecione-o antes de escolher um novo destino.
Exemplos de entrada
Comece com um currículo sintético que você criar em PDF ou DOCX. Por exemplo, use “Jamie Example”,
jamie@example.test, as habilidades “TypeScript” e “PostgreSQL” e um cargo na “Example Systems”.
Dê a esse cargo uma realização concreta, como “Desenvolvi um serviço interno de busca de documentos”.
Esses fatos conhecidos permitem conferir o resultado salvo sem enviar informações de uma pessoa real.
Substitua --input ./resume.pdf pelo caminho do seu DOCX para usar o ramo de conversão. A mesma CLI e o mesmo
esquema JSON se aplicam. O layout do documento e a inferência do modelo podem afetar o resultado;
por isso, inspecione cada saída em vez de tratar uma amostra aprovada como garantia de precisão.
Próximos passos
Normalize números de telefone e datas somente depois de revisar seus valores originais. Trate campos vazios como informações ausentes e encaminhe extrações incertas para revisão manual. Ao adaptar o script de exemplo para um ATS, mantenha essa etapa de revisão entre a extração e a importação.

