Skip to content

Repository files navigation

ResumeMaker

ResumeMaker logo

Python 3.10+ Streamlit LangChain Playwright
GitHub stars Docker Build License

基于 Streamlit + LangChain OpenAI + Playwright/Pillow + HTML/Markdown 渲染 的智能简历生成器,支持自动解析、润色、预览和导出。

ResumeMaker 产品预览

  • 初始状态

alt text

  • 投入你的材料

alt text

  • 优化后

alt text

功能特性

  • 简历编辑:左侧 Sidebar 编辑基础信息、教育经历、技能、项目经历、工作经历、校园经历、自我评价;支持模块新增、删除、排序、显示/隐藏和标题编辑
  • AI 优化:输入 JD 可针对性润色,不填 JD 也能通用优化;优化结果直接回写到编辑面板
  • 本地兜底:LLM 不可用(缺 Key、超时、输出格式错误)时自动生成本地草稿,保证流程可演示
  • 预览与导出:A4 风格 HTML 预览,支持 3 套模板(现代蓝 / 雅致灰 / 翡翠专业)、字号、边距、行高、紧凑布局等样式调节;支持 Markdown 与 PDF 导出
  • 自动保存:简历数据保存到本地 data/resume_data.json,支持撤销上一次 AI 优化

快速开始

方式一:使用 Docker(最简单,无需 clone)

直接拉取已构建的镜像运行,一条命令搞定:

docker run -d -p 8501:8501 \
  -e RESUMEMAKER_CONFIG_PATH=/app/ResumeMaker/data/config.json \
  -v resume_data:/app/ResumeMaker/data \
  --name resumemaker \
  ghcr.io/lildengzi/resumemaker:latest

打开 http://localhost:8501

停止和删除容器:

docker stop resumemaker && docker rm resumemaker

方式二:使用 Docker + 源码(可二次开发)

git clone https://github.com/lildengzi/ResumeMaker.git
cd ResumeMaker
docker compose up -d

打开 http://localhost:8501

在应用侧边栏中配置你的模型:

  • API Key
  • Base URL
  • Model

应用会将这些设置保存在 ./data/config.jsondata/ 目录被 Git 忽略,因此你上传的材料和模型凭证不会被提交。

方式三:本地运行(venv + pip,无需 Docker)

环境要求:Python 3.10+,Windows / macOS / Linux,可用的 OpenAI 兼容 API Key。

git clone https://github.com/lildengzi/ResumeMaker.git
cd ResumeMaker
python3 -m venv ResumeMaker/.venv
source ResumeMaker/.venv/bin/activate   # Windows 用 ResumeMaker\.venv\Scripts\activate
pip install -r ResumeMaker/requirements.txt
python -m playwright install chromium    # PDF 导出需要
streamlit run ResumeMaker/app.py

Windows 的激活命令是 ResumeMaker\.venv\Scripts\activate,fish 终端用 source ResumeMaker/.venv/bin/activate.fish

可选环境文件

如果你更喜欢使用环境变量,可以复制示例文件:

cp .env.example .env

填写:

OPENAI_API_KEY=your_api_key_here
OPENAI_BASE_URL=
LLM_MODEL=gpt-4o-mini
LLM_TEMPERATURE=0.2

说明:

  • OPENAI_API_KEY:调用 LLM 时必填
  • OPENAI_BASE_URL:可选,用于兼容第三方 OpenAI 接口
  • LLM_MODEL:可选
  • LLM_TEMPERATURE:可选
  • 启动时会自动加载 .env

侧边栏配置仍然是启动应用后修改模型设置的正常方式。

使用流程

  1. 启动应用
  2. 在左侧填写基础信息、教育经历、技能和项目经历
  3. 可选填写岗位描述 JD
  4. 点击"智能生成简历"
  5. 在右侧查看 A4 风格预览
  6. 按需导出 Markdown 或 PDF

项目结构

app.py                      # Streamlit 应用入口,负责页面编排与状态管理
config.py                   # 配置加载与环境变量合并
config.json                 # 默认配置(LLM、预览、提示词、默认文案、存储路径等)
smart_resume_core.py        # 兼容入口层,转发 core/ 中的公共能力

