12 KiB
12 KiB
Resume Platform · 智能简历平台
基于 Go + Gin + SQLite 的现代化开源简历平台,内置 AI 面试助手、多模板支持、多人简历管理,让你的个人主页脱颖而出。
✨ 功能特性
📄 简历管理
- 多人简历支持 — 每个人独立访问路由(如
/zhangsan、/lisi),支持人员绑定与解绑 - 多模板主题 — 内置 7 种精美模板(modern / classic / fresh / minimalist / professional / tech / project)
- 实时编辑 — 所见即所得的编辑体验,自动保存防止丢失
- 访问密码 — 支持为简历设置独立访问密码,保护隐私
- 数据脱敏 — 公开展示时自动脱敏手机号、邮箱等敏感信息
🤖 AI 智能面试
- 智能出题 — 基于简历内容或关键词自动生成面试题,支持选择题、填空题、简答题、算法题
- 多 AI 提供商 — 接入 DeepSeek / 豆包 / 讯飞星火 / 通义千问,自由切换
- 关键词驱动 — 智能提取简历技能作为关键词,支持别名扩展,每次生成随机不重复
- 答题记录 — 完整记录每次答题情况,支持查看历史、重练错题
- 收藏 & 错题本 — 一键收藏好题,错题自动入库,针对性复习
🎨 作品集展示
- 独立作品集页 — 每个用户拥有专属作品集展示页面
- 项目关联 — 支持从简历项目中导入,也可独立创建
- 分类筛选 — 按技术栈、类型快速筛选项目
- 首页精选 — 可设置首页展示的精选项目
🛡️ 安全保障
- 后台隐藏路径 — 自定义管理后台 URL,降低被探测风险
- 登录验证码 — 图形验证码防止机器人暴力破解
- 登录限流 — 基于 IP 的登录次数限制,超出自动锁定
- AES 加密 — 数据库支持 AES-GCM 加密存储,敏感数据更安全
- PBKDF2 密钥派生 — 使用 PBKDF2-SHA256 派生加密密钥
📊 管理后台
- 仪表盘 — 数据总览,快速了解平台运行状态
- 用户管理 — 完整的用户 CRUD,支持状态管理
- 简历管理 — 统一管理所有简历,支持绑定/解绑人员
- 答题管理 — 查看用户答题记录、学习进度
- 菜单管理 — 自定义后台导航菜单
- 系统设置 — 站点名称、Logo、SEO 等配置可视化管理
- 全局搜索 — 一键搜索用户、简历、作品集
🏗️ 技术栈
| 类别 | 技术 | 版本 |
|---|---|---|
| 语言 | Go | 1.25+ |
| Web 框架 | Gin | v1.9.1 |
| 数据库 | SQLite (modernc.org/sqlite) | v1.26.0 |
| AI Agent | CloudWeGo Eino | v0.9.12 |
| 配置管理 | Viper | v1.18.2 |
| 验证码 | base64Captcha | v1.3.2 |
| 前端 | HTML Template + Tailwind CSS + Font Awesome | — |
| 部署 | Docker / Docker Compose | — |
📁 项目结构
resume-platform/
├── cmd/
│ ├── server/ # 主服务入口
│ │ └── main.go
│ └── checkdb/ # 数据库检查工具
│ └── main.go
├── config/
│ └── config.yaml # 应用配置文件
├── internal/
│ ├── agent/ # AI Agent 层(Eino)
│ │ ├── config.go
│ │ └── tools.go # 题目生成、答案解析等工具
│ ├── ai/ # AI 提供商适配层
│ │ ├── provider.go # 统一接口定义
│ │ ├── deepseek.go
│ │ ├── doubao.go
│ │ ├── spark.go
│ │ └── tongyi.go
│ ├── handler/ # HTTP 处理器
│ │ ├── admin.go # 管理后台
│ │ ├── ai.go # AI 相关接口
│ │ ├── chat.go # AI 对话接口
│ │ ├── document.go # 文档解析接口
│ │ ├── response.go # 统一响应格式
│ │ └── resume.go # 简历/作品集/答题 API
│ ├── model/ # 数据模型
│ │ ├── resume.go # 简历、用户、题目、作品集等
│ │ └── document.go
│ ├── parser/ # 简历解析
│ │ └── parser.go
│ ├── repository/ # 数据访问层
│ │ ├── interface.go # 仓库接口定义
│ │ └── sqlite.go # SQLite 实现
│ ├── router/ # 路由配置
│ │ ├── router.go # 路由总入口
│ │ ├── admin.go # 管理后台路由
│ │ ├── api.go # REST API 路由
│ │ └── frontend.go # 前端页面路由
│ ├── security/ # 安全模块
│ │ ├── captcha.go # 验证码
│ │ └── rate_limiter.go # 登录限流
│ └── service/ # 业务逻辑层
│ ├── ai_service.go # AI 服务
│ ├── chat.go # 对话服务
│ ├── document.go # 文档服务
│ ├── resume.go # 简历服务
│ └── vector.go # 向量服务
├── pkg/
│ └── config/ # 公共配置包
│ └── config.go
├── static/ # 静态资源
│ ├── images/
│ └── js/
├── templates/ # HTML 模板
│ ├── admin/ # 管理后台模板
│ └── web/ # 前端展示模板
├── data/ # 数据库文件(运行时生成)
├── logs/ # 日志文件(运行时生成)
├── Dockerfile
├── docker-compose.yml
├── go.mod
└── go.sum
🚀 快速开始
环境要求
- Go 1.25+(推荐使用最新稳定版)
- 或 Docker / Docker Compose
本地运行
# 1. 克隆项目
git clone https://github.com/yourusername/resume-platform.git
cd resume-platform
# 2. 安装依赖
go mod download
# 3. 运行服务
go run cmd/server/main.go
服务启动后:
| 地址 | 说明 |
|---|---|
| http://localhost:8090 | 产品首页 |
| http://localhost:8090/default | 默认简历示例 |
| http://localhost:8090/my-secret-admin-123 | 管理后台(默认路径) |
默认账号:
admin/admin123456⚠️ 生产环境请务必修改默认密码和后台路径!
Docker 部署
使用 Docker Compose(推荐)
docker-compose up -d
手动构建
docker build -t resume-platform .
docker run -d \
-p 8090:8090 \
-v $(pwd)/data:/app/data \
-v $(pwd)/logs:/app/logs \
--name resume-platform \
resume-platform
⚙️ 配置说明
配置文件位于 config/config.yaml,所有配置项均支持通过环境变量覆盖。
server:
host: "0.0.0.0" # 监听地址
port: 8090 # 监听端口
mode: "release" # Gin 模式:debug / release
database:
type: "sqlite" # 数据库类型(目前仅支持 SQLite)
path: "./data/resume.db" # 数据库文件路径
password: "resume@2024" # 数据库加密密码
auth:
enabled: true # 是否启用后台认证
username: "admin" # 管理员用户名
password: "admin123456" # 管理员密码
admin_path: "/my-secret-admin-123" # 后台路径(建议修改)
max_login_attempts: 5 # 最大登录尝试次数
lockout_duration: 15 # 锁定时长(分钟)
template:
default: "modern" # 默认简历模板
log:
level: "info" # 日志级别
output: "./logs/app.log" # 日志输出路径
ai:
provider: "spark" # AI 提供商:spark / tongyi / doubao / deepseek
enabled: true # 是否启用 AI 功能
spark: # 讯飞星火配置
api_password: ""
base_url: ""
model: "lite"
max_tokens: 1024
timeout: 30
# 其他 AI 提供商配置...
🔌 API 概览
简历接口
| 方法 | 路径 | 说明 |
|---|---|---|
GET |
/api/resume/:id |
获取单份简历 |
GET |
/api/resume/by-route/:route |
按路由获取简历 |
POST |
/api/resume |
创建简历 |
PUT |
/api/resume/:id |
更新简历 |
DELETE |
/api/resume/:id |
删除简历 |
GET |
/api/user/resumes |
获取指定用户的简历列表 |
AI 答题接口
| 方法 | 路径 | 说明 |
|---|---|---|
POST |
/api/ai/agent/generate-questions |
生成面试题 |
POST |
/api/ai/agent/submit-answers |
提交答案并评分 |
POST |
/api/ai/agent/evaluate-answers |
评估答案 |
收藏 & 错题
| 方法 | 路径 | 说明 |
|---|---|---|
POST |
/api/favorite |
添加收藏/错题 |
GET |
/api/favorite |
获取收藏/错题列表 |
DELETE |
/api/favorite/:id |
删除收藏/错题 |
PUT |
/api/favorite/:id/toggle |
切换收藏状态 |
作品集接口
| 方法 | 路径 | 说明 |
|---|---|---|
GET |
/api/portfolio |
获取作品集列表 |
POST |
/api/portfolio |
创建作品集项目 |
GET |
/api/portfolio/:id |
获取单个项目 |
PUT |
/api/portfolio/:id |
更新项目 |
DELETE |
/api/portfolio/:id |
删除项目 |
管理后台
所有管理接口前缀为 {admin_path}/(默认 /my-secret-admin-123/)。
🧩 模板系统
内置 7 种精美模板,支持随时切换:
| 模板 | 风格 | 适用场景 |
|---|---|---|
modern |
现代简约 | 通用型,推荐首选 |
classic |
经典商务 | 传统行业、资深岗位 |
fresh |
清新活力 | 应届生、设计岗 |
minimalist |
极简主义 | 追求简洁表达 |
professional |
专业职业 | 管理岗、专业岗 |
tech |
技术导向 | 程序员、工程师 |
project |
项目展示 | 突出项目经验 |
模板文件位于
templates/web/,可基于现有模板自定义新主题。
🛠️ 开发指南
添加新模板
- 在
templates/web/目录下创建your-template.html - 继承
base.html的结构,使用 Go 模板语法访问.Resume数据 - 在
resume.Template字段设置模板名称即可
添加新的 AI 提供商
- 在
internal/ai/下创建yourprovider.go - 实现
AIProvider接口 - 在
provider.go的NewProvider工厂中注册
数据库迁移
项目使用 CREATE TABLE IF NOT EXISTS + migrateSchema 机制自动处理表结构变更。新增列时在 migrateSchema 函数中添加对应 ALTER TABLE ADD COLUMN 语句即可,程序启动时自动执行。
代码规范
# 格式化代码
gofmt -w .
# 静态检查
go vet ./...
# 构建检查
go build ./...
🤝 贡献指南
欢迎提交 Issue 和 Pull Request!
贡献流程
- Fork 本仓库
- 创建特性分支:
git checkout -b feature/AmazingFeature - 提交更改:
git commit -m 'Add some AmazingFeature' - 推送到分支:
git push origin feature/AmazingFeature - 打开 Pull Request
提交规范
- 使用 Conventional Commits 规范
- 示例:
feat: add dark mode support、fix: correct user binding display
📜 开源协议
本项目基于 MIT License 开源,详见 LICENSE 文件。
⭐ 支持项目
如果这个项目对你有帮助,欢迎:
- 点个 Star ⭐️ 让更多人看到
- 分享给身边需要的朋友
- 提交 Issue / PR 一起完善
Made with ❤️ by Resume Platform Team