# interview-backend **Repository Path**: floralab/interview-backend ## Basic Information - **Project Name**: interview-backend - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-01 - **Last Updated**: 2026-03-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Interview Backend 智能 AI 面试平台后端服务,基于 Spring Boot 4 + Java 21,提供简历分析、模拟面试、知识库与 RAG 对话等核心能力。 ## 技术栈 | 类别 | 技术 | |------|------| | 框架 | Spring Boot 4.0.1 | | 语言 | Java 21(虚拟线程已启用) | | 数据库 | PostgreSQL 16 + pgvector(向量检索) | | 缓存/消息 | Redis 7 + Redisson(缓存、Redis Stream 异步任务) | | 对象存储 | MinIO(S3 兼容) | | AI 模型 | 智谱 GLM-4-Air(Spring AI ZhipuAI) | | 文档解析 | Apache Tika | | PDF 导出 | iText 7 | ## 环境要求 - **Java 21** - **Maven 3.6+** - **PostgreSQL 16**(需 pgvector 插件) - **Redis 7** - **MinIO**(或其它 S3 兼容存储) - **智谱 API Key**([开放平台](https://open.bigmodel.cn/) 申请) ## 快速开始 ### 1. 启动基础设施 使用 Docker Compose 启动 PostgreSQL、Redis、MinIO 及存储桶初始化: ```bash cd interview-backend docker-compose up -d postgres redis minio createbuckets ``` ### 2. 配置环境变量 本地运行前需配置: | 变量名 | 说明 | 示例 | |--------|------|------| | `POSTGRES_HOST` | 数据库主机 | `localhost` | | `POSTGRES_PORT` | 数据库端口 | `5432` | | `POSTGRES_DB` | 数据库名 | `interview_guide` | | `POSTGRES_USER` | 数据库用户 | `postgres` | | `POSTGRES_PASSWORD` | 数据库密码 | `password` | | `REDIS_HOST` | Redis 主机 | `localhost` | | `REDIS_PORT` | Redis 端口 | `6379` | | `APP_STORAGE_ENDPOINT` | 对象存储地址 | `http://localhost:9000` | | `APP_STORAGE_ACCESS_KEY` | 存储 Access Key | `minioadmin` | | `APP_STORAGE_SECRET_KEY` | 存储 Secret Key | `minioadmin` | | `ZHIPUAI_API_KEY` | 智谱 API Key | **必填** | 可在项目根目录创建 `.env` 或在当前 Shell 中导出,例如: ```bash export POSTGRES_HOST=localhost export POSTGRES_PORT=5432 export POSTGRES_DB=interview_guide export POSTGRES_USER=postgres export POSTGRES_PASSWORD=password export REDIS_HOST=localhost export REDIS_PORT=6379 export APP_STORAGE_ENDPOINT=http://localhost:9000 export APP_STORAGE_ACCESS_KEY=minioadmin export APP_STORAGE_SECRET_KEY=minioadmin export ZHIPUAI_API_KEY=your-zhipu-api-key ``` ### 3. 运行应用 ```bash mvn spring-boot:run ``` 服务默认在 **http://localhost:8080** 启动。 ## 项目结构 ``` interview-backend/ ├── src/main/java/interview/guide/ │ ├── App.java # 主启动类 │ ├── common/ # 公共组件 │ │ ├── annotation/ # 注解(如 RateLimit) │ │ ├── aspect/ # 切面 │ │ ├── config/ # 配置(CORS、S3、存储等) │ │ ├── exception/ # 异常与错误码 │ │ ├── result/ # 统一响应封装 │ │ └── ai/ # AI 结构化输出等 │ ├── infrastructure/ # 基础设施 │ │ ├── export/ # PDF 导出 │ │ ├── file/ # 文档解析、存储、校验 │ │ ├── mapper/ # MyBatis 映射 │ │ └── redis/ # Redis 缓存 │ └── modules/ # 业务模块 │ ├── interview/ # 模拟面试 │ ├── knowledgebase/ # 知识库与 RAG │ └── resume/ # 简历 ├── docker-compose.yml # 本地基础设施编排 ├── docker/postgres/init.sql # 数据库初始化(pgvector) └── pom.xml ``` ## API 概览 ### 面试 | 方法 | 路径 | 说明 | |------|------|------| | POST | `/api/interview/sessions` | 创建面试会话 | | GET | `/api/interview/sessions/{sessionId}` | 获取会话 | | GET | `/api/interview/sessions/{sessionId}/question` | 获取当前题目 | | POST | `/api/interview/sessions/{sessionId}/answers` | 提交答案 | | GET | `/api/interview/sessions/{sessionId}/report` | 获取面试报告 | | POST | `/api/interview/sessions/{sessionId}/complete` | 完成面试 | | GET | `/api/interview/sessions/{sessionId}/export` | 导出 PDF | | DELETE | `/api/interview/sessions/{sessionId}` | 删除会话 | ### 简历 | 方法 | 路径 | 说明 | |------|------|------| | POST | `/api/resumes/upload` | 上传简历 | | GET | `/api/resumes` | 简历列表 | | GET | `/api/resumes/{id}/detail` | 简历详情 | | GET | `/api/resumes/{id}/export` | 导出简历 | | POST | `/api/resumes/{id}/reanalyze` | 重新分析 | | DELETE | `/api/resumes/{id}` | 删除简历 | ### 知识库 | 方法 | 路径 | 说明 | |------|------|------| | GET | `/api/knowledgebase/list` | 知识库列表 | | POST | `/api/knowledgebase/upload` | 上传文档 | | GET | `/api/knowledgebase/{id}` | 文档详情 | | POST | `/api/knowledgebase/query` | 查询(同步) | | POST | `/api/knowledgebase/query/stream` | 查询(流式) | | POST | `/api/knowledgebase/{id}/revectorize` | 重新向量化 | | DELETE | `/api/knowledgebase/{id}` | 删除文档 | ### RAG 对话 | 方法 | 路径 | 说明 | |------|------|------| | POST | `/api/rag-chat/sessions` | 创建对话会话 | | GET | `/api/rag-chat/sessions` | 会话列表 | | GET | `/api/rag-chat/sessions/{sessionId}` | 会话详情 | | POST | `/api/rag-chat/sessions/{sessionId}/messages/stream` | 流式对话 | | DELETE | `/api/rag-chat/sessions/{sessionId}` | 删除会话 | ## 配置说明 主要配置位于 `src/main/resources/application.yml`,支持通过环境变量覆盖: - **数据库**:`POSTGRES_*` - **Redis**:`REDIS_HOST`, `REDIS_PORT` - **对象存储**:`APP_STORAGE_*` - **智谱 AI**:`ZHIPUAI_API_KEY` - **CORS**:`CORS_ALLOWED_ORIGINS`(默认含 `http://localhost:5173,5174,80`) ## 测试 ```bash mvn test ``` 测试用样例文件位于 `src/test/resources/test-files/`。 ## Docker 部署 `docker-compose.yml` 中定义了 `postgres`、`redis`、`minio`、`createbuckets`、`app`、`frontend` 等服务。若需通过 Docker 运行后端应用,需先添加 `app/Dockerfile` 并构建镜像。当前推荐本地开发流程为: 1. 使用 `docker-compose up -d postgres redis minio createbuckets` 启动依赖 2. 本地执行 `mvn spring-boot:run` 启动应用 ## License MIT