为什么要自带模型
Resume Matcher 不附带任何 AI 模型。你需要自己接入一个:可以是你已经持有密钥的云端服务商,也可以是跑在自己硬件上的免费模型。服务商和模型由你选,费用和简历文本的去向也随之由你决定。
支持的服务商
| 服务商 | 类型 | 设置页面的默认模型 |
|---|---|---|
| OpenAI | 云端 | gpt-5-nano-2025-08-07 |
| Anthropic(Claude) | 云端 | claude-haiku-4-5-20251001 |
| Google Gemini | 云端 | gemini-3-flash-preview |
| DeepSeek | 云端 | deepseek-chat |
| OpenRouter | 云端 | deepseek/deepseek-chat |
| Groq | 云端 | llama-3.3-70b-versatile |
| Azure AI Foundry | 云端 | mistral-large-latest |
| Ollama | 本地 | gemma3:4b |
| 兼容 OpenAI 接口的服务(llama.cpp、vLLM、LM Studio) | 本地 | 无,自行填写 |
默认模型只是起点。模型字段是自由文本,你可以填写服务商提供的任何模型名称。
方式 A:设置页面
- 打开
http://localhost:3000/settings。 - 选择服务商。
- 粘贴 API 密钥。如果是 Ollama 或兼容 OpenAI 接口的服务,改为填写服务地址。
- 如果想换模型,修改模型名称。
- 点击保存,再点击测试连接。
「测试连接」会向服务商发送一个词「Hi」,并报告是否收到回复。在这里保存的设置优先于环境变量。
方式 B:环境变量
后端由四个变量配置:
| 变量 | 作用 |
|---|---|
LLM_PROVIDER |
openai、anthropic、gemini、deepseek、openrouter、groq、azure_foundry、ollama、openai_compatible 之一 |
LLM_MODEL |
模型名称 |
LLM_API_KEY |
服务商密钥 |
LLM_API_BASE |
服务地址,用于 Ollama 和兼容 OpenAI 接口的服务 |
本地安装时,把它们写进 apps/backend/.env。Docker 部署时,作为容器环境变量传入。Docker 镜像也支持 Docker secrets:给这四个变量中的任意一个加上 _FILE 后缀,就会从文件读取它的值,例如 LLM_API_KEY_FILE=/run/secrets/llm_api_key。
Anthropic,本地安装(apps/backend/.env):
LLM_PROVIDER=anthropic
LLM_MODEL=claude-haiku-4-5-20251001
LLM_API_KEY=your-api-key
OpenAI,本地安装(apps/backend/.env):
LLM_PROVIDER=openai
LLM_MODEL=gpt-5-nano-2025-08-07
LLM_API_KEY=your-api-key
Ollama 在宿主机上,Resume Matcher 在 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
本地模型
Ollama。 从 ollama.com 安装,拉取一个模型,然后在设置页面选择 Ollama:
ollama pull gemma3:4b
默认地址是 http://localhost:11434。从 Docker 内部访问时,用 http://host.docker.internal:11434。在 Linux 上,用宿主机的 IP 地址,或者用 --network=host 启动容器。
兼容 OpenAI 接口的服务。 llama.cpp、vLLM、LM Studio 以及其他任何支持 OpenAI Chat Completions API 的服务,都可以通过 openai_compatible 这个服务商选项接入。把 LLM_API_BASE 设为服务地址,LLM_MODEL 设为该服务正在提供的模型。
慢速模型。 每个 AI 请求都受同一个超时限制:REQUEST_TIMEOUT_SECONDS(默认 240,范围 30 到 1800)。大模型跑在普通硬件上可能会超时。调高后端环境里的 REQUEST_TIMEOUT_SECONDS 和前端环境里的 NEXT_PUBLIC_REQUEST_TIMEOUT_MS(参见 apps/frontend/.env.sample)。
密钥与本地服务。 后端不会把 LLM_API_KEY 发给 Ollama 或兼容 OpenAI 接口的服务,所以 .env 里的付费云端密钥不会泄露给本地服务。
小模型。 项目的设计笔记提醒,较小的模型处理不好定制步骤使用的结构化编辑格式。
完整的 Docker 教程参见 Docker + Ollama。
密钥存在哪里
在设置页面保存的密钥会存进本地 SQLite 数据库,用 Fernet 加密。加密密钥放在数据文件夹的 .secret_key 里(本地安装是 apps/backend/data/,Docker 则是数据卷),创建时权限为 0600,只有你的用户账号能读取。后端写入同一文件夹的 config.json 之前会去掉密钥,所以设置文件里从来不会有密钥。
LOG_LLM=DEBUG 会把密钥明文写进日志。不要在共用的机器上开启它。
会发给服务商什么
应用不会向 Resume Matcher 的作者发送任何内容,也不含遥测代码。你的简历文本(包括姓名和联系方式)和职位描述只会发给你选定的服务商,不会发给其他任何人。发送前没有脱敏步骤。使用本地模型时,没有任何数据离开你的电脑。
| 功能 | 发给服务商的内容 |
|---|---|
| 简历上传(解析) | 完整简历文本,包括姓名、邮箱、电话和链接 |
| 职位描述分析、简历标题 | 职位描述 |
| 定制(技能规划、差异编辑) | 职位描述加完整简历 JSON |
| 定制后的关键词处理 | 定制简历和主简历的 JSON,加职位描述的前 2,000 个字符 |
| 求职信、联系邮件 | 完整简历 JSON 加职位描述 |
| 面试准备 | 简历 JSON(最多 30,000 个字符)加职位描述(最多 12,000 个字符) |
| 要点评分 | 要点文本、职位描述和提取的关键词 |
| 内容补充、重新生成、简历向导 | 该简历或条目,加你的回答和指令 |
| 测试连接 | 「Hi」这个词 |
你的其他 API 密钥、数据库文件、追踪看板、设置和 PDF 都留在本地。唯一的另一个网络请求是 AI 库(LiteLLM)在启动时获取一份公开的模型价格表,其中不含你的任何数据,离线时会回退到内置副本。
费用
Resume Matcher 免费且开源。云端服务商会按自己的价格,为应用发出的每个请求向你的账户收费。应用不会统计这笔开销,请到服务商的控制台查看。本地模型没有按次费用。
故障排查
测试连接失败
检查 API 密钥,Ollama 和兼容 OpenAI 接口的服务则检查服务地址。保存后再测一次。
Docker 连不上 Ollama
Ollama 地址用 http://host.docker.internal:11434,不要用 localhost。在 Linux 上,用宿主机的 IP 地址,或者用 --network=host 运行容器。
本地模型超时
调高后端的 REQUEST_TIMEOUT_SECONDS(最高 1800)和前端的 NEXT_PUBLIC_REQUEST_TIMEOUT_MS。
修改 .env 不生效
在界面里保存的设置优先于环境变量。打开设置页面,在那里修改。
下一步
- Resume Matcher 是什么?:总体介绍
- 功能:接入模型后 AI 能生成的所有内容