系统架构
简历文档(PDF/DOCX) │ ▼ ┌──────────────┐ │ 简历解析 │ ← PDF(MinerU)/DOCX(python-docx) + LLM结构化 │ Agent │ └──────┬───────┘ │ 结构化简历JSON ▼ ┌──────────────┐ │ 岗位匹配 │ │ Agent │ ← JD(PDF/DOCX/MD) + 简历 → 匹配度评分(0-100) └──────┬───────┘ │ 匹配结果 ├─────────────┬─────────────┐ ▼ ▼ ▼ ┌────────────┐ ┌────────────┐ ┌────────────┐ │ 技术能力 │ │ 软技能 │ │ 文化匹配 │ ← 并行执行 │ 评估Agent │ │ 评估Agent │ │ 评估Agent │ └─────┬──────┘ └─────┬──────┘ └─────┬──────┘ └──────────────┼──────────────┘ ▼ ┌──────────────┐ │ 面试决策 │ │ Agent │ → 综合评分 + 面试问题清单 └──────────────┘
协作模式:串行流水线 + 并行评估
LLM调用:约8-12次(解析1次 + 匹配1次 + 评估3次 + 决策1次 + 搜索N次)
5个Agent说明
| Agent | 职责 | 输入 | 输出 | LLM调用 |
|---|
| 简历解析Agent | PDF/DOCX→结构化JSON | 简历文件(.pdf/.docx) | 结构化简历JSON | 1次 |
| 岗位匹配Agent | 简历与JD匹配度评分 | 简历JSON + JD(.pdf/.docx/.md) | 匹配度(0-100)+分析 | 1次 |
| 技术能力评估Agent | 技术深度/项目复杂度/成长轨迹 | 简历JSON + JD | 技术评分+技能分析 | 1次 |
| 软技能评估Agent | 沟通/协作/领导力+搜索 | 简历JSON | 软技能评分+搜索结果 | 1+N次 |
| 面试决策Agent | 综合评分+面试问题清单 | 4项评估结果 | 决策+问题清单 | 1次 |
项目结构
interview-evaluator-mas/ ├── main.py # 入口文件:命令行参数解析,启动评估流水线 ├── orchestrator.py # 主编排器:串行+并行流程控制,HTML报告生成 ├── config.py # 全局配置:LLM后端/MinerU/搜索/评分阈值 │ ├── core/ # 核心基础设施层 │ ├── __init__.py │ ├── llm_client.py # LLM客户端:千帆+Ollama双后端路由,重试/降级/统计 │ ├── search_client.py # 百度AI搜索客户端:单条/批量搜索,结果文本提取 │ ├── mineru_parser.py # MinerU PDF解析:上传→轮询→下载ZIP→提取Markdown │ ├── docx_parser.py # Word文档解析:python-docx提取段落+表格文本 │ └── document_parser.py # 统一文档解析入口:按扩展名自动路由(.pdf/.docx/.md/.txt) │ ├── agents/ # Agent业务逻辑层 │ ├── __init__.py │ ├── resume_parser_agent.py # 简历解析Agent:PDF/DOCX→文本→LLM→结构化JSON │ ├── job_matcher_agent.py # 岗位匹配Agent:6维度加权评分,0-100分匹配度 │ ├── tech_evaluator_agent.py # 技术能力评估Agent:深度/复杂度/广度/成长/影响力 │ ├── softskill_evaluator_agent.py # 软技能评估Agent:5维度+百度搜索验证公开信息 │ └── interview_decider_agent.py # 面试决策Agent:综合4维评分+STAR面试问题清单 │ ├── prompt/ # 提示词文件(各Agent独立markdown,运行时动态加载) │ ├── resume_parser.md # 简历解析提示词:7维度提取规则+JSON输出格式 │ ├── job_matcher.md # 岗位匹配提示词:6维度评分规则+量化标准 │ ├── tech_evaluator.md # 技术评估提示词:深度推断方法+技能分析框架 │ ├── softskill_evaluator.md # 软技能评估提示词:行为推断+搜索结果甄别规则 │ └── interview_decider.md # 面试决策提示词:加权公式+4级推荐+问题设计原则 │ ├── data/ # 输入数据目录 │ └── jd_llm_engineer.md # 示例岗位描述(高级大模型算法工程师) │ └── output/ # 评估报告输出目录(HTML格式,自动按时间戳命名)
文件职责速查
| 文件 | 核心职责 | 关键依赖 |
|---|
main.py | 命令行入口,参数解析+格式校验,流水线启动 | orchestrator, document_parser |
orchestrator.py | 4阶段编排(串行→串行→并行→串行),JD多格式加载,HTML报告渲染 | agents/*, core/* |
config.py | 环境变量加载,API密钥,评分阈值 | os |
core/llm_client.py | 千帆/Ollama双后端路由,重试2次,JSON解析工具 | requests, config |
core/search_client.py | 百度AI搜索(baidu_search_v2),批量搜索+限流 | requests, config |
core/mineru_parser.py | MinerU精准解析API,异步上传+轮询+ZIP提取 | requests, config |
core/docx_parser.py | Word文档解析,python-docx提取段落+表格文本 | python-docx |
core/document_parser.py | 统一文档解析入口,按扩展名路由(.pdf/.docx/.md/.txt) | mineru_parser, docx_parser |
agents/resume_parser_agent.py | PDF/DOCX→文本→结构化JSON(7维度) | document_parser, llm_client |
agents/job_matcher_agent.py | 简历+JD→6维度匹配评分 | llm_client |
agents/tech_evaluator_agent.py | 技术深度/项目复杂度/成长轨迹评估 | llm_client |
agents/softskill_evaluator_agent.py | 软技能评估+智能搜索词拆分+百度搜索 | llm_client, search_client |
agents/interview_decider_agent.py | 综合加权评分+4级推荐+面试问题清单生成 | llm_client |
快速开始
环境准备
# 安装依赖 pip install requests python-docx # (可选)Ollama本地运行 ollama serve ollama pull qwen2.5:7b
运行方式
# 方式1: PDF简历 + Markdown JD python main.py 简历.pdf data/jd_llm_engineer.md # 方式2: Word简历 + Word JD python main.py 简历.docx 岗位描述.docx # 方式3: Word简历 + PDF JD python main.py 简历.docx jd.pdf # 方式4: 使用Ollama后端 LLM_PROVIDER=ollama python main.py 简历.pdf data/jd_llm_engineer.md # 方式5: 无参数运行(使用data目录中的示例文件) python main.py
支持的文件格式:
- 简历:
.pdf(MinerU解析) /.docx(python-docx解析) - JD:
.pdf/.docx/.md/.txt
配置说明
通过环境变量或修改config.py进行配置:
| 配置项 | 环境变量 | 默认值 | 说明 |
|---|
| LLM后端 | LLM_PROVIDER | qianfan | qianfan或ollama |
| 千帆API Key | QIANFAN_API_KEY | (内置) | bce-v3格式密钥 |
| 千帆模型 | QIANFAN_MODEL | ernie-x1-turbo-32k | 千帆模型名称 |
| Ollama地址 | OLLAMA_BASE_URL | http://localhost:11434 | Ollama服务地址 |
| Ollama模型 | OLLAMA_MODEL | qwen2.5:7b | 本地模型名称 |
| MinerU Token | MINERU_TOKEN | (内置) | MinerU API Token |
| 搜索API Key | BAIDU_SEARCH_API_KEY | (内置) | 百度AI搜索密钥 |
评估维度详情
岗位匹配 (权重30%)
| 维度 | 权重 | 说明 |
|---|
| 学历匹配 | 15% | 学历层次与JD要求是否一致 |
| 专业匹配 | 10% | 专业方向与岗位需求的相关性 |
| 经验年限 | 20% | 工作年限是否达到JD要求 |
| 技能覆盖 | 25% | 候选人技能与JD要求的重叠度 |
| 行业背景 | 15% | 是否有同行业/同领域的工作经验 |
| 职级匹配 | 15% | 当前职级与目标岗位的层级适配性 |
技术能力 (权重30%)
| 维度 | 权重 | 说明 |
|---|
| 技术栈深度 | 30% | 核心技术的掌握深度 |
| 项目复杂度 | 25% | 参与项目的规模、难度、技术挑战 |
| 技术广度 | 15% | 技术视野是否开阔 |
| 成长轨迹 | 15% | 技术能力随时间的成长趋势 |
| 技术影响力 | 15% | 开源贡献、技术文章、专利等 |
软技能 (权重20%)
| 维度 | 权重 | 说明 |
|---|
| 沟通表达 | 25% | 信息传递的清晰度、逻辑性和说服力 |
| 团队协作 | 25% | 在团队中的合作方式和角色定位 |
| 领导力 | 20% | 影响他人、推动事情前进的能力 |
| 抗压韧性 | 15% | 面对困难和挑战时的应对方式 |
| 学习能力 | 15% | 快速掌握新知识、适应新环境的能力 |
文化匹配 (权重20%)
| 维度 | 权重 | 说明 |
|---|
| 价值观契合 | 25% | 候选人价值取向与企业文化的一致性 |
| 工作风格适配 | 25% | 工作节奏、方式的匹配程度 |
| 团队氛围匹配 | 20% | 与目标团队协作风格的适配性 |
| 长期稳定性 | 15% | 候选人在目标企业长期发展的可能性 |
| 发展潜力 | 15% | 在目标企业文化中的成长空间 |
面试建议等级
| 综合评分 | 建议等级 | 说明 |
|---|
| 85-100 | ★★★ 强烈推荐 | 高匹配度,建议尽快安排面试 |
| 70-84 | ★★ 推荐 | 较好匹配,建议正常安排面试 |
| 55-69 | ★ 谨慎推荐 | 部分维度存在短板,需重点验证 |
| 0-54 | ✗ 不推荐 | 匹配度不足,建议暂不安排面试 |