为什么要自带模型
Resume Matcher 不附带任何 AI 模型。你需要自己接入一个:可以是你已经持有密钥的云端服务商,可以是跑在自己硬件上的免费模型,也可以是你已经在付费的 ChatGPT 或 Claude 订阅。服务商和模型由你选,费用和简历文本的去向也随之由你决定。
支持的服务商
| 服务商 | 类型 | 设置页面的默认模型 |
|---|---|---|
| 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) | 本地 | 占位值 custom-model,地址 http://localhost:8080/v1;把两者都换成你自己服务的值 |
| ChatGPT 订阅(使用 ChatGPT 登录) | 你的 ChatGPT 订阅 | 登录后从你账号可用的模型中选择 |
| Claude 订阅(通过 Claude Code) | 你的 Claude 订阅 | Claude Code 自带的默认模型 |
默认模型只是起点。模型字段是自由文本,你可以填写服务商提供的任何模型名称。两种订阅方式不需要 API 密钥,但有一些注意事项,参见方式 C。
方式 A:设置页面
- 打开
http://localhost:3000/settings。 - 选择服务商。
- 粘贴 API 密钥。如果是 Ollama 或兼容 OpenAI 接口的服务,改为填写服务地址。如果是 ChatGPT 或 Claude 订阅,参见方式 C。
- 如果想换模型,修改模型名称。
- 如果要通过代理或聚合服务的端点访问,填写基础 URL。留空则使用服务商的默认地址。
- 点击保存,再点击测试连接。

「测试连接」会向服务商发送一个词「Hi」,并报告是否收到回复。页面顶部的系统状态面板会显示 LLM 是否正常、数据库是否已连接。在这里保存的设置优先于环境变量。
每家服务商各自保存自己的密钥,所以切换服务商不会清除另一家的密钥。
推理强度。 这个设置只对具备推理能力的模型生效(gpt-5 系列、Claude 3.7+、DeepSeek R1、OpenAI o1/o3)。Auto 不发送任何值,兼容性最好。
方式 B:环境变量
后端由四个变量配置:
| 变量 | 作用 |
|---|---|
LLM_PROVIDER |
openai、anthropic、gemini、deepseek、openrouter、groq、azure_foundry、ollama、openai_compatible、chatgpt、claude_cli 之一 |
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
方式 C:你的 ChatGPT 或 Claude 订阅
如果你已经在为 ChatGPT 或 Claude 付费,Resume Matcher 可以用这份订阅代替 API 密钥。两种方式都是社区贡献的功能,也都不保证一直可用:如需稳定可靠的访问,请使用 OpenAI 或 Anthropic 的 API 密钥。
ChatGPT 订阅

这种方式使用 OpenAI 面向开源应用的官方 Sign in with ChatGPT(使用 ChatGPT 登录),适用于 ChatGPT Plus 和 Pro。
- 启动 Resume Matcher,然后在同一台电脑上用浏览器打开设置页面,地址是
http://localhost:3000。 - 选择 ChatGPT 订阅,点击通过 ChatGPT 继续。
- 在 OpenAI 登录,并允许 Resume Matcher 使用你的订阅。
- 回到设置页面,从你账号可用的模型里选一个,然后点击保存。
在依赖它之前,请注意:
- 它是预览版。 面向开源应用的 Sign in with ChatGPT 是 OpenAI 的预览功能,可能会有变化。
- 请求直接发给 OpenAI。 请求从你的电脑直接发送到 OpenAI 的 API,登录令牌加密保存在你的电脑上。
- 用量计入你的 ChatGPT 订阅限额。 在 Plus 上,五小时限额与你其他使用该订阅的应用共享。Pro 没有五小时限额。
- 在同一台电脑上登录。 OpenAI 只会把浏览器送回
127.0.0.1,所以登录必须在运行 Resume Matcher 的那台电脑上的浏览器里完成。默认的 Docker 部署在http://localhost:3000打开时可以正常使用,但从另一台电脑或通过反向代理域名访问则不行。
断开连接会结束会话并删除令牌;管理用量会打开你的 ChatGPT 用量设置。如果用环境变量配置,设置 LLM_PROVIDER=chatgpt,并把 LLM_MODEL 设为你账号里的某个模型;登录仍需在设置页面完成。
Claude 订阅(通过 Claude Code)

