Por que trazer seu próprio modelo
O Resume Matcher não vem com nenhum modelo de IA. Você conecta um por conta própria: um provedor na nuvem do qual já tem uma chave, ou um modelo gratuito rodando no seu próprio hardware. Você escolhe o provedor e o modelo, e com eles o custo e o destino do texto do seu currículo.
Provedores suportados
| Provedor | Tipo | Modelo padrão em Configurações |
|---|---|---|
| OpenAI | Nuvem | gpt-5-nano-2025-08-07 |
| Anthropic (Claude) | Nuvem | claude-haiku-4-5-20251001 |
| Google Gemini | Nuvem | gemini-3-flash-preview |
| DeepSeek | Nuvem | deepseek-chat |
| OpenRouter | Nuvem | deepseek/deepseek-chat |
| Groq | Nuvem | llama-3.3-70b-versatile |
| Azure AI Foundry | Nuvem | mistral-large-latest |
| Ollama | Local | gemma3:4b |
| Servidor compatível com a API da OpenAI (llama.cpp, vLLM, LM Studio) | Local | Nenhum, digite o seu |
O padrão é um ponto de partida. O campo de modelo é texto livre, então você pode digitar qualquer nome de modelo que o seu provedor ofereça.
Opção A: a página Configurações
- Abra
http://localhost:3000/settings. - Escolha seu provedor.
- Cole sua chave de API. Para Ollama ou um servidor compatível com a API da OpenAI, informe a URL do servidor no lugar da chave.
- Mude o nome do modelo se quiser outro.
- Clique em Salvar e depois em Testar Conexão.
Testar Conexão envia a única palavra “Hi” ao seu provedor e informa se ele respondeu. As configurações que você salva aqui têm precedência sobre as variáveis de ambiente.
Opção B: variáveis de ambiente
Quatro variáveis configuram o backend:
| Variável | O que define |
|---|---|
LLM_PROVIDER |
Um entre openai, anthropic, gemini, deepseek, openrouter, groq, azure_foundry, ollama, openai_compatible |
LLM_MODEL |
O nome do modelo |
LLM_API_KEY |
A chave do seu provedor |
LLM_API_BASE |
URL do servidor, para Ollama e servidores compatíveis com a API da OpenAI |
Para uma instalação local, coloque-as em apps/backend/.env. Para Docker, passe-as como variáveis de ambiente do contêiner. A imagem Docker também lê Docker secrets: acrescente _FILE a qualquer uma das quatro variáveis para carregar o valor de um arquivo, por exemplo LLM_API_KEY_FILE=/run/secrets/llm_api_key.
Anthropic, instalação local (apps/backend/.env):
LLM_PROVIDER=anthropic
LLM_MODEL=claude-haiku-4-5-20251001
LLM_API_KEY=your-api-key
OpenAI, instalação local (apps/backend/.env):
LLM_PROVIDER=openai
LLM_MODEL=gpt-5-nano-2025-08-07
LLM_API_KEY=your-api-key
Ollama no host, Resume Matcher no 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 locais
Ollama. Instale a partir de ollama.com, baixe um modelo e depois escolha Ollama em Configurações:
ollama pull gemma3:4b
A URL padrão é http://localhost:11434. De dentro do Docker, use http://host.docker.internal:11434. No Linux, use o endereço IP do host ou inicie o contêiner com --network=host.
Servidores compatíveis com a API da OpenAI. llama.cpp, vLLM, LM Studio e qualquer outro servidor que fale a API Chat Completions da OpenAI funcionam pelo provedor openai_compatible. Defina LLM_API_BASE com a URL do servidor e LLM_MODEL com o modelo que o servidor está servindo.
Modelos lentos. Cada requisição de IA roda com um prazo único, REQUEST_TIMEOUT_SECONDS (padrão 240, intervalo de 30 a 1800). Um modelo grande em hardware modesto pode estourar esse limite. Aumente REQUEST_TIMEOUT_SECONDS no ambiente do backend e NEXT_PUBLIC_REQUEST_TIMEOUT_MS no ambiente do frontend (veja apps/frontend/.env.sample).
Chaves e servidores locais. O backend nunca envia LLM_API_KEY para o Ollama ou para um servidor compatível com a API da OpenAI, então uma chave paga de nuvem no seu .env não vaza para um servidor local.
Modelos pequenos. As notas de design do projeto avisam que modelos menores têm dificuldade com o formato estruturado de edição que a etapa de personalização usa.
Para o passo a passo completo com Docker, veja Docker + Ollama.
Onde sua chave fica guardada
As chaves que você salva em Configurações vão para o banco SQLite local, criptografadas com Fernet. A chave de criptografia fica em .secret_key na pasta de dados (apps/backend/data/ em uma instalação local, o volume do Docker nos demais casos), criada com permissões 0600, de modo que só a sua conta de usuário consegue lê-la. O backend remove as chaves antes de gravar o config.json na mesma pasta, então o arquivo de configurações nunca contém uma.
LOG_LLM=DEBUG grava as chaves no log em texto puro. Não ative em uma máquina compartilhada.
O que é enviado ao seu provedor
O app não envia nada aos autores do Resume Matcher e não contém telemetria. O texto do seu currículo, incluindo nome e dados de contato, e a descrição da vaga vão para o provedor que você escolheu e para mais ninguém. Nenhum dado é mascarado ou removido antes do envio. Com um modelo local, nada sai da sua máquina.
| Recurso | Enviado ao provedor |
|---|---|
| Envio do currículo (parsing) | Texto completo do currículo, incluindo nome, e-mail, telefone e links |
| Análise da descrição da vaga, título do currículo | A descrição da vaga |
| Personalização (plano de habilidades, edições em diff) | Descrição da vaga mais o JSON completo do currículo |
| Passagem de palavras-chave após a personalização | JSON do currículo personalizado e do principal mais os primeiros 2.000 caracteres da descrição da vaga |
| Carta de apresentação, mensagem de contato | JSON completo do currículo mais a descrição da vaga |
| Preparação para entrevista | JSON do currículo (até 30.000 caracteres) mais a descrição da vaga (até 12.000 caracteres) |
| Pontuação de bullets | Texto do bullet, descrição da vaga e palavras-chave extraídas |
| Aprimoramento, regenerar, Assistente de currículo | O currículo ou item mais suas respostas e instruções |
| Testar Conexão | A palavra “Hi” |
Suas outras chaves de API, o arquivo do banco, o quadro de acompanhamento, as configurações e os PDFs ficam locais. A única outra chamada de rede é a biblioteca de IA (LiteLLM) baixando uma lista pública de preços de modelos na inicialização; ela não carrega nenhum dado seu e, offline, usa uma cópia embutida.
Custo
O Resume Matcher é gratuito e open source. Um provedor na nuvem cobra da sua própria conta, nos preços dele, por cada requisição que o app faz. O app não acompanha esse gasto, então confira o painel do seu provedor. Um modelo local não custa nada por requisição.
Solução de problemas
Testar Conexão falha
Confira a chave de API, ou a URL do servidor no caso do Ollama e de servidores compatíveis com a API da OpenAI. Salve e teste de novo.
O Docker não alcança o Ollama
Use http://host.docker.internal:11434 como URL do Ollama, não localhost. No Linux, use o endereço IP do host ou rode o contêiner com --network=host.
Timeouts com um modelo local
Aumente REQUEST_TIMEOUT_SECONDS (até 1800) no backend e NEXT_PUBLIC_REQUEST_TIMEOUT_MS no frontend.
Uma mudança no .env não tem efeito
As configurações salvas na interface têm precedência sobre as variáveis de ambiente. Abra Configurações e mude o valor lá.
Próximos passos
- O que é o Resume Matcher? para a visão geral
- Recursos para tudo que a IA consegue gerar depois de conectada