Por qué usar tu propio modelo
Resume Matcher no incluye ningún modelo de IA. Lo conectas tú: un proveedor en la nube del que ya tienes una clave, o un modelo gratuito que corre en tu propio hardware. Tú eliges el proveedor y el modelo, y con ellos el costo y adónde va el texto de tu currículum.
Proveedores compatibles
| Proveedor | Tipo | Modelo por defecto en Configuración |
|---|---|---|
| OpenAI | Nube | gpt-5-nano-2025-08-07 |
| Anthropic (Claude) | Nube | claude-haiku-4-5-20251001 |
| Google Gemini | Nube | gemini-3-flash-preview |
| DeepSeek | Nube | deepseek-chat |
| OpenRouter | Nube | deepseek/deepseek-chat |
| Groq | Nube | llama-3.3-70b-versatile |
| Azure AI Foundry | Nube | mistral-large-latest |
| Ollama | Local | gemma3:4b |
| Servidor compatible con OpenAI (llama.cpp, vLLM, LM Studio) | Local | Ninguno, escribe el tuyo |
El valor por defecto es un punto de partida. El campo del modelo es texto libre, así que puedes escribir cualquier nombre de modelo que ofrezca tu proveedor.
Opción A: la página de Configuración
- Abre
http://localhost:3000/settings. - Elige tu proveedor.
- Pega tu clave de API. Para Ollama o un servidor compatible con OpenAI, escribe en su lugar la URL del servidor.
- Cambia el nombre del modelo si quieres otro.
- Haz clic en Guardar y después en Probar conexión.
Probar conexión envía la palabra “Hi” a tu proveedor e informa de si respondió. La configuración que guardas aquí tiene prioridad sobre las variables de entorno.
Opción B: variables de entorno
Cuatro variables configuran el backend:
| Variable | Qué define |
|---|---|
LLM_PROVIDER |
Uno de openai, anthropic, gemini, deepseek, openrouter, groq, azure_foundry, ollama, openai_compatible |
LLM_MODEL |
El nombre del modelo |
LLM_API_KEY |
La clave de tu proveedor |
LLM_API_BASE |
La URL del servidor, para Ollama y servidores compatibles con OpenAI |
En una instalación local, ponlas en apps/backend/.env. En Docker, pásalas como entorno del contenedor. La imagen de Docker también lee secretos de Docker: añade _FILE a cualquiera de las cuatro variables para cargar su valor desde un archivo, por ejemplo LLM_API_KEY_FILE=/run/secrets/llm_api_key.
Anthropic, instalación local (apps/backend/.env):
LLM_PROVIDER=anthropic
LLM_MODEL=claude-haiku-4-5-20251001
LLM_API_KEY=your-api-key
OpenAI, instalación local (apps/backend/.env):
LLM_PROVIDER=openai
LLM_MODEL=gpt-5-nano-2025-08-07
LLM_API_KEY=your-api-key
Ollama en el host, Resume Matcher en Docker:
docker run --name resume-matcher -p 3000:3000 \
-v resume-data:/app/backend/data \
-e LLM_PROVIDER=ollama \
-e LLM_MODEL=gemma3:4b \
-e LLM_API_BASE=http://host.docker.internal:11434 \
ghcr.io/srbhr/resume-matcher:latest
Modelos locales
Ollama. Instálalo desde ollama.com, descarga un modelo y después elige Ollama en Configuración:
ollama pull gemma3:4b
La URL por defecto es http://localhost:11434. Desde dentro de Docker, usa http://host.docker.internal:11434. En Linux, usa la dirección IP del host o arranca el contenedor con --network=host.
Servidores compatibles con OpenAI. llama.cpp, vLLM, LM Studio y cualquier otro servidor que hable la API Chat Completions de OpenAI funcionan a través del proveedor openai_compatible. Pon en LLM_API_BASE la URL del servidor y en LLM_MODEL el modelo que el servidor está sirviendo.
Modelos lentos. Cada petición de IA corre bajo un único plazo, REQUEST_TIMEOUT_SECONDS (por defecto 240, rango de 30 a 1800). Un modelo grande en hardware modesto puede excederlo. Sube REQUEST_TIMEOUT_SECONDS en el entorno del backend y NEXT_PUBLIC_REQUEST_TIMEOUT_MS en el entorno del frontend (consulta apps/frontend/.env.sample).
Claves y servidores locales. El backend nunca envía LLM_API_KEY a Ollama ni a un servidor compatible con OpenAI, así que una clave de pago de la nube en tu .env no puede filtrarse a uno local.
Modelos pequeños. Las notas de diseño del proyecto advierten de que los modelos más pequeños tienen problemas con el formato estructurado de edición que usa el paso de adaptación.
Para la guía completa con Docker, consulta Docker + Ollama.
Dónde se guarda tu clave
Las claves que guardas en Configuración van a la base de datos SQLite local, cifradas con Fernet. La clave de cifrado vive en .secret_key dentro de la carpeta de datos (apps/backend/data/ en una instalación local, el volumen de Docker en el otro caso), creada con permisos 0600 para que solo tu cuenta de usuario pueda leerla. El backend elimina las claves antes de escribir config.json en esa misma carpeta, así que el archivo de configuración nunca contiene ninguna.
LOG_LLM=DEBUG escribe las claves en el log en texto plano. No lo actives en un equipo compartido.
Qué se envía a tu proveedor
La aplicación no envía nada a los autores de Resume Matcher y no contiene telemetría. El texto de tu currículum, incluidos tu nombre y datos de contacto, y la descripción del puesto van al proveedor que elegiste y a nadie más. No hay ningún paso de anonimización antes del envío. Con un modelo local, nada sale de tu máquina.
| Función | Se envía al proveedor |
|---|---|
| Subida del currículum (análisis) | El texto completo 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 JSON completo del currículum |
| 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 |
| 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 caracteres) |
| Puntuación de viñetas | El texto de la viñeta, la descripción del puesto y las palabras clave extraídas |
| Enriquecimiento, regeneración, Asistente de currículum | El currículum o el elemento más tus respuestas e instrucciones |
| Probar conexión | La palabra “Hi” |
Tus otras claves de API, el archivo de base de datos, el tablero de seguimiento, la configuración y los PDF se quedan en local. La única otra llamada de red es la librería de IA (LiteLLM) descargando una lista pública de precios de modelos al arrancar; no lleva ninguno de tus datos y, sin conexión, usa una copia incluida.
Costo
Resume Matcher es gratuito y de código abierto. Un proveedor en la nube factura a tu propia cuenta, a sus precios, cada petición que hace la aplicación. La aplicación no registra ese gasto, así que revisa el panel de tu proveedor. Un modelo local no cuesta nada por petición.
Solución de problemas
Probar conexión falla
Revisa la clave de API, o la URL del servidor en el caso de Ollama y los servidores compatibles con OpenAI. Guarda y vuelve a probar.
Docker no llega a Ollama
Usa http://host.docker.internal:11434 como URL de Ollama, no localhost. En Linux, usa la dirección IP del host o ejecuta el contenedor con --network=host.
Tiempos de espera agotados con un modelo local
Sube REQUEST_TIMEOUT_SECONDS (hasta 1800) en el backend y NEXT_PUBLIC_REQUEST_TIMEOUT_MS en el frontend.
Un cambio en .env no tiene efecto
La configuración guardada en la interfaz tiene prioridad sobre las variables de entorno. Abre Configuración y cambia el valor ahí.
Siguientes pasos
- ¿Qué es Resume Matcher? para una visión general
- Funcionalidades para todo lo que la IA puede generar una vez conectada