8.2 KiB
Note
本文档由 WeHub 基于上游 README 翻译整理,属于社区翻译,非官方中文文档。
English · 原始项目 · 上游 README
原作者、版权与许可证归属以原始项目及本仓库 LICENSE 文件为准。
Hiring Agent
简历转评分流水线(Resume-to-Score pipeline),可从 PDF 提取结构化数据,结合 GitHub 信号进行增强,并输出公平、可解释的评价结果。
目录
概述
Hiring Agent 将简历 PDF 解析为 Markdown,使用本地或托管 LLM 提取分节 JSON,并用 GitHub 个人资料与仓库信号增强数据,最终生成客观评价,包含分类得分、证据、加分项与扣分项。你可以通过 Ollama 完全在本地运行,或使用 Google Gemini。
架构
|
流程
|
核心模块
|
安装与配置
前置要求
-
Python 3.11+
本仓库将
.python-version固定为 3.11.13。 -
一个 LLM 后端(二选一)
使用 pip 快速安装
$ git clone https://github.com/interviewstreet/hiring-agent
$ cd hiring-agent
$ python -m venv .venv
# Linux or macOS
$ source .venv/bin/activate
# Windows
# .venv\Scripts\activate
$ pip install -r requirements.txt
Ollama 模型
拉取你想使用的模型。例如:
$ ollama pull gemma3:4b
如果想要不同结果,可以拉取其他模型,例如:
# For higher system configuration
$ ollama pull gemma3:12b
# For lower system configuration
$ ollama pull gemma3:1b
配置
复制模板并设置环境变量。
$ cp .env.example .env
环境变量
| Variable | Values | Description |
|---|---|---|
LLM_PROVIDER |
ollama or gemini |
选择提供商。默认为 Ollama。 |
DEFAULT_MODEL |
for example gemma3:4b or gemini-2.5-pro |
传递给提供商的模型名称。 |
GEMINI_API_KEY |
string | 当 LLM_PROVIDER=gemini 时为必填项。 |
GITHUB_TOKEN |
optional | 继承自 shell 环境,可改善 GitHub API 速率限制。 |
提供商映射位于 prompt.py 与 models.py。config.py 文件包含一个标志:
# config.py
DEVELOPMENT_MODE = True # enables caching and CSV export
迭代期间可保持开启。详见下一节。
工作原理
1) PDF 提取
pymupdf_rag.py与pdf.py使用 PyMuPDF 读取 PDF,并将页面转换为类 Markdown 文本。to_markdown例程处理标题、链接、表格及基本格式。
2) 基于模板的章节解析
prompts/templates/*.jinja为各章节定义严格指令 Basics、Work、Education、Skills、Projects、Awards。pdf.PDFHandler按章节调用 LLM,并组装JSONResume对象(见models.py)。
3) GitHub 增强
github.py从简历 profiles 中提取用户名,获取个人资料与仓库,并对每个项目进行分类。- 它让 LLM 恰好选出 7 个不重复的项目,要求达到最低作者提交阈值,并优先选择有意义的贡献。
4) 评价
evaluator.py使用编码了公平性与评分规则的模板。- 得分包括
open_source、self_projects、production与technical_skills,以及加分与扣分,随后为证据提供说明。
5) 输出与 CSV 导出
score.py向 stdout 打印可读摘要。- 当
DEVELOPMENT_MODE=True时,会创建或追加resume_evaluations.csv(包含关键字段),并在cache/下缓存中间 JSON。
CLI 用法
端到端评分
提供简历 PDF 的路径。
$ python score.py /path/to/resume.pdf
执行过程:
- 若开发模式开启,PDF 提取结果会缓存到
cache/resumecache_<basename>.json。 - 若在简历中找到 GitHub 个人资料,会获取仓库并缓存到
cache/githubcache_<basename>.json。 - 评价器打印报告;在开发模式下,会向
resume_evaluations.csv追加一行 CSV。
目录结构
.
├── .env.example
├── .python-version
├── config.py
├── evaluator.py
├── github.py
├── llm_utils.py
├── models.py
├── pdf.py
├── prompt.py
├── prompts/
│ ├── template_manager.py
│ └── templates/
│ ├── awards.jinja
│ ├── basics.jinja
│ ├── education.jinja
│ ├── github_project_selection.jinja
│ ├── projects.jinja
│ ├── resume_evaluation_criteria.jinja
│ ├── resume_evaluation_system_message.jinja
│ ├── skills.jinja
│ ├── system_message.jinja
│ └── work.jinja
├── pymupdf_rag.py
├── requirements.txt
├── score.py
└── transform.py
提供商详情
Ollama
- 设置
LLM_PROVIDER=ollama - 将
DEFAULT_MODEL设为任意已拉取的模型,例如gemma3:4b models.OllamaProvider中的提供商封装会调用ollama.chat
Gemini
- 设置
LLM_PROVIDER=gemini - 将
DEFAULT_MODEL设为受支持的 Gemini 模型,例如gemini-2.0-flash - 提供
GEMINI_API_KEY models.GeminiProvider中的封装会将响应适配为统一格式
贡献
请阅读 CONTRIBUTING.md,了解提交 issue、提出变更与提交 pull request 的详细指南。核心原则包括:
- 保持 prompt 声明式且与提供商无关。
- 在不同提供商下用几份真实简历验证变更。
- 添加或调整无单元测试的冒烟测试(smoke test),以最小输入调用各阶段。
许可证
MIT © HackerRank