agents/
  base_agent.py             # Agent 基类
  factory.py                # Agent 工厂
  info_collector.py         # 信息收集 Agent,当前主要做输入整理
  resume_writer.py          # 调用 LLM 生成优化结果的 Agent

workflow/
  graph.py                  # 当前是顺序工作流编排,不是真 LangGraph

core/
  assets.py                 # 头像/资源读取与 Base64 处理
  data.py                   # 默认数据、数据归一化、读写、合并、旧结构兼容
  llm.py                    # LLM 创建与 JSON 提取
  markdown.py               # Markdown 内容生成
  service.py                # 本地兜底与工作流入口封装

renderers/
  html_renderer.py          # HTML 简历预览渲染
  markdown_renderer.py      # Markdown 导出入口
  pdf_renderer.py           # PDF 导出入口:HTML 预览 -> Playwright 截图 -> Pillow 转 PDF

ui/
  sidebar.py                # 左侧编辑区、样式区、JD 区
  preview.py                # 右侧预览区

tools/
  permission.py             # 工作区路径权限控制
  file_tools.py             # 上传文件扫描与基础解析
  web_tool.py               # 基础网页文本抓取接口
  ocr_tool.py               # OCR 占位接口

data/
  resume_data.json          # 本地保存的简历数据
  uploads/                  # 上传文件目录

tests/                      # 测试用例

关键设计取舍

为什么有 Agent / Workflow,但当前仍然简单?

这是为扩展预留结构的学习项目。当前工作流本质上是顺序执行:信息收集 Agent 整理输入 → 简历撰写 Agent 调用 LLM 或本地兜底 → 返回最终简历与工作流日志。workflow/graph.py 的命名是为了保留未来升级空间,但当前没有引入真正的 LangGraph。

为什么既有 LLM,又有本地兜底?

API Key 缺失、模型输出格式错误、接口失败都很常见。项目需要保证"失败时仍能演示基本流程",所以保留了本地兜底生成逻辑。

为什么 PDF 不是可搜索文本 PDF?

当前 PDF 导出链路是:

HTML 预览 -> Playwright 截图 PNG -> Pillow 转 PDF

优点是视觉更接近右侧预览;缺点是 PDF 偏图片化,不利于复制、搜索。后续如果更重视文本可选中和可搜索能力,可以改为 Playwright 原生 page.pdf() 或其他 HTML-to-PDF 方案。

当前未完整实现的能力

以下能力目前不是完整功能,而是占位或后续扩展方向:

  • OCR 识别 JD 图片:当前主要是 UI 与工具入口占位,未接入 PaddleOCR / Tesseract
  • URL 抓取:已有基础工具接口,但不是强健的生产级网页正文抽取
  • 旧简历自动解析导入:Markdown / txt 可做基础读取,PDF 解析和结构化合并仍需增强
  • LangGraph 图式工作流:当前是顺序工作流,不是真正的 StateGraph

更新

方式一(Docker 直跑镜像): 拉取新镜像并重建容器

docker pull ghcr.io/lildengzi/resumemaker:latest
docker stop resumemaker && docker rm resumemaker
docker run -d -p 8501:8501 \
  -e RESUMEMAKER_CONFIG_PATH=/app/ResumeMaker/data/config.json \
  -v resume_data:/app/ResumeMaker/data \
  --name resumemaker \
  ghcr.io/lildengzi/resumemaker:latest

方式二(Docker + 源码):

git pull
docker compose up -d --build

方式三(本地 venv + pip):

git pull
source ResumeMaker/.venv/bin/activate    # Windows 用 ResumeMaker\.venv\Scripts\activate
pip install -r ResumeMaker/requirements.txt

注意事项

  • Docker 方式需要 Docker 和 Docker Compose。
  • 本地应用数据存放在 ./data

About

AI-powered resume generator: parse, polish, preview & export. Built with Streamlit + LangChain + Playwright — JD-aware optimization with offline fallback, 3 templates, PDF/Markdown export.

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages