最近在招聘季帮HR部门处理简历时,发现人工筛选效率实在太低。一个中级岗位发布3天就能收到200+份简历,HR同事平均要花6-8小时才能完成初步筛选。更头疼的是,不同招聘官对"匹配度"的判断标准经常不一致,导致优质候选人可能被误筛。
这个开源项目就是用LangGraph构建的智能筛选系统,主要解决三个痛点:
实测在跨境电商公司的技术岗位招聘中,系统将平均筛选时间从7小时压缩到15分钟,初筛准确率达到92%(以最终面试通过为基准)。
我们对比了三种实现方案:
| 方案 | 开发效率 | 可解释性 | 流程灵活性 | 维护成本 |
|---|---|---|---|---|
| 传统规则引擎 | ★★★ | ★★ | ★ | ★★★★ |
| 纯LLM链式调用 | ★★ | ★★★ | ★★★ | ★★ |
| LangGraph工作流 | ★★★★ | ★★★★ | ★★★★ | ★★★ |
最终选择LangGraph的核心原因:
系统采用三级过滤架构:
mermaid复制graph TD
A[简历解析] --> B{硬性条件过滤}
B -->|通过| C[技能匹配度分析]
B -->|拒绝| D[淘汰池]
C --> E{项目经验评估}
E -->|通过| F[综合排序]
E -->|待定| G[人工复核]
F --> H[推荐面试名单]
每个节点的具体实现:
为了让不同岗位能自定义筛选条件,我们设计了规则配置DSL:
python复制class ScreeningRule(Model):
mandatory_skills: List[str] = Field(
description="必须满足的技能项",
json_schema_extra={"threshold": 0.75}
)
preferred_skills: List[str] = Field(
description="加分技能项",
json_schema_extra={"threshold": 0.5, "weight": 0.3}
)
education: Literal['本科', '硕士', '博士'] = '本科'
通过LangGraph的配置中心动态加载规则,不同岗位的HR管理员可以自行维护规则集。
处理PDF/Word格式简历时的挑战:
python复制def parse_resume(file: bytes) -> ResumeSchema:
text_blocks = parse_layout(file)
entities = nlp.detect_sections(text_blocks)
return ResumeSchema(
skills=extract_skills(entities),
experiences=extract_experiences(entities)
)
为方便HR理解AI的决策过程,系统生成带标记的评估报告:
json复制{
"candidate": "张三",
"decision": "推荐复试",
"assessment": {
"硬性条件": {"学历": "通过", "工作年限": "通过"},
"技能匹配": {
"Python": {"score": 0.82, "threshold": 0.7},
"Kubernetes": {"score": 0.61, "threshold": 0.5}
},
"red_flags": ["最近两份工作时长<1年"]
}
}
处理100份简历时的性能数据:
| 优化措施 | 耗时(s) | 内存占用(MB) |
|---|---|---|
| 原始版本 | 218 | 3200 |
| 启用异步处理 | 147 | 2800 |
| 添加缓存机制 | 89 | 2100 |
| 预加载模型 | 62 | 1800 |
关键优化点:
我们设计了三级容错方案:
典型错误处理示例:
python复制@node
async def evaluate_skills(context):
try:
with timeout(10):
return await calculate_similarity(context)
except TimeoutError:
context.logger.warning("技能评估超时")
return {"status": "pending", "need_review": True}
在某互联网公司的AIOps岗位招聘中:
原始数据:
系统运行结果:
误筛分析:
除标准招聘外,该系统还适用于:
内部晋升评估
校园招聘海选
人才库挖掘
安装依赖:
bash复制pip install langgraph-core resume-parser sentence-transformers
运行示例:
python复制from screening_flow import create_screening_flow
flow = create_screening_flow("config/jd_software_engineer.yaml")
results = await flow.run("resumes/")
在配置文件中扩展评估维度:
yaml复制custom_rules:
- name: "开源贡献"
evaluator: "github_contribution.Evaluator"
params:
min_stars: 50
weight: 0.2
PDF解析失败
匹配分数异常低
流程卡顿
这个项目已在GitHub开源,包含完整测试数据集和Docker部署方案。对于需要处理大规模招聘的企业,我们还提供了支持水平扩展的集群版本方案。