私密 AI 简历定制:用 Ollama 在本地运行

用本地模型做私密的 AI 简历定制:云端服务商会收到什么,如何选 Ollama 模型,以及速度、质量和超时的取舍。

S
Ollama 本地大模型 隐私 简历定制 开源
日本浮世绘木刻风格:一只羊驼站在围墙环绕的庭院里,身旁矮桌上放着笔记本电脑和一卷纸

每次你让 AI 模型定制简历,它都会读整份文档:你的姓名、电话、邮箱、每个雇主和日期,以及你放在文件里的其他一切。用云端服务商,这些文本就离开了你的电脑。私密的 AI 简历定制指的是改在自己的硬件上运行模型,让简历(CV)和职位描述永远不出这台机器。这篇文章讲你为什么可能想这么做、不这么做时云端服务商会收到什么、如何用 Ollama 选择本地模型,以及速度、质量和超时上的取舍。

安装步骤在文档里。Docker 流程见 Ollama 设置,设置页面和环境变量见自带 API 密钥。这篇文章讲的是为什么和是什么。

为什么把简历留在本地

简历是你手上较为私人的文档之一。它带着你的全名、电话、邮箱、所在城市,以及一份带日期的工作履历。如果你维护主简历,里面可能还有你绝不会放进定制版的东西:离职原因的备注、某份 offer 的薪资数字、某位经理的名字。把这些粘进聊天窗口,你就把它们发给了一家数据处理条款你可能没读过的公司。

有三类人有具体的理由在意这件事。

负有保密义务的人。 如果你现任雇主的名字、项目代号或客户名单出现在你的要点里,你的简历就包含了合同可能要求你保护的信息。

悄悄找工作的人。 「为竞争对手的岗位定制简历」这件事,你不希望在自己的硬盘之外留下任何记录。

会读服务商政策的人。 条款因服务商和套餐而异。举个例子,Anthropic 的商业产品页面声明,其 API 和企业产品的输入输出默认不用于训练,你主动提交的反馈除外(Anthropic 隐私中心,2026 年 8 月版;消费者套餐在另一个页面说明)。其他服务商各有自己的条款。如果你不想把赌注押在自己读对了条款上,本地模型让这个问题不复存在。

云端服务商会收到什么

Resume Matcher 是一个工具框架(harness):它把提示词发给你接入的模型,再对结果做代码检查。发送前不做任何脱敏。下面这张表来自项目代码,列出每个功能会把什么发给你选定的服务商。

功能 发给服务商的内容
简历上传(解析) 完整的简历提取文本,包括姓名、邮箱、电话和链接
职位描述分析、简历标题 职位描述
定制(技能规划、差异编辑) 职位描述加结构化 JSON 形式的完整简历,含个人信息
定制后的关键词处理 定制简历和主简历的 JSON,加职位描述的前 2,000 个字符
要点评分 要点文本、职位描述和提取的关键词
求职信、联系邮件 完整简历 JSON 加职位描述
面试准备 简历 JSON(最多 30,000 个字符)加职位描述(最多 12,000 个字符)
内容补充、重新生成、简历向导 该简历或条目,加你的回答和指令
测试连接 「Hi」这个词

没有任何数据会发给 Resume Matcher 的作者;应用不含任何分析代码。你为其他服务商保存的 API 密钥、数据库、追踪看板、设置和渲染好的 PDF 都留在硬盘上。唯一的另一个对外请求是 AI 库(LiteLLM)在启动时获取一份公开的模型价格表,其中不含你的任何数据,离线时会回退到内置副本。

手动粘贴到 ChatGPT 或 Claude 发送的是同样的东西,只是更没有结构。任何让云端模型读你简历的流程,都会把你的简历发到那个云端。

私密的 AI 简历定制是什么样

把同一个工具框架指向你电脑上运行的模型,上表里的每一行就都留在本地。模型读简历、提议修改、代码检查,没有任何网络请求把文本送到别处。

在 Resume Matcher 里,这意味着在设置里选两种服务商之一:

  • Ollama,一个免费工具,下载开源模型并在 http://localhost:11434 上提供服务。
  • 任何兼容 OpenAI 接口的服务:llama.cpp、vLLM、LM Studio,或其他任何支持 OpenAI Chat Completions API 的程序。

「私密」这个词有四处需要说明。

安装需要联网;使用不需要。 你一次性下载应用、它的依赖、它用于导出 PDF 的浏览器和模型权重。之后定制循环就离线运行。LiteLLM 启动时获取价格表的请求在离线时会回退到内置副本。

你的数据在一个文件夹里。 简历、职位描述、定制版本和追踪看板存在应用数据目录下的一个 SQLite 文件里,或者一个 Docker 卷里。设置放在旁边的一个小配置文件里。API 密钥(如果你保存过)用一个只有你的用户账号能读的密钥文件加密。简历内容本身以明文数据存在那个 SQLite 文件里,所以这个文件夹和它所在的硬盘一样私密;开了全盘加密的笔记本就够了。

应用里没有分析代码。 代码不含任何追踪 SDK。Docker 镜像还关闭了 Next.js 自带的框架遥测;如果你用 npm run dev 从源码运行前端,这个框架层面的设置就由你自己管理。

本地服务永远拿不到你的云端密钥。 如果你的环境里留着付费服务商的密钥,然后切换到 Ollama,后端会对本地服务扣下这个密钥,所以切换服务商不会泄露它。

选择本地模型

Ollama 是阻力最小的路径。它按名字拉取模型,并在本地端口上提供服务。Resume Matcher 的设置页面推荐 gemma3:4b 作为 Ollama 默认模型,项目的安装指南还列了 llama3.2 和 mistral 作为其他选项。Ollama 能提供的任何模型都可以填进模型字段。

