基于Flask和AI的智能简历分析系统开发全流程
先看效果!!
1. 项目简介
随着企业招聘需求的不断增加,HR每天需要处理大量简历,如何高效筛选匹配度高的候选人成为一大挑战。本文介绍一个基于Flask框架和AI技术的智能简历分析系统,能够自动评估简历与职位要求的匹配度,大幅提高招聘效率。
2. 项目功能
2.1 核心功能
- 简历批量上传:支持PDF、DOCX、TXT格式及ZIP压缩包
- 职位要求设置:可自定义职位描述和要求
- 智能匹配分析:利用AI模型评估简历匹配度
- 可视化结果展示:图表和排名展示候选人匹配情况
- 报告导出:支持导出详细分析报告和Excel排名表
2.2 技术亮点
- 多线程并发处理大量简历
- 智能重试机制保证分析可靠性
- 响应式前端界面适配多种设备
- 完善的错误处理和日志记录
3. 技术架构
3.1 前端技术
<!-- 主要前端技术 -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet">
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css" rel="stylesheet">
<link href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/4.1.1/animate.min.css">
<script src="https://unpkg.com/dropzone@5/dist/min/dropzone.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
- Bootstrap 5:构建响应式界面
- Font Awesome:图标库
- Animate.css:动画效果
- Dropzone.js:文件上传组件
- Chart.js:数据可视化
3.2 后端技术
# 主要后端技术栈
from flask import Flask, render_template, request, jsonify, send_file
from flask_dropzone import Dropzone
import pdfplumber
from docx import Document
from concurrent.futures import ThreadPoolExecutor
import requests
- Flask:轻量级Web框架
- pdfplumber:PDF解析库
- python-docx:Word文档处理
- ThreadPoolExecutor:多线程处理
- Requests:HTTP请求库
4. 核心代码解析
4.1 简历解析模块
def parse_resume(file_path):"""解析多种格式的简历文件"""try:if file_path.endswith('.pdf'):with pdfplumber.open(file_path) as pdf:text = "\n".join([page.extract_text() or "" for page in pdf.pages])elif file_path.endswith('.docx'):doc = Document(file_path)text = "\n".join([para.text for para in doc.paragraphs])elif file_path.endswith('.txt'):encodings = ['utf-8', 'gbk', 'gb2312', 'iso-8859-1']for encoding in encodings:try:with open(file_path, 'r', encoding=encoding) as f:text = f.read()breakexcept UnicodeDecodeError:continue# 文本清洗处理text = re.sub(r'\s+', ' ', text)return text.strip()except Exception as e:logger.error(f"解析失败 [{os.path.basename(file_path)}]: {str(e)}")return None
4.2 AI分析模块
def call_gpt_api(prompt, attempt=1):"""调用AI分析API,带重试机制"""headers = {"Authorization": f"Bearer {API_KEY}","Content-Type": "application/json"}data = {"model": "deepseek-v3-250324","messages": [{"role": "system", "content": "简历分析专家,专注评估候选人与职位要求的匹配度"},{"role": "user", "content": prompt}],"temperature": 0.2}try:response = requests.post(API_URL, headers=headers, json=data, timeout=REQUEST_TIMEOUT)response.raise_for_status()return {"status": "success","result": response.json()['choices'][0]['message']['content'],"attempt": attempt}except Exception as e:logger.error(f"API请求错误 (尝试 {attempt}/{MAX_RETRIES}): {str(e)}")return {"status": "retry", "error": str(e), "attempt": attempt}
4.3 多线程处理
def process_resumes(resume_files, position_requirements):"""多线程处理简历分析"""results = []with ThreadPoolExecutor(max_workers=MAX_WORKERS) as executor:futures = {executor.submit(analyze_resume, path, position_requirements): path for path in resume_files}for future in as_completed(futures):path = futures[future]try:result = future.result()with FILE_LOCK: # 线程锁保证数据安全results.append(result)except Exception as e:logger.error(f"分析过程出错: {str(e)}")return results
5. 前端交互设计
系统采用现代化UI设计,关键界面包括:
<div class="upload-area"><div id="upload-button" class="upload-btn"><i class="fas fa-plus"></i></div><p class="upload-text">点击<b>+</b>按钮或将文件拖拽到此处上传</p>
</div>
<div class="chart-container"><canvas id="matchChart"></canvas>
</div><!-- 排名卡片 -->
<div class="row g-4 mb-5">{% for resume in top_resumes %}<div class="col-md-4 col-lg-3"><div class="position-relative"><div class="rank-badge top-3-badge rank-{{ loop.index }}">{{ loop.index }}</div><div class="card result-card h-100"><!-- 卡片内容 --></div></div></div>{% endfor %}
</div>
6. 部署与配置
系统使用Flask内置的配置管理系统:
class Config:SECRET_KEY = os.environ.get('SECRET_KEY') DEBUG = FalseUPLOADED_PATH = os.path.join(os.path.dirname(__file__), 'uploads')MAX_CONTENT_LENGTH = 50 * 1024 * 1024 # 50MB# API配置API_URL = "ht"API_KEY = os.environ.get('API_KEY')
7. 项目收获与改进方向
通过开发这个项目
- Flask框架的深入理解
- 文件处理的多格式兼容经验
- 多线程编程实践
- API集成与错误处理技巧
未来改进方向:
- 增加更详细的候选人技能标签
- 实现自动生成面试问题功能
- 添加多用户和权限管理系统
- 优化AI提示词提高分析准确率