私密 AI 简历定制:用 Ollama 在本地运行
用本地模型做私密的 AI 简历定制:云端服务商会收到什么,如何选 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,并关注项目动态