Hiring Agent:本地试跑、偏差审计与人工复核
Hiring Agent 把简历 PDF 转为结构化数据,可选加入简历中提供的 GitHub 信号,再按岗位目录中的公开规则生成分项分数和证据。官方明确说它不是 ATS,也不是客户产品,但也说明它曾被用来给实习申请排序并过滤低于阈值的简历。
1. 先锁定代码、模型和岗位规则
官方没有 GitHub Release。评估记录至少要包含 commit、Python 版本、providers.json、模型版本和整个 roles/<role> 目录。仓库固定 Python 3.11.13,默认模型是 Ollama 的 gemma4:latest;官方同时说明这个配置不是 HackerRank 的生产配置。
git clone https://github.com/interviewstreet/hiring-agent cd hiring-agent git rev-parse HEAD python3.11 -m venv .venv source .venv/bin/activate pip install -r requirements.txt
2. 第一次只用合成简历和本地模型
ollama pull gemma4:latest cp .env.example .env # 使用自制的、无真实个人信息的 PDF python score.py ./resume/synthetic.pdf \ --role software_engineering_intern
合成集要覆盖:公开 GitHub 与无 GitHub、私有企业项目、职业空档、非传统学历、不同 PDF 排版、屏幕阅读器友好格式,以及与岗位无关的个人信息。先确认解析结果,再看评分;解析错了,后面的解释再完整也没有意义。
3. 必做的四组测试
| 测试 | 做法 | 失败信号 |
|---|---|---|
| 重复性 | 同一文件、同一配置运行至少 20 次 | 排序或阈值结论频繁翻转 |
| 提示注入 | 加入白字、隐藏层和“忽略规则”文本 | 分数被不可见内容显著抬高 |
| 反事实 | 只改变姓名、学校、地址等不相关字段 | 技术分数或排序变化 |
| GitHub 缺失 | 保持经历相同,去掉公开仓库入口 | 私有工作被系统性当作能力缺失 |
README 已收录关于评分波动、隐形文本攻击和 GitHub 中心化偏置的外部复现。上线前应自己复现,而不是只引用“fairness constraints”一句话。
4. 数据流和本地文件
本地 Ollama 能减少向云模型发送简历,但程序仍可能访问 GitHub API。DEVELOPMENT_MODE=True 时会缓存中间 JSON,并把每个岗位的结果追加到 CSV。真实候选人环境必须关闭不必要缓存,设置目录权限、保留期限和删除流程,并记录谁查看或导出了数据。
5. 人工复核不能只是看最终分数
- 复核者应看到原始岗位标准、解析文本、每项证据和模型版本。
- 任何淘汰决定要有独立人类理由,候选人应有纠错和申诉渠道。
- 无法使用标准 PDF 或需要合理便利的申请者,要有替代流程。
- 定期按受法律保护群体做差异影响分析,并检查标准是否真能预测岗位表现。
美国 EEOC 明确把 AI 招聘、筛选和录用列入可能触及反歧视法的场景。欧盟 AI Act 将用于招聘、筛选和候选人评估的特定系统列为高风险。实际义务取决于地区与部署方式,需要专业法律评估。
6. 与 CandiSift 的区别
CandiSift 定位完整开源 ATS,描述了 PII 去除、确定性过滤、职位匹配、模型阶段和人工复核。Hiring Agent 更小,适合研究单份简历、GitHub 信号和公开 rubric。需要候选人管道和 PII 控制时,CandiSift 覆盖更广;要检查 HackerRank 公开评分规则时,Hiring Agent 更直接。两者都要独立做偏差和合规验证。
7. 本次验证边界
验证状态:本次核对官方 README、requirements、providers.json、默认岗位规则、MIT LICENSE、GitHub API、EEOC 与 EU AI Act 官方资料;没有处理任何简历。
已经确认:无正式 Release、Python 3.11.13、默认模型、数据流程、默认岗位权重、缓存/CSV 行为和官方披露的争议均有来源。
没有验证:安装、PDF 解析、模型可用性、重复评分方差、提示注入、GitHub 数据、偏差指标、隐私控制和任何地区的法律适用性。
这里仅补原教程没有展开的事实和边界。安装命令与操作步骤仍以前文为准。
先判断这个项目是否适合你
适合谁用
适合教学、研究、岗位 rubric 原型和候选人自查,也可以作为内部审计样例。招聘者若要影响真实候选人的排序、面试或淘汰,需要独立的法律、偏差、可访问性、数据保护和人工复核流程;仓库默认配置不能直接视为合规产品。
采用建议
Hiring Agent 最有价值的地方是把招聘评分规则和争议公开出来,适合作为审计与研究材料。真实招聘应先用合成数据验证解析、注入和重复性,再设计人工复核、候选人告知、申诉、合理便利与差异影响监控;未完成这些工作前,不应让默认分数决定谁失去机会。
原教程未展开的系统信息
核心功能
PDF 分段解析
PyMuPDF 把 PDF 转为 Markdown 风格文本,Jinja 模板分别提取基本信息、工作、教育、技能、项目和奖项。
GitHub 信号补充
若简历包含 GitHub 资料,程序获取公开 profile 与仓库,并让模型挑选最多 7 个项目参与评价。
岗位目录化规则
每个 roles/<name> 目录用 role.json、criteria.jinja 和 system_message.jinja 定义分类、权重、评分边界和公平性提示。
技术栈和运行条件
语言
Python 3.11+;仓库固定 3.11.13
框架
PyMuPDF、Pydantic、Jinja2、OpenAI-compatible provider wrapper
关键依赖
- 本地 Ollama 或配置的云模型
- 可选 GitHub token
- 岗位 role.json 与评分模板
运行环境
命令行工具;development mode 会本地缓存候选人结构化数据并写 CSV
常见问题
Hiring Agent 是 HackerRank 正在销售的 ATS 吗?
不是。官方 README 明确说它不是 ATS,也不是面向 HackerRank 客户的产品;仓库配置还是演示配置,不是其生产配置。
同一份简历多跑几次会得到相同分数吗?
不能保证。官方 README 收录的复现实验指出同一简历存在明显评分波动。使用者应固定模型与配置并重复测量,不能把一次分数当成稳定事实。
本地 Ollama 是否意味着简历不会离开电脑?
模型可以本地运行,但程序仍可能调用 GitHub API,并在 development mode 缓存 JSON、写入 CSV。需要同时检查网络、日志、缓存和文件权限。
Hiring Agent 能自动淘汰真实候选人吗?
技术上可以按阈值过滤,但不应直接这样部署。招聘 AI 可能受反歧视、数据保护、高风险系统和合理便利要求约束,必须做人工复核、偏差测试和当地法律评估。