JobPilot 是一个集成简历解析、智能优化、自动投递和进度管理的完整求职解决方案。通过整合四大核心功能模块,为求职者提供从简历准备到投递跟踪的全流程智能化支持。
- 支持 PDF、DOCX、TXT 格式简历上传
- 智能提取结构化信息(基本信息、教育背景、工作经历、技能等)
- 使用阿里云千问大模型进行语义理解和信息抽取
- 统一的 JSON 数据格式,便于后续处理
- 基于职位描述(JD)分析简历匹配度
- 使用向量余弦相似度计算经历与JD的相关性
- 自动重排经历顺序,突出最相关内容
- 使用大模型优化经历描述,强化关键成果
- 一键生成针对性优化简历PDF
- 支持Boss直聘、猎聘等主流招聘平台
- 使用 Playwright 实现浏览器自动化
- 智能搜索和筛选职位
- 自动填写表单和投递简历
- 支持黑名单过滤和自定义配置
- 集中记录所有投递信息
- 多状态跟踪(已申请、笔试、面试、offer等)
- 实时更新投递状态
- 统计分析投递数据
- 直观的时间线展示
- Flask: Web框架
- SQLite: 轻量级数据库
- OpenAI SDK: 调用阿里云千问大模型
- Playwright: 浏览器自动化
- pdfminer/python-docx: 文档解析
- 原生 HTML/CSS/JavaScript: 简洁高效
- 响应式设计: 适配不同屏幕尺寸
- SSE (Server-Sent Events): 实时数据推送
- 阿里云千问 (qwen-plus): 简历解析和信息抽取
- 阿里云千问 (qwen3-coder-flash): 简历优化和内容生成
- text-embedding-v3: 文本向量化和相似度计算
JobPilot/
├── backend/ # Flask 后端
│ ├── app.py # 主应用入口
│ ├── modules/ # 功能模块
│ │ ├── resume_parser/ # Func1: 简历解析
│ │ ├── resume_optimizer/ # Func3: 简历优化
│ │ ├── auto_apply/ # Func2: 自动投递
│ │ └── status_tracking/ # Func4: 进度管理
│ ├── data/ # 数据存储
│ │ ├── resumes/ # 上传的简历
│ │ ├── generated/ # 生成的简历
│ │ └── database/ # SQLite数据库
│ ├── requirements.txt # Python依赖
│ ├── start.sh # 启动脚本
│ └── README.md # 后端说明
├── frontend/ # 前端静态文件
│ ├── index.html # 主页面
│ ├── css/
│ │ └── style.css # 样式文件
│ └── js/
│ └── app.js # 前端逻辑
└── README.md
- Python 3.8+
- 现代浏览器(Chrome、Firefox、Safari等)
- (可选)Java 21+ - 用于自动投递功能
cd project_eng/backendchmod +x start.sh
./start.sh启动脚本会自动完成以下操作:
- 创建Python虚拟环境
- 安装所有依赖包
- 安装Playwright浏览器
- 启动Flask服务
# 创建虚拟环境
python3 -m venv venv
source venv/bin/activate # Linux/Mac
# 或 venv\Scripts\activate # Windows
# 安装依赖
pip install -r requirements.txt
# 安装Playwright浏览器
playwright install chromium
# 启动应用
python app.py打开浏览器访问:http://localhost:5000
1. 简历解析
↓ 上传简历(PDF/DOCX/TXT)
↓ 查看解析结果
↓
2. 简历优化
↓ 选择简历
↓ 粘贴目标JD
↓ 分析匹配度
↓ 生成优化简历
↓
3. 自动投递
↓ 配置投递参数
↓ 启动自动投递
↓ 监控投递进度
↓
4. 进度管理
↓ 查看投递记录
↓ 更新状态
↓ 统计分析
- 切换到"简历解析"标签
- 点击"选择文件"上传简历
- 点击"上传并解析"
- 查看解析后的结构化信息
- 点击已解析的简历可查看详情
- 切换到"简历优化"标签
- 从下拉菜单选择已上传的简历
- 在文本框粘贴目标职位的JD
- 点击"分析匹配度"查看经历相关性
- 点击"生成优化简历"创建定制化简历
- 点击"下载PDF简历"获取文件
- 切换到"自动投递"标签
- 阅读使用须知
- 选择要投递的简历
- 选择投递平台(Boss直聘/猎聘)
- 配置搜索关键词和目标城市
- 点击"启动投递"
- 首次使用需在弹出的浏览器中登录
- 系统将自动搜索和投递职位
- 遇到验证码时手动处理
- 点击"停止投递"结束任务
- 切换到"进度管理"标签
- 点击"+ 添加新投递"手动添加记录
- 填写公司、职位等信息
- 查看所有投递记录和时间线
- 点击"刷新"更新最新状态
- 查看统计信息
POST /upload- 上传并解析简历GET /parse/:id- 获取解析结果GET /list- 列出所有简历DELETE /delete/:id- 删除简历
POST /analyze- 分析JD匹配度POST /generate- 生成优化简历GET /download/:id- 下载简历PDF
GET /jobs- 获取所有投递记录POST /job- 创建投递记录PUT /job/:id- 更新投递状态GET /stats- 获取统计信息GET /events- SSE实时推送
POST /start- 启动投递任务POST /stop- 停止投递任务GET /progress- 获取投递进度
用户上传简历
↓
【Func1 简历解析】
├─ 文档解析 (PDF/DOCX/TXT)
├─ LLM信息抽取
└─ JSON数据存储
↓
【Func3 简历优化】
├─ 读取简历JSON
├─ 输入JD文本
├─ 向量相似度计算
├─ 经历重排序
├─ LLM优化描述
└─ 生成PDF简历
↓
【Func2 自动投递】
├─ 读取优化后简历
├─ Playwright自动化
├─ 投递到招聘平台
└─ 记录投递结果
↓
【Func4 进度管理】
├─ SQLite数据库
├─ 状态更新
├─ SSE实时推送
└─ 可视化展示
- 项目内置了阿里云千问API密钥,仅供测试使用
- 生产环境请替换为自己的密钥
- 密钥位置:
backend/modules/resume_parser/parser.pybackend/modules/resume_optimizer/optimizer.py
- 需要Java 21+运行环境
- 首次使用需要手动登录招聘平台
- 建议在投递前先优化简历
- 遇到验证码需要手动处理
- 投递过程中不要关闭浏览器窗口
- 所有简历数据存储在本地
- 不会上传到第三方服务器
- LLM调用使用阿里云千问API
- 建议定期备份data目录
- 简历优化功能较慢,需要等待1-2分钟
- 自动投递速度取决于网络和平台响应
- 建议不要同时处理大量简历
# 手动安装浏览器
playwright install chromium# 确保已安装Playwright
pip install playwright
playwright install chromium- 检查网络连接
- 确认API密钥有效
- 查看阿里云账户余额
- 确保已安装Java 21+
- 检查Func2目录是否存在
- 查看后端日志输出
- 在
backend/modules/创建新模块 - 实现Flask蓝图
- 在
app.py中注册蓝图 - 更新前端界面和逻辑
- 编辑
optimizer.py中的模型配置 - 支持切换到其他OpenAI兼容API
- 修改
frontend/css/style.css - 样式采用响应式设计
本项目整合了以下原有功能模块:
- Func1_Parser: 简历解析模块
- Func2_AutoApplication: 自动投递模块(Spring Boot + Playwright)
- Func3_Optimizer: 简历优化模块(LangChain + LLM)
- Func4_StatusTracking: 进度管理模块(Flask + CSV)
整合后的版本:
- 统一使用Flask作为后端框架
- 简化了Func2的调用方式
- 优化了Func3的处理流程
- 将Func4的CSV存储改为SQLite
- 提供了统一的Web界面
本项目仅供学习和研究使用。
如有问题或建议,请联系项目维护者。
JobPilot - 让求职更智能,让机会更精准!