Thanks to visit codestin.com
Credit goes to github.com

Skip to content

boboqoq/OfferNow

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

OfferNow —— 面试刷题助手,助你快速拿 Offer

基于大模型的智能面试刷题工具:上传简历、选择职位描述(JD),AI 自动生成个性化面试问答(基础知识、专业技能、项目经验、团队精神),支持流式生成、追问、背题练习与评分。内置 JD 模板库按 行业大类 → 职能方向 → 岗位名称 三层组织,管理员可增删改并调用大模型生成 JD 正文。

界面预览

首页 AI 出题
首页 AI 出题
面试详情 背题练习
面试详情 背题练习

技术栈

  • 后端:Python 3.9+ / FastAPI / SQLAlchemy 2(Async)/ PostgreSQL / Alembic
  • AI:OpenAI 兼容接口(通义千问等),默认走 DashScope + qwen-plus
  • 前端:React 19 / TypeScript / Vite 5 / Tailwind CSS 4 / React Router 6

功能概览

用户端

页面 路径 说明
AI 出题 /user/generate 上传简历(PDF/docx)、选择 JD 模板,AI 流式生成 12 题(4 类别×3 难度),支持继续生成与补充提示
公共题库 /user/public-pool 浏览内置职位及其公开面试题,无需登录
我的题库 /user/history 查看历次面试会话,进入会话详情与题目详情
今日练习 /user/recite 从指定题库抽题背诵,AI 评分(0-100)+ 熟练度(1-5 星),记录练习历史
我的简历 /user/resumes 管理已上传的简历文件(预览/删除)
题目详情 /user/session/:id/qa/:id 查看问答、追问、划选段落 AI 解释、按意见优化答案

管理端

页面 路径 说明
JD 模板管理 /admin/jd 按三层分类增删改查岗位模板,预览生成 JD、一键重新生成 JD 正文

快速开始

1. 启动 PostgreSQL

docker compose up -d

默认连接串(仅限本地开发,勿用于生产):postgresql+asyncpg://postgres:password@localhost:5432/ai_interview

2. 后端

cd backend
python3 -m venv venv
source venv/bin/activate   # Windows: venv\Scripts\activate
pip install -r requirements.txt
cp .env.example .env
# 编辑 .env:必须填写 DATABASE_URL、ADMIN_PASSWORD、JWT_SECRET_KEY
# 以及 QWEN_API_KEY 等 LLM 配置

alembic upgrade head
python seed_jd_templates.py
# 可选:导入约 100+ 条内置职位(需配置 QWEN_API_KEY)
python seed_builtin_jds.py
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000

3. 前端

cd frontend
cp .env.example .env.local
npm install
npm run dev

访问 http://localhost:5173(Vite 默认端口)。


环境变量

