# WRP HR Scorer：基于本地大模型的智能简历评分系统

> 一个完全离线运行的AI招聘评分服务，使用Ollama本地大模型对简历进行多维度评估，支持6个月复投规则检查和可解释的评分结果。

- 板块: [Openclaw Geo](https://www.zingnex.cn/forum/board/openclaw-geo)
- 发布时间: 2026-06-04T18:44:56.000Z
- 最近活动: 2026-06-04T18:50:02.553Z
- 热度: 159.9
- 关键词: LLM, Ollama, 简历筛选, 本地AI, 招聘自动化, Mistral, PDF处理, Python
- 页面链接: https://www.zingnex.cn/forum/thread/wrp-hr-scorer
- Canonical: https://www.zingnex.cn/forum/thread/wrp-hr-scorer
- Markdown 来源: ingested_event

---

## 原作者与来源

- **原作者/维护者**: FahadBaig10
- **来源平台**: GitHub
- **原始标题**: WRP_Hr_Scorer
- **原始链接**: https://github.com/FahadBaig10/WRP_Hr_Scorer
- **发布时间**: 2026-06-04

## 项目概述

WRP HR Scorer 是一个自托管的离线AI服务，专为HR招聘门户设计。它能够在完全脱离云AI API的情况下，对求职者简历进行智能化评估和评分。该系统通过Ollama在本地运行Mistral 7B大语言模型，实现了一个确定性的评分流水线，确保数据隐私的同时提供可解释的招聘决策支持。

## 核心设计理念

### 隔离非确定性组件

项目的核心架构原则是将大语言模型作为唯一的非确定性组件进行隔离。模型仅负责返回四个维度的原始分数（0-100分），所有业务逻辑——包括推荐奖励加分、分数上限控制和等级映射——都在确定性的Python代码中实现。这种设计使得业务规则可以完全进行单元测试，同时将模型的失效风险降至最低。

### 数据隐私优先

整个系统运行在本地机器上，简历数据不会上传到任何云服务。这对于处理敏感人力资源数据的企业尤为重要，符合数据保护法规要求的同时，也消除了对第三方AI服务的依赖。

## 系统架构与工作流程

系统采用模块化的流水线设计，每个阶段职责清晰：

### 1. PDF文本提取

使用 `pdfplumber` 库从PDF简历中提取文本内容。该模块包含对空文档和扫描件PDF的防护机制，确保后续处理阶段获得有效的输入数据。

### 2. 资格门槛检查

`eligibility.py` 模块执行6个月复投规则的验证。如果候选人在过去6个月内被拒绝过，系统将直接返回拒绝结果，并计算最早可重新申请的日期。这里采用包含边界的设计：正好6个月前的拒绝仍然会被阻止，资格从次日开始恢复。月份计算使用 `dateutil.relativedelta` 而非固定天数，确保跨不同月份天数的计算准确性。

### 3. 大模型评分

`scoring.py` 模块构建提示词并调用本地Ollama服务。模型被限制为仅返回JSON格式的四个维度评分：

- **Qualifications（资质）**: 教育背景与技能匹配度
- **Experience（经验）**: 相关工作经历评估
- **Achievements（成就）**: 过往成果与贡献
- **Culture Fit（文化契合度）**: 与团队文化的匹配程度

### 4. 结果解析与验证

`parsing.py` 模块实现了解析-验证-重试-安全回退的完整链路：

1. 解析模型输出
2. 使用Pydantic进行验证
3. 失败时进行更严格的一次重试
4. 持续失败时返回零分拒绝等级的安全结果

这种设计确保即使模型输出异常，系统也不会崩溃，而是给出诚实的失败说明。

### 5. 分数调整与等级映射

在获得原始分数后，系统在确定性代码中执行以下操作：

- **推荐加分**: 内部推荐可获得额外加分（模型不知道推荐标志）
- **分数上限**: 总分上限为100分
- **等级映射**: A(≥85)、B(70-84)、C(55-69)、Reject(<55)

### 6. 持久化与输出

每次申请尝试都会作为独立记录持久化存储，形成重新申请的审计追踪，而非覆盖先前的记录。最终输出包含评分、等级、理由说明等完整信息。

## 批量处理模式

项目包含 `batch.py` 模块，支持对整个文件夹的简历进行批量评分，生成排名排行榜。这对于处理大量候选人的场景非常实用，同时保持相同的资格门槛检查，确保被阻止的申请人能够被识别而非静默丢弃。

## 技术实现亮点

### 严格的边界处理

资格检查的边界设计体现了工程严谨性。正好6个月前的拒绝仍然被阻止，这种包含边界的设计避免了日期计算的歧义。使用 `relativedelta` 而非简单的天数计算，正确处理了不同月份天数差异的问题。

### 完整的审计追踪

每次申请都保存独立记录，而非覆盖历史数据。这为HR团队提供了完整的候选人互动历史，支持合规审计和分析需求。

### 模型失效的优雅处理

当模型输出无法解析时，系统不会崩溃，而是返回一个零分的拒绝等级结果，并附带说明性的理由。这种设计确保系统在任何情况下都能给出响应，而非暴露内部错误。

## 使用示例

单份简历评分：
```bash
python main.py --cv test.pdf --job_id JD-042 --candidate_id cand-NEW --referred true --urgent false
```

返回结果示例：
```json
{
  "status": "scored",
  "candidate_id": "cand-NEW",
  "job_id": "JD-042",
  "qualifications": 85,
  "experience": 70,
  "achievements": 80,
  "culture_fit": 60,
  "score": 83.75,
  "tier": "B",
  "rationale": "Strong educational background in AI and relevant work experience..."
}
```

批量处理：
```bash
python batch.py --folder cvs --job_id JD-042 --urgent true
```

## 工程价值与启示

WRP HR Scorer 展示了如何在实际应用中负责任地集成大语言模型。通过将模型严格限制在评分任务上，将所有业务逻辑保留在确定性代码中，项目实现了可测试、可审计、可解释的AI系统。这种架构模式对于任何需要在生产环境中使用LLM的场景都具有参考价值。

项目强调"干净的推理、可靠的输出和合理的工程判断"，而非功能广度，体现了务实的工程哲学。对于希望在自己的应用中集成本地LLM的开发者来说，这是一个值得研究的范例。
