Adapta tu currículum con IA en privado: ejecútala en local con Ollama
Adaptar el currículum con IA local: qué recibe un proveedor en la nube, cómo elegir un modelo en Ollama y qué cuesta en velocidad, calidad y timeouts.
Cada vez que le pides a un modelo de IA que adapte tu currículum, lee el documento entero: tu nombre, número de teléfono, correo, cada empleador y fecha, y cualquier otra cosa que guardes en el archivo. Con un proveedor en la nube, ese texto sale de tu máquina. Adaptar el currículum con IA en privado significa ejecutar el modelo en tu propio hardware, de modo que el currículum (CV, u hoja de vida como se dice en Colombia y otros países) y la descripción del puesto nunca salgan de él. Este artículo cubre por qué podrías querer eso, qué recibe un proveedor en la nube cuando no lo haces, cómo elegir un modelo local con Ollama y los compromisos en velocidad, calidad y timeouts.
Los pasos de instalación están en la documentación. Consulta configuración de Ollama para el flujo con Docker y usa tu propia clave de IA para la página de Configuración y las variables de entorno. Este artículo es el porqué y el qué.
Por qué mantener tu currículum en local
Un currículum es uno de los documentos más personales que tienes. Lleva tu nombre completo, un número de teléfono, un correo, tu ciudad y un relato fechado de dónde trabajaste. Si mantienes un currículum maestro, puede contener además cosas que nunca pondrías en una versión adaptada: notas sobre por qué dejaste un empleo, una cifra de salario de una oferta, el nombre de un jefe. Pega eso en una ventana de chat y se lo has enviado a una empresa cuyas condiciones de tratamiento de datos quizá no hayas leído.
Tres grupos tienen una razón concreta para preocuparse.
Personas con una obligación de confidencialidad. Si el nombre de tu empleador actual, nombres en clave de proyectos o la lista de clientes aparecen en tus viñetas, tu currículum contiene información que un contrato puede obligarte a proteger.
Personas en una búsqueda discreta. No quieres un registro de “adaptando mi currículum para un puesto en la competencia” en ningún sitio que no sea tu propio disco.
Personas que leen las políticas de los proveedores. Las condiciones varían por proveedor y por plan. La página de productos comerciales de Anthropic, por ejemplo, indica que las entradas y salidas de su API y de sus productos para empresas no se usan para entrenamiento por defecto, con excepciones para los comentarios que envíes (centro de privacidad de Anthropic, con fecha de agosto de 2026; sus planes para consumidores se tratan en una página aparte). Otros proveedores publican sus propias condiciones. Si prefieres no depender de haberlas leído bien, un modelo local elimina la pregunta.
Qué recibe un proveedor en la nube
Resume Matcher es un harness: envía prompts al modelo que conectes y aplica comprobaciones en código al resultado. No hace ninguna anonimización antes de enviar. La tabla de abajo, sacada del código del proyecto, lista qué envía cada función al proveedor que elegiste.
| Función | Se envía al proveedor |
|---|---|
| Subida del currículum (análisis) | El texto completo extraído del currículum, incluidos nombre, correo, teléfono y enlaces |
| Análisis de la descripción del puesto, título del currículum | La descripción del puesto |
| Adaptación (plan de habilidades, cambios del diff) | La descripción del puesto más el currículum completo como JSON estructurado, datos personales incluidos |
| Pasada de palabras clave tras la adaptación | El JSON del currículum adaptado y del maestro más los primeros 2.000 caracteres de la descripción del puesto |
| Puntuación de viñetas | El texto de la viñeta, la descripción del puesto y las palabras clave extraídas |
| Carta de presentación, mensaje de contacto | El JSON completo del currículum más la descripción del puesto |
| Preparación para la entrevista | El JSON del currículum (hasta 30.000 caracteres) más la descripción del puesto (hasta 12.000) |
| Enriquecimiento, regeneración, Asistente de currículum | El currículum o un elemento, más tus respuestas e instrucciones |
| Probar conexión | La palabra “Hi” |
Nada va a los autores de Resume Matcher; la aplicación no contiene código de analítica. Tus claves de API de otros proveedores, la base de datos, el tablero de seguimiento, la configuración y los PDF generados se quedan en disco. La única otra petición saliente es la librería de IA (LiteLLM) descargando una lista pública de precios de modelos al arrancar, que no lleva ninguno de tus datos y usa una copia incluida cuando estás sin conexión.
Pegar a mano en ChatGPT o Claude envía las mismas cosas, con menos estructura. Cualquier flujo en el que un modelo en la nube lee tu currículum envía tu currículum a esa nube.
Cómo es adaptar el currículum con IA en privado
Apunta el mismo harness a un modelo que corre en tu máquina y cada fila de esa tabla se queda en local. El modelo lee el currículum, propone ediciones y el código las comprueba, y ninguna petición de red lleva el texto a ninguna parte.
En Resume Matcher esto significa uno de dos proveedores en Configuración:
- Ollama, una herramienta gratuita que descarga modelos abiertos y los sirve en
http://localhost:11434. - Cualquier servidor compatible con OpenAI: llama.cpp, vLLM, LM Studio o cualquier otro que hable la API de Chat Completions de OpenAI.
Cuatro detalles matizan la palabra “privado”.
Instalar necesita internet; usar no. Descargas la aplicación, sus dependencias, el navegador que usa para exportar PDF y los pesos del modelo una vez. Después, el bucle de adaptación funciona sin conexión. La descarga de la lista de precios de LiteLLM al arrancar usa una copia incluida cuando estás sin conexión.
Tus datos están en una sola carpeta. Currículums, descripciones de puesto, versiones adaptadas y el tablero de seguimiento viven en un archivo SQLite dentro del directorio de datos de la aplicación, o en un volumen de Docker. La configuración está en un pequeño archivo de configuración al lado. Las claves de API, si has guardado alguna, están cifradas con un archivo de clave que solo tu cuenta de usuario puede leer. El contenido del currículum en sí se almacena como datos sin cifrar en ese archivo SQLite, así que la carpeta es tan privada como el disco en el que está; un portátil con cifrado de disco completo lo cubre.
Sin analítica en la aplicación. El código no contiene ningún SDK de seguimiento. La imagen de Docker también desactiva la telemetría propia del framework Next.js; si ejecutas el frontend desde el código fuente con npm run dev, ese ajuste a nivel de framework queda en tus manos.
Un servidor local nunca recibe tu clave de la nube. Si guardas la clave de un proveedor de pago en tu entorno y cambias a Ollama, el backend no le pasa esa clave al servidor local, así que cambiar de proveedor no puede filtrarla.
Elegir un modelo local
Ollama es el camino de menor resistencia. Descarga modelos por nombre y los sirve en un puerto local. La página de Configuración de Resume Matcher sugiere gemma3:4b como valor por defecto para Ollama, y la guía de instalación del proyecto lista llama3.2 y mistral como otras opciones. Cualquier modelo que Ollama sirva se puede escribir en el campo de modelo.
Empieza con el predeterminado. gemma3:4b es el punto de partida que sugiere el proyecto, y una descarga de 3,4 GB a octubre de 2026, según la página del modelo en Ollama. Es un modelo pequeño, así que lee el párrafo sobre ediciones estructuradas más abajo para saber qué esperar de él.
Sube de tamaño si tu hardware lo permite. La misma página lista gemma3:12b con 8,2 GB y gemma3:27b con 17 GB. Esos son tamaños de descarga, y la memoria que un modelo necesita en ejecución es otra cifra que depende de la cuantización y de la longitud de contexto. La documentación de Resume Matcher no indica ningún requisito de RAM, y no voy a inventarme uno. Las preguntas frecuentes de Ollama explican cómo comprobar si un modelo se cargó en tu GPU, en la memoria del sistema o en una mezcla de ambas, que es la forma más rápida de saber si un tamaño dado cabe en tu máquina.
Cuenta con que los modelos pequeños tengan problemas con las ediciones estructuradas. Este es el problema conocido. Resume Matcher no le pide al modelo un currículum nuevo entero. Le pide una lista de ediciones puntuales en un formato estricto, cada una citando el texto original para que el código pueda verificarlo antes de aplicarla. Las notas de diseño del proyecto registran que los modelos más pequeños tienen dificultades con este formato: devuelven salida mal formada, citan texto que no coincide o se saltan la estructura. El código reintenta un número acotado de veces; si los reintentos fallan, obtienes un error y puedes regenerar o pasar a un modelo más grande. Un modelo flojo te cuesta tiempo, y las salvaguardas se mantienen sea cual sea el modelo: nombres, empleadores, cargos, fechas y títulos bloqueados, y cifras nuevas revertidas.
Dos cosas que el harness hace para ayudar a los modelos locales:
- El modo JSON está siempre activo para Ollama, con un respaldo solo por prompt si el servidor lo rechaza, de modo que el modelo se ve empujado hacia una estructura válida.
- Las trazas de razonamiento se eliminan. Algunos modelos de razonamiento emiten un bloque
<think>antes de su respuesta. El código elimina esos bloques antes de analizar la salida, así que un modelo que razona no rompe el formato de edición.
Si el modelo predeterminado te da vistas previas mal formadas con tu currículum, prueba un modelo de tamaño medio antes de culpar al prompt.
Los compromisos: velocidad, calidad, timeouts
Velocidad. Un modelo en la nube responde a una petición de adaptación en segundos. Un modelo local en la CPU de un portátil puede tardar minutos con el mismo prompt, y el pipeline de adaptación hace varias llamadas al modelo por ejecución: extracción de palabras clave de la oferta, puntuación de relevancia de las viñetas, un plan de habilidades, la lista de ediciones y una pasada de palabras clave después. Cada llamada espera a la anterior. Un modelo cinco veces más lento por llamada hace toda la ejecución cinco veces más lenta.
Calidad. Los modelos más grandes parafrasean con más fluidez, se mantienen más cerca del vocabulario de la oferta y producen menos ediciones rotas. Los más pequeños producen una redacción más rígida y más cambios rechazados. Las comprobaciones en código hacen que el suelo sea el mismo para ambos: un modelo pequeño no puede inventar una métrica ni cambiar tus fechas más de lo que puede uno grande, porque esas ediciones se bloquean antes de llegar a ti. El techo sí difiere.
Timeouts. Cada petición de IA en Resume Matcher corre bajo un único plazo, REQUEST_TIMEOUT_SECONDS, que por defecto es de 240 segundos y acepta valores de 30 a 1.800. Ese plazo cubre toda la ejecución de adaptación, con todas sus llamadas al modelo incluidas. Los proveedores locales reciben un factor de timeout doble, pero un modelo grande en hardware modesto puede superarlo de todos modos. Si ves timeouts, sube REQUEST_TIMEOUT_SECONDS en el entorno del backend y NEXT_PUBLIC_REQUEST_TIMEOUT_MS en el entorno del frontend para que coincidan; la página usa tu propia clave de IA lista ambos.
Costo. Cero por petición con un modelo local, frente a un cargo por llamada de un proveedor en la nube. A lo largo de una búsqueda de empleo de cuarenta candidaturas, cada una con currículum adaptado, carta de presentación y preparación para la entrevista, la diferencia es dinero real para algunos y una cantidad insignificante para otros. El argumento de la privacidad se sostiene por sí solo en cualquier caso.
Cómo encaja todo
Un párrafo, para orientarte; la documentación tiene los comandos.
Ollama corre en tu máquina y escucha en el puerto 11434. Resume Matcher corre a su lado, desde el código fuente o en Docker, y sirve la aplicación en el puerto 3000. En Configuración eliges Ollama como proveedor, escribes el nombre del modelo que descargaste y haces clic en Probar conexión, que envía la palabra “Hi” e informa de si el modelo respondió. Desde Docker, la aplicación llega a Ollama a través de http://host.docker.internal:11434 en lugar de localhost, ya que el contenedor tiene su propio espacio de nombres de red. A partir de ahí, cada función de la aplicación (adaptación, cartas de presentación, preparación para la entrevista, enriquecimiento) usa el modelo local, y el navegador imprime tus PDF en la misma máquina.
La página de configuración de Ollama tiene el recorrido con Docker, y usa tu propia clave de IA cubre Configuración, variables de entorno y resolución de problemas tanto para el camino desde el código fuente como para el de Docker.
Cuándo un modelo en la nube es la mejor opción
Lo local es un compromiso, y para algunas personas gana el lado de la nube. Si tu portátil es modesto, el modelo que puedes ejecutar es pequeño, y los modelos pequeños producen ediciones rechazadas más a menudo que útiles. Si estás postulando esta semana y cada ejecución tarda cuatro minutos, la velocidad importa más que el flujo de datos. Si tu currículum no contiene nada que te moleste que un proveedor lea, y has leído las condiciones del proveedor, el argumento de la privacidad es académico para ti.
Un camino intermedio también funciona. Ejecuta el modelo local para el grueso de tus adaptaciones y cambia el proveedor en Configuración para la única candidatura en la que quieres la mejor prosa. La aplicación guarda una clave por proveedor, así que cambiar es un desplegable. El código de salvaguardas se mantiene constante: conectes el modelo que conectes, tu nombre, empleadores, cargos, fechas y títulos siguen bloqueados, y cualquier cifra que el modelo invente se revierte antes de que la veas.
Resume Matcher es gratuito, de código abierto bajo licencia Apache 2.0 y lo usan más de 200.000 personas que buscan empleo. No incluye ningún modelo ni aloja ningún sitio web, y ese es el punto de este artículo: el modelo es tuyo, y los datos también.
Si esto te sirvió
Si ejecutar el modelo en tu propia máquina es la versión de esto que buscabas, una estrella en Resume Matcher en GitHub ayuda a que otras personas que buscan empleo lo encuentren. Puedes seguirme, Saurabh Rai, en GitHub, X y LinkedIn.
[Este artículo se redactó, tradujo y formateó con ayuda de IA. Los datos del producto se verificaron contra el código fuente de Resume Matcher, y las fuentes externas están enlazadas donde se usan.]
¿Te sirvió este artículo? Dale una estrella a Resume Matcher en GitHub y sigue el proyecto