首页 / 开源热榜 / Hiring Agent / 使用教程

Hiring Agent:本地试跑、偏差审计与人工复核

更新于 2026-09-23 · NGJOO AI 实验室 · 约 12 分钟

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. 人工复核不能只是看最终分数

美国 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 可能受反歧视、数据保护、高风险系统和合理便利要求约束,必须做人工复核、偏差测试和当地法律评估。