
招聘代理简历评分管道从 PDF 中提取结构化数据结合 GitHub 信息输出公正、可解释的评估结果内容概述架构、安装与设置前提条件、使用 pip 快速设置、Ollama 模型、配置、工作原理、命令行界面CLI使用方法、目录结构、供应商详情、贡献指南、许可协议。概述招聘代理将简历 PDF 解析为 Markdown 格式使用本地或托管的大语言模型LLM提取分段的 JSON 数据再结合 GitHub 个人资料和仓库信息对数据进行补充最后生成包含类别分数、证据、加分项和减分项的客观评估结果。可使用 Ollama 完全在本地运行也可使用 Google Gemini。架构流程pymupdf_rag.py将 PDF 页面转换为类似 Markdown 的文本pdf.py使用prompts/templates下的 Jinja 模板按部分调用 LLMgithub.py获取个人资料和仓库对项目进行分类并让 LLM 选出前 7 个项目evaluator.py在公平约束下进行严格评分的评估score.py端到端地协调所有操作在开发模式下会写入 CSV 文件。关键模块models.py包含 Pydantic 模式和 LLM 供应商接口llm_utils.py负责供应商初始化和响应清理transform.py将松散的 LLM JSON 数据规范化为 JSON 简历格式prompts/包含用于提取和评分的所有 Jinja 模板。安装与设置前提条件Python 3.11 及以上版本仓库将.python-version固定为 3.11.13一种 LLM 后端任选其一Ollama用于本地模型从官方网站安装然后运行ollama serveGoogle Gemini 若有 API 密钥可从指定位置获取。使用 pip 快速设置$ git clone https://github.com/interviewstreet/hiring-agent$ cd hiring-agent$ python -m venv .venv # Linux 或 macOS$ source .venv/bin/activate # Windows: .venv\Scripts\activate$ pip install -r requirements.txtOllama 模型拉取想使用的模型例如$ ollama pull gemma3:4b若想要不同结果可拉取其他模型如$ ollama pull gemma3:12b适用于较高系统配置$ ollama pull gemma3:1b适用于较低系统配置。配置复制模板并设置环境变量$ cp .env.example .env。环境变量说明LLM_PROVIDER为ollama或gemini选择供应商默认为 OllamaDEFAULT_MODEL例如gemma3:4b或gemini - 2.5 - pro传递给供应商的模型名称GEMINI_API_KEY为字符串当LLM_PROVIDER gemini时必需GITHUB_TOKEN可选继承自 shell 环境可提高 GitHub API 速率限制。供应商映射位于prompt.py和models.py中。config.py文件有一个标志# config.pyDEVELOPMENT_MODE True # 启用缓存和 CSV 导出在迭代过程中可保持开启详情见下一节。工作原理1. PDF 提取pymupdf_rag.py和pdf.py使用 PyMuPDF 读取 PDF 并将页面转换为类似 Markdown 的文本。to_markdown例程处理标题、链接、表格和基本格式。2. 使用模板进行部分解析prompts/templates/*.jinja为每个部分基本信息、工作经历、教育背景、技能、项目、奖项定义了严格的指令。pdf.PDFHandler按部分调用 LLM 并组装成JSONResume对象见models.py。3. GitHub 信息补充github.py从简历简介中提取用户名获取个人资料和仓库并对每个项目进行分类。它让 LLM 选择恰好 7 个独特的项目且作者提交次数有最低阈值优先选择有意义的贡献项目。4. 评估evaluator.py使用编码了公平性和评分规则的模板。分数包括开源项目、个人项目、生产项目和技术技能还有加分和减分项以及证据说明。5. 输出和 CSV 导出score.py将可读的摘要打印到标准输出。当DEVELOPMENT_MODE True时它会创建或追加resume_evaluations.csv文件包含关键字段并将中间 JSON 数据缓存到cache/目录下。命令行界面CLI使用方法进行端到端评分时提供简历 PDF 的路径$ python score.py /path/to/resume.pdf。具体流程如下如果开发模式开启PDF 提取结果会缓存到cache/resumecache_.json如果在简历中找到 GitHub 个人资料会获取仓库并缓存到cache/githubcache_.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:4bmodels.OllamaProvider中的供应商包装器调用ollama.chat。Gemini设置LLM_PROVIDER gemini将DEFAULT_MODEL设置为支持的 Gemini 模型例如gemini - 2.0 - flash提供GEMINI_API_KEYmodels.GeminiProvider中的包装器将响应调整为统一格式。贡献指南请阅读CONTRIBUTING.md以获取关于提交问题、提出更改和提交拉取请求的详细指南。关键原则包括保持提示声明性且与供应商无关在不同供应商下使用几份真实简历验证更改添加或调整无单位的冒烟测试以最少的输入调用每个阶段。许可协议本项目采用 MIT 许可协议© HackerRank。