一个 AI 驱动的简历优化平台,可以分析你的简历、提供详细反馈,并生成优化版本。
- PDF 上传与解析:上传简历 PDF,精确提取文本及其边界框坐标
- AI 诊断:获得 6 个维度的综合评分,以及具体可执行的优化建议
- 可视化标注:在 PDF 上直接高亮显示建议,支持交互式标记
- 一键应用:单独或批量应用建议,生成优化版本
- PDF 导出:下载专业排版的优化版简历 PDF
- Next.js 14 (App Router)
- TypeScript
- TailwindCSS + 赛博朋克主题
- Framer Motion (动画)
- react-pdf (PDF 渲染)
- Zustand (状态管理)
- TanStack Query (数据请求)
- NestJS + Fastify
- PostgreSQL + Prisma
- Redis + BullMQ (任务队列)
- S3 兼容存储
- Python PDF 解析器 (pdfplumber)
- OpenAI / Anthropic AI 提供商
魔丸简历/
├── apps/
│ ├── web/ # Next.js 前端
│ ├── api/ # NestJS 后端
│ └── worker/ # BullMQ 任务处理器
├── packages/
│ └── shared/ # 共享类型、Schema、工具函数
├── services/
│ └── pdf-parser/ # Python PDF 解析服务
└── docker-compose.yml
- Node.js 18+
- pnpm 8+
- Python 3.9+ (用于 PDF 解析器)
- PostgreSQL 14+
- Redis 7+
- S3 兼容存储 (本地开发可用 MinIO)
git clone <repo-url>
cd 魔丸简历
pnpm installcp .env.example .env
# 编辑 .env 文件,填入你的配置必需的环境变量:
# 数据库
DATABASE_URL="postgresql://postgres:postgres@localhost:5432/mowan_resume"
# Redis
REDIS_URL="redis://localhost:6379"
# S3 存储 (本地使用 MinIO)
S3_ENDPOINT="http://localhost:9000"
S3_ACCESS_KEY="minioadmin"
S3_SECRET_KEY="minioadmin"
S3_BUCKET="mowan-resume"
S3_REGION="us-east-1"
# AI 提供商 (openai 或 anthropic)
AI_PROVIDER="openai"
OPENAI_API_KEY="sk-..."
# 或者
ANTHROPIC_API_KEY="sk-ant-..."
# NextAuth
NEXTAUTH_SECRET="your-secret-key"
NEXTAUTH_URL="http://localhost:3000"
# PDF 解析服务
PDF_PARSER_URL="http://localhost:8000"docker-compose up -d这将启动:
- PostgreSQL (端口 5432)
- Redis (端口 6379)
- MinIO (端口 9000,控制台: 9001)
pnpm db:generate
pnpm db:pushcd services/pdf-parser
python -m venv venv
source venv/bin/activate # Windows 使用 `venv\Scripts\activate`
pip install -r requirements.txt
uvicorn main:app --reload --port 8000在不同的终端中运行:
# 终端 1: API 服务器
cd apps/api
pnpm dev
# 终端 2: Worker
cd apps/worker
pnpm dev
# 终端 3: Web 前端
cd apps/web
pnpm dev| 方法 | 接口 | 描述 |
|---|---|---|
| POST | /api/resumes/upload |
发起简历上传 |
| POST | /api/resumes/:id/confirm-upload |
确认上传完成 |
| GET | /api/resumes/:id/view |
获取简历及标注 |
| POST | /api/resumes/:id/diagnose |
触发 AI 诊断 |
| POST | /api/resumes/:id/apply-suggestions |
应用选中的建议 |
| POST | /api/resumes/:id/generate-pdf |
生成优化版 PDF |
| GET | /api/resumes |
获取用户简历列表 |
| 方法 | 接口 | 描述 |
|---|---|---|
| GET | /api/jobs/:id |
获取任务进度 |
将 AI_PROVIDER 设置为 openai 或 anthropic。系统使用:
- OpenAI:
gpt-4-turbo-preview,启用 JSON 模式 - Anthropic:
claude-3-opus-20240229
模板定义在 apps/worker/src/processors/generate-pdf.ts。默认模板提供简洁专业的布局。可以通过扩展 generateResumeHtml 函数添加更多模板。
- 最大 PDF 大小:10MB(可在 schema 中配置)
- 支持格式:仅 PDF
pnpm buildpnpm lint# 生成 Prisma 客户端
pnpm db:generate
# 推送 schema 变更(开发环境)
pnpm db:push
# 创建迁移(生产环境)
pnpm db:migratedocker-compose -f docker-compose.prod.yml up -d- 设置
NODE_ENV=production - 使用安全的
NEXTAUTH_SECRET - 配置生产数据库 URL
- 使用生产 S3 存储桶(AWS S3 或 Cloudflare R2)
- 为所有服务启用 HTTPS
- 前端:Vercel 或类似平台
- API/Worker:Railway、Render 或 AWS ECS
- 数据库:Neon、Supabase 或 AWS RDS
- Redis:Upstash 或 AWS ElastiCache
- 存储:AWS S3 或 Cloudflare R2
- PDF 解析器:Cloud Run 或 AWS Lambda
系统采用"渲染 + 覆盖层"方案:
- 使用 pdf.js 渲染原始 PDF
- 使用提取的边界框坐标定位标注标记
- 修改应用于结构化 JSON,而非直接修改 PDF
- 使用模板从修改后的 JSON 生成新 PDF
这种方案确保:
- 稳定、可预测的输出
- 不依赖 PDF 编辑库
- 所有生成的简历格式一致
长时间运行的任务异步处理:
parse_pdf:从上传的 PDF 提取文本和坐标diagnose_resume:运行 AI 分析并生成建议generate_pdf:从优化后的简历 JSON 创建新 PDF
任务会报告进度,可轮询获取状态更新。
MIT