对着镜子练面试。上传简历、职位描述、面经等文档,自动解析并生成针对性面试题目,通过流式 SSE 实时输出答案与解题思路。
| 层级 | 技术 |
|---|---|
| 前端 | Vue 3 + TypeScript + Vite + Pinia + Vue Router + Naive UI |
| 后端 | NestJS + TypeScript + Prisma + PostgreSQL + Redis |
| AI/LLM | OpenAI 兼容 API(GPT-4.1)+ text-embedding-3-small |
| 向量检索 | pgvector(PostgreSQL 扩展) |
| 文档解析 | pdf-parse + mammoth(PDF/DOCX/TXT) |
| 基础设施 | Docker Compose(PostgreSQL pgvector + Redis) |
ai-interview/
├── packages/
│ ├── frontend/ # Vue 3 前端
│ │ └── src/
│ │ ├── api/ # API 请求层
│ │ ├── components/# 公共组件
│ │ ├── pages/ # 页面组件
│ │ ├── stores/ # Pinia 状态管理
│ │ ├── router/ # 路由配置
│ │ └── styles/ # 全局样式
│ ├── backend/ # NestJS 后端
│ │ └── src/
│ │ ├── modules/ # 业务模块
│ │ │ ├── auth/ # JWT 认证
│ │ │ ├── documents/ # 文档管理
│ │ │ ├── rag/ # 文档解析与向量检索
│ │ │ ├── generation/ # 题目生成
│ │ │ ├── qa/ # AI 问答(SSE 流式)
│ │ │ └── bookmarks/ # 收藏管理
│ │ └── prisma/ # 数据库服务
│ └── shared/ # 共享类型定义
- 上传简历、JD、面经(支持 PDF/DOCX/TXT 文件及文本/URL 粘贴)
- 自动解析文档内容,提取技术栈与关键词
- 文档分块 + 向量嵌入 + pgvector 相似度检索
- AI 根据文档内容推断岗位、级别、领域
- 批量生成 20 道面试题目(基础 / 项目深挖 / 场景 / 综合四类)
- 支持重新生成、继续生成
- 题目搜索、分类筛选、分页浏览
- SSE 实时流式输出,打字机动画效果
- 结构化答案:正文 + 思路拆解 + 追问 + 洞察
- 支持多轮追问(单个问题内上下文持续对话)
- 答案缓存,切换题目不丢失
- 独立自由问答页面
- 聊天记录持久化
- 支持复制、下载 Markdown
- 收藏优质问答,随时回顾
- 支持取消收藏
- JWT 邮箱注册/登录
- 全局路由守卫,未登录自动跳转
- Node.js >= 18
- Docker Desktop(推荐),或本机已有 PostgreSQL(需 pgvector)
Redis 目前业务代码未使用,compose 里可起可不依赖。
# 1. 配置环境变量
cp .env.example .env
# 编辑 .env,填写 LLM_API_KEY / EMBEDDING_API_KEY 等
# 2. 启动依赖服务(PostgreSQL pgvector,宿主端口 5433)
docker compose up -d
# 3. 安装依赖
npm install
# 4. 同步数据库结构
npm run db:migrate
# 若尚无 migration,可用:npm -w packages/backend run prisma:push
# 5. 启动后端(默认端口 3100,会自动加载仓库根目录 .env)
npm run dev:backend
# 6. 另开终端,启动前端(默认端口 5173;占用时可用 5174)
npm run dev:frontend浏览器打开 http://localhost:5173(或终端里 Vite 打印的地址),注册账号后即可使用。
后端 API:http://localhost:3100/api。前端通过 Vite 代理把 /api 转到该端口。
npm run build:frontend # 构建前端
npm run build:backend # 构建后端
npm run db:generate # 重新生成 Prisma 客户端
npm run commit # 交互式提交(commitizen)参考 .env.example(均位于仓库根目录 .env,Nest / Prisma 脚本会自动加载):
| 变量 | 说明 | 示例默认值 |
|---|---|---|
DATABASE_URL |
PostgreSQL 连接串 | postgresql://postgres:postgres@localhost:5433/ai_interview |
PORT |
后端端口(须与 Vite 代理一致) | 3100 |
JWT_SECRET |
JWT 签名密钥 | 开发环境有 fallback |
LLM_API_KEY |
大模型 API Key | - |
LLM_BASE_URL |
大模型 API Base URL | https://api.openai.com/v1 |
LLM_MODEL |
大模型名称 | gpt-4.1 |
EMBEDDING_API_KEY |
Embedding API Key | - |
EMBEDDING_BASE_URL |
Embedding Base URL | https://api.openai.com/v1 |
EMBEDDING_MODEL |
Embedding 模型 | text-embedding-3-small |
CORS_ORIGINS |
允许的前端 Origin(逗号分隔) | http://localhost:5173,... |
VOICE_API_KEY |
语音 TTS/ASR(可选) | - |
VITE_PROXY_TARGET |
前端代理后端地址(可选) | http://localhost:3100 |