Skip to content

HecreReed/mowan-resume

Repository files navigation

魔丸简历 - AI 简历优化平台

一个 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)

快速开始

1. 克隆并安装依赖

git clone <repo-url>
cd 魔丸简历
pnpm install

2. 环境配置

cp .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"

3. 启动基础设施 (Docker)

docker-compose up -d

这将启动:

  • PostgreSQL (端口 5432)
  • Redis (端口 6379)
  • MinIO (端口 9000,控制台: 9001)

4. 数据库设置

pnpm db:generate
pnpm db:push

5. 启动 PDF 解析服务

cd 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

6. 启动开发服务器

在不同的终端中运行:

# 终端 1: API 服务器
cd apps/api
pnpm dev

# 终端 2: Worker
cd apps/worker
pnpm dev

# 终端 3: Web 前端
cd apps/web
pnpm dev

访问 http://localhost:3000

API 接口

简历相关

方法 接口 描述
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 提供商

AI_PROVIDER 设置为 openaianthropic。系统使用:

  • OpenAI: gpt-4-turbo-preview,启用 JSON 模式
  • Anthropic: claude-3-opus-20240229

PDF 模板

模板定义在 apps/worker/src/processors/generate-pdf.ts。默认模板提供简洁专业的布局。可以通过扩展 generateResumeHtml 函数添加更多模板。

文件大小限制

  • 最大 PDF 大小:10MB(可在 schema 中配置)
  • 支持格式:仅 PDF

开发指南

构建

pnpm build

类型检查

pnpm lint

数据库迁移

# 生成 Prisma 客户端
pnpm db:generate

# 推送 schema 变更(开发环境)
pnpm db:push

# 创建迁移(生产环境)
pnpm db:migrate

部署

Docker 部署

docker-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 标注策略

系统采用"渲染 + 覆盖层"方案:

  1. 使用 pdf.js 渲染原始 PDF
  2. 使用提取的边界框坐标定位标注标记
  3. 修改应用于结构化 JSON,而非直接修改 PDF
  4. 使用模板从修改后的 JSON 生成新 PDF

这种方案确保:

  • 稳定、可预测的输出
  • 不依赖 PDF 编辑库
  • 所有生成的简历格式一致

任务队列设计

长时间运行的任务异步处理:

  • parse_pdf:从上传的 PDF 提取文本和坐标
  • diagnose_resume:运行 AI 分析并生成建议
  • generate_pdf:从优化后的简历 JSON 创建新 PDF

任务会报告进度,可轮询获取状态更新。

许可证

MIT

About

MoWan Resume - AI-powered resume optimization platform with PDF parsing, intelligent diagnosis, and actionable suggestions

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors