基于llm与OCR技术开发的简历生成器,可通过多个招聘岗位页面进行ocr识别,以聚合内容进行信息重定向, 截图招聘岗位描述,自动识别、解析、匹配你的画像,一键生成专业 PDF 简历。
English version: README.md
截图(岗位描述) → OCR识别 → LLM解析JD → 匹配用户画像 → 审阅修改 → PDF输出
批量模式:多份 JD 截图自动聚合共性要求,生成统一简历模板。
截图文件夹 → 岗位类型确认 → 批量OCR → LLM聚合 → 画像匹配 → 审阅 → PDF
- 双端支持 — CLI 命令行 + PySide6 图形界面,各取所需
- 单张/批量混用 — 支持单张截图、整文件夹批量,一键切换
- 多 LLM 后端 — DeepSeek / OpenAI / Qwen / Kimi / Claude / 自定义 OpenAI 兼容端点
- 用户画像持久化 — 填写一次,反复复用;支持跨岗位技能迁移 (
other_experiences) - 聚合模板缓存 — 批量模式下,仅增量解析新截图,复用已有聚合结果
- 生成前审阅 — LLM 输出可预览、修改后再导出 PDF
- 中文专业排版 — Jinja2 模板 + WeasyPrint 渲染,字体、行距、对齐一应俱全
python -m venv .venv
.venv\Scripts\activate # Windows
# source .venv/bin/activate # macOS / Linux
pip install -r requirements.txtWeasyPrint 在 Windows 上依赖 GTK3 原生库:
winget install tschoonj.GTKForWindows程序运行时自动检测 C:\Program Files\GTK3-Runtime Win64\bin,无需手动配置 PATH。
Linux / macOS 通过系统包管理器安装
pango即可。
复制示例配置并填入 API Key:
copy config.example.yaml config.yaml # Windows
# cp config.example.yaml config.yaml # macOS / Linux编辑 config.yaml:
llm:
provider: deepseek # deepseek | openai | qwen | kimi | anthropic | custom
api_key: "sk-xxxxxxxx" # 替换为真实 Key
api_base: "https://api.deepseek.com/v1"
model: "deepseek-chat"
temperature: 0.7
max_tokens: 4096
ocr:
lang: "ch_sim" # 中文识别
gpu: false # 设为 true 启用 GPU(需 CUDA)
output:
dir: "output"
profile:
dir: "profiles"
job_types:
dir: "job_types"更换模型只需修改 provider,程序自动匹配预设的 api_base / model(见 presets 节)。选用 custom 时填入兼容 OpenAI 协议的私有端点。
python cli.py按提示输入截图路径,程序依次完成 OCR → 解析 JD → 画像匹配 → 审阅 → 生成 PDF。
将多张岗位截图放入同一文件夹,运行:
python cli.py输入文件夹路径,程序自动:
- 识别所有图片
- 批量 OCR + LLM 解析 JD
- 聚合共性要求生成模板
- 检查 / 增量更新缓存
- 匹配用户画像,输出 PDF
二次处理已有岗位类型时,仅解析新增截图并重新聚合,大幅节省 API 调用。
python main.py启动后为 4 标签页 窗口:
- 填写 API Key,点击 测试连接 验证可用性
- 切换 LLM 提供商(DeepSeek / OpenAI / Qwen / Kimi / Claude)
- 连接失败时显示详细错误追踪(DNS、超时、异常堆栈)
- 填写基本信息:姓名、目标岗位、联系方式
- 逐条添加专业技能(带标签分类)与经历描述
- 支持
other_experiences跨岗位技能迁移 - 画像自动持久化到
profiles/,下次启动自动加载
- 拖拽截图到窗口或点击选择文件
- 自动 OCR 识别 → 显示识别原文 → LLM 解析出结构化 JD
- 单张截图:自动设为模板,直接 生成简历
- 多张截图:批量解析后 聚合分析,提取共性要求
- 支持随时删除/重新排序截图
- 预览 LLM 生成的完整简历内容(Markdown 渲染)
- 在线编辑、微调后确认
- 一键导出 中文专业 PDF(Jinja2 + WeasyPrint)
┌──────────┐ ┌──────────┐ ┌──────────────┐ ┌──────────┐
│ ① 配置 │ → │ ② 画像 │ → │ ③ 岗位处理 │ → │ ④ 预览输出 │
│ API测试 │ │ 填写资料 │ │ 截图→OCR→解析 │ │ 审阅→PDF │
└──────────┘ └──────────┘ └──────────────┘ └──────────┘
ishowJob/
├── main.py # GUI 启动入口
├── cli.py # CLI 启动入口
├── config.example.yaml # 配置模板(复制为 config.yaml 使用)
├── requirements.txt # Python 依赖
├── core/
│ ├── ocr.py # EasyOCR 封装
│ ├── profile.py # 用户画像管理与序列化
│ ├── jd_parser.py # LLM 岗位描述解析
│ ├── matcher.py # LLM 画像匹配与简历生成
│ ├── batch_analyzer.py # 批量 JD 聚合与缓存
│ └── resume_generator.py # Jinja2 渲染 + WeasyPrint PDF
├── providers/
│ ├── base.py # LLM Provider 抽象基类
│ ├── openai_compat.py # OpenAI 兼容协议适配
│ ├── anthropic.py # Anthropic 专用适配
│ └── __init__.py # Provider 工厂(自动路由)
├── gui/
│ ├── app.py # GUI 协调器(桥接核心逻辑)
│ ├── main_window.py # 主窗口框架(4 标签页)
│ ├── workers.py # 后台线程管理(OCR/LLM/PDF)
│ ├── i18n.py # 国际化字典
│ ├── tabs/
│ │ ├── config_tab.py # ① 配置标签页
│ │ ├── profile_tab.py # ② 画像标签页
│ │ ├── processing_tab.py # ③ 岗位处理标签页
│ │ └── preview_tab.py # ④ 预览输出标签页
│ └── widgets/
│ ├── drop_zone.py # 拖拽截图组件
│ ├── jd_table.py # JD 解析结果表格
│ ├── profile_editor.py # 画像编辑表单
│ └── tag_editor.py # 关键词标签编辑器
├── templates/
│ ├── resume.html # 简历 HTML 模板
│ └── resume.css # 简历排版样式
└── screenshots/ # 截图素材(已 gitignore)
Q: 首次运行卡住了?
EasyOCR 首次使用会自动下载模型文件(约 500MB),请耐心等待。后续启动直接加载本地缓存。
Q: 中文路径截图无法识别?
已内置 OpenCV 路径编码绕过,支持中文文件名和路径。
Q: PDF 生成报 GTK 相关错误?
Windows 用户请确保安装了 GTK3 Runtime(见快速开始第 2 步)。Linux/macOS 使用系统包管理器安装 pango。
Q: 推荐用哪个 LLM?
DeepSeek API 性价比最高,适合批量处理。对输出质量要求更高的场景可切换至 Claude 或 GPT-4o。
Q: 配置文件找不到?
config.yaml 不会在仓库中(含 API Key),需从 config.example.yaml 复制并填入自己的 Key。