本文之前发过,但排版有些问题,在此重发。
我一直认为,面试就像相亲一样,一看命运,二看感觉。命运负责安排什么人到你面前,至于能不能在一起,更多时候看感觉。简历筛选有时候也是看感觉,我不相信一个肉眼凡胎,一天面对几十上百份简历,能对每一份简历都做出客观的评价。
这话听起来有点残酷,但承认人的局限性,也许是我们思考“如何让筛选机制变得更公平、更客观”的一个好起点。
最近我们在招聘,HR 每天都甩几十份简历给我,说实话,我挺烦看简历的。精力有限,对于每一份简历我只能去抓关键词,看完后面的就忘了前面的,很难保证不会错过“对的人”。但我最近突然想到,我这个肉眼凡胎做不到,但 AI 可以啊!AI 最擅长的就是文本理解。
于是,我使用 WorkBuddy 探索出了一条路子,让 AI 轻轻松松对几十份简历进行评估和汇总。先看效果:

下文将介绍这次实践的调优过程和一些思考。如果你不想看这些啰嗦的文字,我已经把调教好的工作流封装成了一个 WorkBuddy 的“专家”,你可以直接使用。将以下链接复制到电脑浏览器上打开,就可以把“资深 HR 招聘专家”添加到你的 WorkBuddy 专家队伍里。
当然,每个公司的具体招聘场景和需求各异,这个现成的专家可能无法满足你的所有需求,但阅读下文的思考过程,也许能为你的个性化流程设计带来启发。
重点前提:数据安全不容忽视
在开始尝试之前,我相信很多公司都有一个重要的考量:数据隐私。
简历包含大量敏感的个人信息(如手机号、邮箱等),绝对不能让大模型直接读取到这些敏感数据。因此,在工作流中,我有一条铁律:在把简历内容发送给大模型之前,就必须让它自动过滤掉敏感信息,然后再将脱敏后的文本发给大模型进行评估。
具体方式是在指令中明确要求:“为了数据安全,提取文本内容时,用正则表达式过滤掉手机号、邮箱等敏感信息。”
如果想深入了解原理,请看我上一篇文章。
第一次尝试:关键词匹配 —— 太粗糙了
我跟 WorkBuddy 说:
你是经验丰富的人力资源招聘经理,“E:\HR\Agent工程师招聘简历” 目录下是我们收到的简历,请你逐个查看,并按照常见的筛选条件汇总成一个表格。
读取简历内容的流程和约束:
1. 为了保持原文结构,提取文件内容时,请使用 markitdown
2. 为了数据安全,提取文本内容时,用正则表达式过滤掉手机号、邮箱等敏感信息
它很快就跑完了。它写了 Python 脚本,使用 markitdown 提取 PDF 文本,用正则表达式过滤敏感信息,输出了一个 JSON 和 HTML 表格。不过它使用的是关键词匹配的方法,AI 自己生成一堆和这个岗位相关的关键词,然后去看看简历里有没有这些关键词。
结果:能用,但不太靠谱。
我翻了翻结果,发现了几个明显的问题:
- 有份简历里写的是“2024 年毕业”,被解析成 24 年工作经验。
- 有份简历写到“线程池等常用技术”,被解析成他在一家叫**“线程池”**的公司工作过。
- 评估逻辑太简单,就是看谁简历里出现的关键词多,“Agent 深度”这一项就给高分。
总结: 关键词匹配可以快速过滤噪音,但绝对不能作为最终评估。尤其是 Agent 这种新兴岗位,一个人的技术水平不能仅仅通过数关键词来判断。
第二次尝试:让 AI 逐份阅读评估 —— 维度不够
我换了个思路,让 WorkBuddy 真正去读每一份简历,流程如下:
PDF 文件
↓ markitdown 提取文本
↓ 正则脱敏
↓ 把每份简历文本送给大模型,按统一维度评估
↓ 大模型输出结构化字段(姓名、年限、技术能力、亮点、风险...)
↓ 汇总成表格
这次的结果比第一次好 —— 它确实读了每一份简历的内容,评分也有一定的依据。但我发现了一个问题:大家的分数都挤在一起,很难区分谁更适合这个岗位。
问题出在哪里? 评估维度太通用了,也就是维度不够丰富。“技术能力”的具体表现,对于前端工程师和 Agent 工程师是完全不同的。用同一套模板套所有岗位,自然区分不出谁真正符合要求。
第三次尝试:先做岗位画像,再批量评估 —— 终于对了
这次我先让 WorkBuddy 做一件事:先随机读 2-3 份简历,总结这个岗位的候选人有什么特点,水平高低体现在哪里。
我们这批简历主要是招“AI Agent 全栈工程师”。AI 读完 2 份后总结出了这个岗位的关键差异点,给了 9 个专属评估维度,每个维度 1-5 分,并且附上了评分锚点:
| 维度 | 1 分 | 3 分 | 5 分 |
|---|---|---|---|
| Agent 开发深度 | 仅了解概念 | 独立开发过 Agent | 架构级,主导多 Agent 平台 |
| MCP 工具经验 | 无 | 调用过 MCP | 开发过自定义 MCP 工具 |
| RAG 能力 | 仅了解 | 实现过基础 RAG | GraphRAG / LightRAG 高级方案 |
| 多 Agent 编排 | 无 | 用过框架 | 生产级多 Agent 协作系统 |
| 模型微调 | 无 | 有 LoRA 经验 | 全参微调 + 数据工程 |
| 部署运维 | 无 | Docker 部署 | K8s + 监控 + 容灾 |
| 全栈工程 | 仅一种语言 | 前后端都做过 | 全栈 + 多语言 + 架构设计 |
| 项目质量 | 玩具项目 | 公司内部使用 | 上线商用 / 万人用户 |
| 综合评分 | 加权汇总(Agent 深度 ×2 + MCP ×1.5 + RAG ×1.5 + 其他 ×1) |
有了这套专属标准,每个人之间的差距一目了然,这才是真正有用的评估。
但批量评估完成后,我又发现了另一个问题。
黄某,9 年经验,技术栈丰富,综合评分给了 B 级。但我去翻他的简历原文,求职意向上写着:“前端开发工程师,期望 17-20K”。
他根本不找 Agent 岗位。类似的还有:
- 李某,5 年 Go + Agent + MCP,技术过硬,但求职意向是“Golang 语言工程师”。
- 陈某,6 年阿里云 Agent 架构,A 级评分,但期望薪资 20-25K,超出了我们的预算。
于是我追加了一步:“重新检查所有简历里的期望岗位、期望薪资、期望城市,与我们的 JD 进行比对,不匹配的直接降级,存在偏差的单独标记。”
总结: 意向匹配是筛选的第一道关卡,而不是最后一道。技能再匹配,如果对方根本不找这个方向的工作,约来面试也是浪费时间。
最终成果
三轮下来,WorkBuddy 给我产出了一份可排序、可筛选的 HTML 汇总表,如文章开头的截图所示。
最终工作流(可直接照做)
经历过前面的踩坑,我把最终的流程固化成了以下 6 步:
- 输入基准:告诉 WorkBuddy 你的 JD(岗位名称、薪资范围、工作地点)。
- 提取文本:指定简历文件夹,让它批量提取 PDF 文本并去掉敏感信息。
- 第一道关卡(意向排查):检查期望岗位、薪资、城市与 JD 的匹配度,不匹配的直接降级或过滤(不要把 token 浪费在无意向的人身上)。
- 岗位画像:让它抽读 2-3 份通过初筛的简历,建立候选人画像,生成专属评估维度。
- 深度精筛:让它逐份阅读剩下的核心简历,按专属维度进行深度打分。
- 输出结果:生成可排序、可筛选的 HTML 汇总表。
你可以按照这个工作流,并结合你的个性化场景需求来编写自己的提示词。
本文基于真实招聘案例