基于 Streamlit + LangChain OpenAI + Playwright/Pillow + HTML/Markdown 渲染 的智能简历生成器,支持自动解析、润色、预览和导出。
- 初始状态
- 投入你的材料
- 优化后
- 简历编辑:左侧 Sidebar 编辑基础信息、教育经历、技能、项目经历、工作经历、校园经历、自我评价;支持模块新增、删除、排序、显示/隐藏和标题编辑
- AI 优化:输入 JD 可针对性润色,不填 JD 也能通用优化;优化结果直接回写到编辑面板
- 本地兜底:LLM 不可用(缺 Key、超时、输出格式错误)时自动生成本地草稿,保证流程可演示
- 预览与导出:A4 风格 HTML 预览,支持 3 套模板(现代蓝 / 雅致灰 / 翡翠专业)、字号、边距、行高、紧凑布局等样式调节;支持 Markdown 与 PDF 导出
- 自动保存:简历数据保存到本地
data/resume_data.json,支持撤销上一次 AI 优化
直接拉取已构建的镜像运行,一条命令搞定:
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 resumemakergit clone https://github.com/lildengzi/ResumeMaker.git
cd ResumeMaker
docker compose up -d打开 http://localhost:8501。
在应用侧边栏中配置你的模型:
API KeyBase URLModel
应用会将这些设置保存在 ./data/config.json。data/ 目录被 Git 忽略,因此你上传的材料和模型凭证不会被提交。
环境要求: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.pyWindows 的激活命令是
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
侧边栏配置仍然是启动应用后修改模型设置的正常方式。
- 启动应用
- 在左侧填写基础信息、教育经历、技能和项目经历
- 可选填写岗位描述 JD
- 点击"智能生成简历"
- 在右侧查看 A4 风格预览
- 按需导出 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 整理输入 → 简历撰写 Agent 调用 LLM 或本地兜底 → 返回最终简历与工作流日志。workflow/graph.py 的命名是为了保留未来升级空间,但当前没有引入真正的 LangGraph。
API Key 缺失、模型输出格式错误、接口失败都很常见。项目需要保证"失败时仍能演示基本流程",所以保留了本地兜底生成逻辑。
当前 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。