后端(.env

变量 说明 必填
DATABASE_URL PostgreSQL 异步连接串
QWEN_API_KEY 阿里云 DashScope API Key 否*
QWEN_MODEL 模型名,默认 qwen-plus
QWEN_OCR_MODEL 多模态 OCR 模型,默认 qwen-vl-ocr-latest
LLM_BASE_URL 任意 OpenAI 兼容服务的 base URL(以 /v1 结尾)
LLM_API_KEY LLM 服务 API Key(优先级高于 QWEN_API_KEY
LLM_MODEL LLM 模型 ID(优先级高于 QWEN_MODEL
ADMIN_USERNAME 管理员用户名,默认 admin
ADMIN_PASSWORD 管理员密码(无默认值,必须配置
JWT_SECRET_KEY JWT 签名密钥(未配置时每次启动随机生成,重启后 Token 失效) 推荐
JWT_ACCESS_TOKEN_EXPIRE_HOURS Token 有效期(小时),默认 24
CORS_ORIGINS 允许的前端源,逗号分隔
OSS_ENDPOINT 阿里云 OSS Endpoint(不填则简历上传不可用)
OSS_BUCKET OSS Bucket 名称
OSS_ACCESS_KEY_ID OSS AccessKey ID
OSS_ACCESS_KEY_SECRET OSS AccessKey Secret
OSS_PUBLIC_BASE_URL OSS 公开访问域名前缀(可选)

* 未配置时 LLM 接口返回演示用占位内容,便于 UI 联调。

前端(.env.local

变量 说明 必填
VITE_API_BASE 后端根 URL,留空则走 Vite 代理

项目结构

ai_interview/
├── backend/                    # FastAPI 应用
│   ├── app/
│   │   ├── routers/            # API 路由(auth_user / interviews / jd_templates / public_pool / admin)
│   │   ├── services/           # 业务逻辑(AI 对话 / OSS 存储 / 简历解析 / 抽题)
│   │   ├── utils/              # 工具函数(密码 / 熟练度)
│   │   ├── models.py           # SQLAlchemy 数据模型
│   │   ├── schemas.py          # Pydantic 请求/响应模型
│   │   ├── config.py           # 配置管理(从 .env 读取)
│   │   └── main.py             # 应用入口
│   ├── alembic/                # 数据库迁移
│   └── scripts/                # 种子脚本(内置 JD / 公共题库)
├── frontend/                   # React SPA
│   └── src/
│       ├── pages/user/         # 用户端页面
│       ├── pages/admin/        # 管理端页面
│       ├── components/         # 公共组件
│       ├── api/client.ts       # API 调用(axios)
│       └── lib/                # 工具函数(Token / 认证 / NDJSON 解析)
├── docker-compose.yml          # PostgreSQL 容器
├── LICENSE                     # MIT 开源协议
└── README.md

API 端点

用户认证 /api/auth

方法 路径 说明
POST /register 用户名 + 密码注册
POST /login 密码登录,返回 JWT
GET /me 当前用户信息

面试 /api/interviews

方法 路径 说明
POST /create 创建会话(上传简历 + JD)
POST /{id}/generate 生成问答(非流式)
POST /{id}/generate-stream 流式生成问答(NDJSON)
GET /{id} 会话详情(含全部 QA)
GET /history 历史会话列表
PATCH /{id} 修改会话标题
DELETE /{id} 删除会话
PATCH /qa/{id}/favorite 收藏/取消收藏
POST /qa/{id}/followup 生成追问
GET /qa/{id}/followup-suggestions 推荐追问列表
POST /qa/{id}/explain-stream 划选段落流式解释
POST /qa/{id}/refine-answer 按意见优化答案

简历 /api/interviews

方法 路径 说明
POST /upload-resume 上传简历文件(PDF/docx)
GET /stored-resumes 已上传简历列表
GET /stored-resumes/{id}/file 下载简历原件
DELETE /stored-resumes/{id} 删除简历
POST /recommend-positions 简历 → 职位推荐
POST /parse-jd 智能解析 JD(文本/URL/截图)

背题练习 /api/interviews/recite

方法 路径 说明
POST /daily 今日抽题(按类别/难度/熟练度筛选)
PUT /mastery/{qa_id} 手动设定熟练度星数
POST /grade 提交答案并 AI 评分
POST /practice-runs 开始练习
PUT /practice-runs/{id}/finish 结束练习
GET /practice-runs 练习记录列表
GET /practice-runs/{id} 练习详情
GET /practice-runs/{id}/submissions 单次练习的提交记录
DELETE /practice-runs/{id}/submissions 清空提交(重新答题前)

JD 模板 /api/jd-templates

方法 路径 说明
GET / 按行业/职能筛选岗位模板
GET /meta 行业与职能方向元数据

公共题库 /api/public-pool

方法 路径 说明
GET /builtin-jobs 内置职位列表(含公开题数)
GET /templates/{id} 职位信息 + 公开面试题

管理端 /api/admin

方法 路径 说明
POST /login 管理员登录
GET /jd-templates 全部 JD 模板
POST /jd-templates/preview-generate 预览生成 JD
POST /jd-templates 新增岗位模板
PUT /jd-templates/{id} 修改模板
POST /jd-templates/{id}/regenerate-jd 重新生成 JD 正文
DELETE /jd-templates/{id} 删除模板

开源协议

本项目基于 MIT License 开源。

About

OfferNow —— 面试刷题助手,助你快速拿 Offer

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors