人才简历与企业需求自动匹配系统(v2.0 · 自动进化)
何时使用本 Skill
当用户提出以下需求时,应加载本 Skill:
- 上传了多份简历(PDF/Word/图片/压缩包),想找匹配的岗位或做筛选
- 上传了企业招聘需求表(Excel),想找合适的候选人
- 要求"简历匹配""人岗匹配""候选人筛选""简历打分""招聘报告"
- 想看"某个人才适合哪些岗位"(反向匹配)
- 想优化/调整匹配权重、匹配规则
- 想查看或改进匹配系统的学习状态
快速开始
所有命令在工作目录下执行,核心引擎位于 scripts/matcher_engine.py。
常规匹配(一步出报告)
python3 scripts/matcher_engine.py \
--resumes <简历目录> \
--jobs <企业需求表.xlsx> \
--output <输出目录> \
--reverse
自动产出:Excel报告、HTML可视化报告、Markdown报告、反向匹配报告、反馈待标注文件。
触发进化(核心特性)
# 1) 让用户为 feedback_待标注.jsonl 填写 label(合理/偏高/偏低/错误)或 manual_score
# 2) 执行进化
python3 scripts/matcher_engine.py --feedback <已标注文件> --evolve
# 3) 之后每次匹配自动使用进化后的权重
查看进化状态
python3 scripts/matcher_engine.py --status
登记同义词 / 列名别名
python3 scripts/matcher_engine.py --learn-synonym "K8s=Kubernetes"
python3 scripts/matcher_engine.py --learn-alias "job_fields.position=需求岗位"
一键体验进化全流程
python3 demo_evolution.py
核心能力清单
| 能力 | 实现 |
|---|---|
| 简历批量解析 | PDF / DOCX / DOC / TXT / 图片(OCR) |
| 需求表解析 | Excel,列名别名可学习扩充 |
| 信息提取 | 姓名/年龄/学历/年限/行业/技能/项目/薪资/意向岗位/意向城市/证书 |
| 硬性门槛 | 学历 / 工作年限 / 必备证书(一票否决,分数上限49) |
| 软性评分 | 技能30% 行业15% 职责15% 薪资15% 项目15% 年限10%(权重可进化) |
| 技能识别 | 精确 → 归一化(忽略空格符号) → 同义词(可学习) → 全文兜底 |
| 匹配等级 | 高度≥85% / 良好70-84% / 一般50-69% / 不匹配<50% |
| 正反向匹配 | 企业→人才、人才→企业 |
| 自动标签 | 行业/岗位/经验/学历/技能/证书 |
| 冲突提示 | 薪资冲突(>130%上限)、地域冲突 |
| 隐私脱敏 | 手机号/身份证/邮箱(默认开启) |
| 自动进化 | 权重梯度学习 + 同义词自增长 + 别名学习 + 进化报告 |
自动进化机制
四条进化路径
| 路径 | 机制 | 触发 |
|---|---|---|
| ① 权重自进化 | 投影梯度下降 + 多起点寻优 + 不倒退保护,从HR反馈反推真实权重偏好 | --evolve |
| ② 同义词自增长 | 从"反馈认可但技能未命中"的样本沉淀写法差异,出现≥2次自动转正 | --evolve / --learn-synonym |
| ③ 解析别名学习 | 新简历字段写法、新Excel列名登记后永久生效 | --learn-alias |
| ④ 进化可观测 | 版本号、权重、MAE、等级准确率、历轮记录 → 可视化报告 | 自动 |
实测进化效果
模拟 HR 反馈对照实验(真实偏好:项目0.40/技能0.30/行业0.10):
| 维度 | 进化前 | 进化后 | 真实值 | 误差 |
|---|---|---|---|---|
| 项目经验 | 0.150 | 0.396 | 0.40 | 0.004 |
| 技能 | 0.300 | 0.300 | 0.30 | 0.000 |
| 行业 | 0.150 | 0.101 | 0.10 | 0.001 |
| 职责 | 0.150 | 0.099 | 0.10 | 0.002 |
| 薪资 | 0.150 | 0.059 | 0.05 | 0.009 |
| 年限 | 0.100 | 0.046 | 0.05 | 0.004 |
MAE 8.7分 → 0.0分;等级准确率 64% → 100%(仅11条反馈样本)
同义词学习:K8s vs Kubernetes 场景,技能匹配 75% → 100%,综合分 +7.5。
学习保护机制
- 不倒退保护:新权重表现不如原权重时拒绝更新
- 边界约束:单维度权重 ∈ [0.02, 0.60]
- 硬性样本隔离:硬性不通过样本不参与权重学习
- 同义词置信门槛:出现 ≥2 次才转正
- 版本可追溯:
knowledge/state.json记录每轮进化
目录结构
resume-job-matcher-skill/
├── SKILL.md 本文件
├── README.md 完整使用说明
├── 参数配置说明.md 参数详解
├── demo_evolution.py 进化一键演示
├── scripts/
│ ├── matcher_engine.py 主引擎(解析/匹配/报告/CLI)
│ └── evolution.py 进化引擎(知识库/权重学习/反馈)
├── config/weights.json 权重配置模板
├── knowledge/ 进化知识库(学习成果都在这里)
│ ├── state.json 版本、当前权重、历轮记录
│ ├── synonyms.json 正式同义词库
│ ├── synonym_candidates.json 候选同义词
│ └── aliases.json 解析别名
└── examples/
├── resumes/ 5份测试简历
├── jobs/ 企业需求表Excel
├── feedback/ HR反馈样例
├── output/ 匹配报告输出
└── demo_evolution/ 进化演示产物
参数速查
| 参数 | 说明 |
|---|---|
--resumes |
简历目录(匹配时必填) |
--jobs |
企业需求表 Excel(匹配时必填) |
--output |
输出目录 |
--reverse |
反向匹配(人才视角) |
--filter-level |
筛选等级(高度匹配/良好匹配/一般匹配/不匹配) |
--show-sensitive |
展示敏感信息(默认脱敏) |
--weights |
自定义权重JSON(优先级高于进化权重) |
--knowledge-dir |
知识库目录(默认 ./knowledge) |
--feedback |
已标注反馈文件 |
--evolve |
执行一轮进化 |
--no-learn |
关闭自动学习 |
--learn-synonym A=B |
登记技能同义词 |
--learn-alias F=N |
登记解析别名 |
--status |
查看进化状态 |
使用要点(给 AI 助手的指引)
- 首次使用:先跑
--status看知识库状态;无简历/岗位文件时引导用户提供。 - 匹配后:主动提示用户「可填写反馈文件触发进化,让下次更准」,并说明填法。
- 用户抱怨匹配不准时:引导走进化流程(填标 →
--evolve),而不是直接改代码。 - 技能写法差异导致漏匹配:用
--learn-synonym登记,立即生效。 - Excel 列名识别不了:用
--learn-alias "job_fields.字段=列名"登记。 - 输出报告:匹配完成后必须用 present_files 展示 HTML 报告,Excel 报告一并提供。
- 脱敏默认开启:如需展示真实手机号等信息,须用户明确要求才加
--show-sensitive。