安装配置

自带 AI 密钥

用自己的 API 密钥接入 Claude、ChatGPT、Gemini、DeepSeek、Groq 或本地 Ollama,可在设置页面或环境变量里配置。

为什么要自带模型

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:设置页面

  1. 打开 http://localhost:3000/settings。
  2. 选择服务商。
  3. 粘贴 API 密钥。如果是 Ollama 或兼容 OpenAI 接口的服务,改为填写服务地址。
  4. 如果想换模型,修改模型名称。
  5. 点击保存,再点击测试连接。

「测试连接」会向服务商发送一个词「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 不生效

在界面里保存的设置优先于环境变量。打开设置页面,在那里修改。

下一步