这种方式运行你自己的 Claude Code CLI,它要安装在同一台电脑上,并由你自己登录:
claude auth login
然后在设置页面选择 Claude 订阅,点击保存。如果用环境变量配置,设置 LLM_PROVIDER=claude_cli;LLM_MODEL 不会被使用。
在依赖它之前,请注意:
- 它不受官方支持。 Anthropic 并未正式支持第三方应用使用 Claude Pro 或 Max 订阅,所以如果 Anthropic 的政策变更,这种方式可能失效。
- Resume Matcher 永远看不到你的 Claude 凭据。 它只运行你已登录的 CLI,不保存你 Claude 账户的任何信息。
- 你的提示词仍会发给 Anthropic。 Claude Code 通过你的账户发送提示词,并使用它自带的默认模型。
- 用量计入你的 Claude 订阅用量上限,Anthropic 也可能改为从用量额度中扣除。
- 它需要本地安装。 Docker 镜像里没有 Claude Code CLI,所以这种方式在 Docker 里无法使用。
Resume Matcher 靠捐助维持运转。
已有超过 20 万求职者用过它:免费,没有广告,也没有付费墙。如果它帮你省了时间,或帮你拿到了面试,赞助或请我喝杯咖啡能让它一直免费。
本地模型
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)。前端在构建时读取这个值,所以预构建的 Docker 镜像固定为 240 秒。要在镜像里调高它,请设置好 NEXT_PUBLIC_REQUEST_TIMEOUT_MS 后自己构建镜像。
密钥与本地服务。 后端不会把 LLM_API_KEY 发给 Ollama 或兼容 OpenAI 接口的服务,所以 .env 里的付费云端密钥不会泄露给本地服务。
小模型。 项目的设计笔记提醒,较小的模型处理不好定制步骤使用的结构化编辑格式。
完整的 Docker 教程参见 Docker + Ollama。
密钥存在哪里
在设置页面保存的密钥会存进本地 SQLite 数据库,用 Fernet 加密。加密密钥放在数据文件夹的 .secret_key 里(本地安装是 apps/backend/data/,Docker 则是数据卷),创建时权限为 0600,只有你的用户账号能读取。后端写入同一文件夹的 config.json 之前会去掉密钥,所以设置文件里从来不会有密钥。
要删除所有已保存的密钥,在设置页面的危险区域使用清除 API 密钥。此操作无法撤销。
ChatGPT 订阅的登录令牌用同一个密钥加密,保存在数据文件夹的 chatgpt_credentials.enc 里。Claude 订阅不保存任何内容:你的 Claude 凭据始终由 Claude Code 保管。
LOG_LLM=DEBUG 会把密钥明文写进日志。不要在共用的机器上开启它。
会发给服务商什么
应用不会向 Resume Matcher 的作者发送任何内容,也不含遥测代码。你的简历文本(包括姓名和联系方式)和职位描述只会发给你选定的服务商,不会发给其他任何人:用 ChatGPT 订阅时发给 OpenAI,用 Claude 订阅时通过 Claude Code 发给 Anthropic。发送前没有脱敏步骤。使用本地模型时,没有任何数据离开你的电脑。
| 功能 | 发给服务商的内容 |
|---|---|
| 简历上传(解析) | 完整简历文本,包括姓名、邮箱、电话和链接 |
| 职位描述分析、简历标题 | 职位描述 |
| 定制(技能规划、差异编辑) | 职位描述加完整简历 JSON |
| 定制后的关键词处理 | 定制简历和主简历的 JSON,加职位描述的前 2,000 个字符 |
| 求职信、联系邮件 | 完整简历 JSON 加职位描述 |
| 面试准备 | 简历 JSON(最多 30,000 个字符)加职位描述(最多 12,000 个字符) |
| 要点评分 | 要点文本、职位描述和提取的关键词 |
| 内容补充、重新生成、简历向导 | 该简历或条目,加你的回答和指令 |
| 测试连接 | 「Hi」这个词 |
你的其他 API 密钥、数据库文件、追踪看板、设置和 PDF 都留在本地。唯一的另一个网络请求是 AI 库(LiteLLM)在启动时获取一份公开的模型价格表,其中不含你的任何数据,离线时会回退到内置副本。
费用
Resume Matcher 免费且开源。云端服务商会按自己的价格,为应用发出的每个请求向你的账户收费。应用不会统计这笔开销,请到服务商的控制台查看。使用 ChatGPT 或 Claude 订阅时,请求改为计入你的订阅限额。本地模型没有按次费用。
故障排查
测试连接失败
检查 API 密钥,Ollama 和兼容 OpenAI 接口的服务则检查服务地址。保存后再测一次。
「未找到 Claude Code CLI」
在运行后端的那台电脑上安装 Claude Code,并运行 claude auth login。Docker 镜像里没有 Claude Code。
「尚未使用 ChatGPT 登录」或「此账户无法使用 ChatGPT 订阅用量」
在设置页面选择 ChatGPT 订阅,并在同一台电脑上的浏览器里点击通过 ChatGPT 继续。这个订阅选项需要 ChatGPT Plus 或 Pro;否则请使用 OpenAI API 密钥。
Docker 连不上 Ollama
Ollama 地址用 http://host.docker.internal:11434,不要用 localhost。在 Linux 上,用宿主机的 IP 地址,或者用 --network=host 运行容器。
本地模型超时
调高后端的 REQUEST_TIMEOUT_SECONDS(最高 1800)和前端的 NEXT_PUBLIC_REQUEST_TIMEOUT_MS。如果用预构建的 Docker 镜像,前端的值在构建时就已固定;参见上文的慢速模型。
修改 .env 不生效
在界面里保存的设置优先于环境变量。打开设置页面,在那里修改。
下一步
- Resume Matcher 是什么?:总体介绍
- 功能:接入模型后 AI 能生成的所有内容