从默认模型开始。 gemma3:4b 是项目建议的起点,按 Ollama 的模型页面,截至 2026 年 10 月下载大小为 3.4 GB。它是小模型,所以请读下面关于结构化编辑的那段,了解该对它有什么预期。

硬件允许就上更大的。 同一页面列出 gemma3:12b 为 8.2 GB,gemma3:27b 为 17 GB。这些是下载大小,模型运行时需要的内存是另一个数字,取决于量化方式和上下文长度。Resume Matcher 的文档没有给出内存要求,我也不打算编一个。Ollama 的 FAQ 解释了如何查看模型是加载到了 GPU、系统内存还是两者混合,这是弄清某个规模的模型是否适合你机器的最快办法。

预期小模型在结构化编辑上会吃力。 这是已知问题。Resume Matcher 不会让模型生成一整份新简历。它要的是一张严格格式的定向修改清单,每处修改都引用原文,代码据此在应用前核实。项目的设计笔记记录了较小的模型在这种格式上的困难:返回格式错误的输出、引用的文本对不上,或者干脆跳过结构。代码会重试有限次数;重试都失败你会收到错误,可以重新生成或换更大的模型。弱模型耗的是你的时间,而护栏不随模型变化:姓名、雇主、职位、日期和学位锁定,新数字撤销。

工具框架为帮助本地模型做了两件事:

  • 对 Ollama 始终开启 JSON 模式,服务端拒绝时回退到仅靠提示词,让模型被推向有效的结构。
  • 去掉推理痕迹。 有些推理模型会在答案前输出一段 <think> 块。代码在解析前会移除这些块,所以思考型模型不会破坏编辑格式。

如果默认模型在你的简历上给出格式错误的预览,先试一个中等规模的模型,再去怀疑提示词。

取舍:速度、质量、超时

速度。 云端模型几秒钟就能回应一次定制请求。笔记本 CPU 上的本地模型,同样的提示词可能要几分钟,而定制流水线每次运行要调用模型好几次:从职位描述提取关键词、要点相关性打分、技能规划、修改清单,以及之后的关键词处理。每次调用都等上一次完成。单次慢五倍的模型,整次运行就慢五倍。

质量。 更大的模型改写更流畅,更贴近职位描述的词汇,产生的坏编辑更少。小模型措辞更生硬,被拒绝的改动更多。代码检查意味着两者的下限相同:小模型和大模型一样无法编造指标或改你的日期,因为这些修改在到你手上之前就被拦下了。上限不同。

超时。 Resume Matcher 里每个 AI 请求都在同一个截止时间下运行,即 REQUEST_TIMEOUT_SECONDS,默认 240 秒,接受 30 到 1,800 之间的值。这个截止时间覆盖整次定制运行,包括它的所有模型调用。本地服务商的超时系数会翻倍,但普通硬件上的大模型仍然可能超时。如果你看到超时,就把后端环境里的 REQUEST_TIMEOUT_SECONDS 和前端环境里的 NEXT_PUBLIC_REQUEST_TIMEOUT_MS 一起调高;自带 API 密钥页面列了这两项。

成本。 本地模型每次请求零成本,云端服务商按调用收费。一轮四十份申请的求职,每份都要定制简历、求职信和面试准备,这个差额对有些人是真金白银,对另一些人是零钱。不管怎样,隐私这个理由本身就站得住。

整体如何配合

先用一段话交代全貌;命令都在文档里。

Ollama 在你的电脑上运行,监听 11434 端口。Resume Matcher 在它旁边运行,从源码或在 Docker 里都行,应用在 3000 端口提供服务。在设置里你选 Ollama 作为服务商,填入你拉取的模型名,点击测试连接,它会发送「Hi」这个词并报告模型有没有回应。从 Docker 里,应用通过 http://host.docker.internal:11434 而不是 localhost 访问 Ollama,因为容器有自己的网络命名空间。之后应用里的每个功能(定制、求职信、面试准备、内容补充)都用这个本地模型,浏览器也在同一台机器上打印你的 PDF。

Ollama 设置页面有 Docker 的完整教程,自带 API 密钥覆盖了源码和 Docker 两种路径的设置、环境变量和故障排除。

什么时候云端模型是更好的选择

本地是一种取舍,对有些人来说云端那边占优。如果你的笔记本性能有限,能跑的模型就小,而小模型给出被拒绝的编辑比给出有用的编辑更频繁。如果你这周就要投递,而每次运行要四分钟,速度比数据流向更重要。如果你的简历里没有任何不想让服务商读到的内容,而且你读过服务商的条款,隐私这个理由对你来说只是纸上谈兵。

折中的路线也行得通。大部分定制用本地模型跑,到那一份你想要最好文笔的申请时,再在设置里切换服务商。应用为每个服务商各存一份密钥,切换就是一个下拉菜单。护栏代码始终不变:不管接入哪个模型,你的姓名、雇主、职位、日期和学位都锁定,模型编造的任何数字在你看到之前就会被撤销。

Resume Matcher 免费,以 Apache 2.0 许可证开源,有超过 20 万求职者在用。它不附带模型,也不托管网站,这正是这篇文章的全部要点:模型是你的,数据也是。

如果这篇文章帮到了你

如果在自己的机器上运行模型正是你要找的那个版本,给 GitHub 上的 Resume Matcher 点个 Star 能帮更多求职者找到它。你可以在 GitHub、X 和 LinkedIn 上关注我,Saurabh Rai。

[本文在 AI 的帮助下完成起草、翻译和排版。产品信息已对照 Resume Matcher 源代码核实,引用的外部资料均附有链接。]

觉得有用? 在 GitHub 上为 Resume Matcher 点个 Star,并关注项目动态