用 ollama-python 搭 AI 简历筛选器:手把手教程,1000 份简历 10 分钟搞定
【免费下载链接】ollama-pythonOllama Python library项目地址: https://gitcode.com/GitHub_Trending/ol/ollama-python
HR 最怕的场景是什么?一个岗位收 1000 份简历,人工逐份看要熬 3 个通宵,还容易漏掉黑马。ollama-python 是 Ollama 的官方 Python 库,它能让你用几行代码调用本地大模型,本文就带你用它的嵌入(Embedding,把文字变成可比较的数字向量)接口,搭一个本地 AI 简历筛选器:1000 份简历从 3 天压到 10 分钟,全程无需 API 密钥,简历数据不出内网。
读完本文你将带走 3 件事:
- 会用
embed一个接口把简历变成向量,算出和岗位 JD 的匹配分 - 掌握批量嵌入 + 缓存两套提速技巧,100 份简历提速 4 倍
- 拿到可直接复制的 Docker 部署命令,把筛选器上线到团队服务器
先睹为快:跑通后长什么样
对比一下"跑通前 vs 跑通后"👇
| 环节 | 人工 | 用 ollama-python 筛选 |
|---|---|---|
| 1000 份简历初筛 | 约 3 天 | 约 10 分钟 |
| 匹配依据 | 凭经验、易遗漏 | 每份简历都有 0~100 的量化匹配分 |
| 数据流向 | 简历外发在线工具 | 本地模型推理,数据不出内网 |
最终你得到的是一份按分数排序的清单,比如:
1. 张三_后端.docx —— 匹配度 92.4% 2. 李四_AI.docx —— 匹配度 87.1% 3. 王五_数据.docx —— 匹配度 81.6% ...HR 只需重点复核前 10% 的高分简历,其余交给 AI 兜底。
拆开看原理:两个概念就够
嵌入(Embedding):把一段文字转成一串数字(向量)。意思越接近的两段文字,向量越"贴近"。ollama-python 的embed方法(实现在 ollama/_client.py 第 406-427 行)会把文本 POST 到本地 Ollama 的/api/embed接口,返回这个向量,最小示例就在 examples/embed.py(第 1-4 行)。
余弦相似度:用夹角衡量两个向量的接近程度,取值 0~1,越大越匹配。它不关心向量长短(即不关心简历写得多啰嗦),只看"方向"是否一致——这正是筛选需要的。
整个流程就是三步:JD 和每份简历各转成一个向量 → 两两算余弦相似度 → 按分数排序。原理就这么多,下面直接跑通。
三步跑通:从安装到出结果
第 1 步:环境准备
git clone https://gitcode.com/GitHub_Trending/ol/ollama-python pip install ollama ollama pull nomic-embed-text # 专用嵌入模型,体积只有几百 MB简历筛选不需要大语言模型,用专门的嵌入模型又快又准;模型拉取也可以在代码里做,参考 examples/pull.py。
第 2 步:核心两行代码
把 JD 和简历都转成向量,剩下的事交给向量本身:
from ollama import embed # 一次调用拿到 JD 向量(embed 也接受列表,见下节批量技巧) jd = embed(model='nomic-embed-text', input=job_description) resume = embed(model='nomic-embed-text', input=resume_text)相似度用一行标准库就能算:
def cosine(a, b): dot = sum(x * y for x, y in zip(a, b)) return dot / ((sum(x * x for x in a) ** 0.5) * (sum(x * x for x in b) ** 0.5))第 3 步:批量跑并验证
遍历resumes/目录下所有.txt简历,逐份和 JD 算分、按分数降序输出即可。验证标准很简单:把一份明显匹配(Python + NLP 经验)和一份明显不匹配的简历放进目录,前者分数应比后者高 15 分以上——方向对了,就可以批量跑了。完整可运行示例可对照 examples/embed.py 的写法扩展,响应类型定义见 ollama/_types.py。
调优上生产:提速 4 倍的三个开关
1. 批量嵌入:embed的input参数支持列表,一次传 32 份简历,请求数从 N 降到 N/32,网络往返开销骤降。用法见 README.md 的 "Embed (batch)" 一节:
embeddings = embed(model='nomic-embed-text', input=resume_texts[:32])2. 异步并发:用AsyncClient并行发请求(README.md "Async client" 一节有现成写法),4 个并发下 100 份简历约从 1.3 分钟降到 20 秒左右。
3. 缓存向量:把简历文本的哈希 + 向量落盘(JSON 即可),同一批简历复筛、换 JD 对比时直接读缓存,避免重复计算——向量只和文本内容有关,与 JD 无关。
部署到服务器用 Docker 最省事,compose 文件里起 Ollama 和你的筛选脚本两个服务:
services: ollama: image: ollama/ollama:latest volumes: - ollama:/root/.ollama restart: always screener: build: . environment: OLLAMA_HOST: http://ollama:11434 depends_on: - ollama volumes: ollama:docker compose up -d客户端指向OLLAMA_HOST即可(自定义 host 的写法见 README.md "Custom client" 一节),简历数据始终在局域网内流动,天然满足合规要求。
举一反三:同一套思路还能打这三场
"文本 → 向量 → 相似度排序"这个骨架,换个语料就是另一个工具:
- 内部知识库问答:把员工手册、产品文档向量化,候选人或新人提问时先检索最相关的 3 段再让模型作答,参考 examples/chat.py 的对话写法。
- 重复/近似内容去重:工单、反馈、爬虫语料里相似度 >0.95 的判重合并,一个循环就能做。
- 简历信息结构化:筛完还要"读"简历时,用结构化输出让模型直接吐 JSON(技能、年限、学历),看 examples/structured-outputs.py;再配合 examples/chat-with-history.py 做多轮追问,就能实现"和 AI 讨论某位候选人是否合适"。
带走重点
ollama-python 的核心优势一句话:本地化、零密钥、几行代码。embed一个接口加上余弦相似度,就足以把"看简历"这件苦力活变成一份量化榜单;批量、异步、缓存三板斧让它从"能跑"变成"跑得快";Docker 一部署,团队随时能用。下一步建议:今天就按"三步跑通"搭一个最小版,先拿 20 份真实简历验证分数是否合理,再套上批量和缓存上量——现在就动手,搭一个属于你的 AI 简历筛选器吧 ⚡
【免费下载链接】ollama-pythonOllama Python library项目地址: https://gitcode.com/GitHub_Trending/ol/ollama-python
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考