[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-11214":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":9,"totalLinesOfCode":9,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":9,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":20,"compositeScore":21,"rankGlobal":9,"rankLanguage":9,"license":9,"archived":22,"fork":22,"defaultBranch":23,"hasWiki":22,"hasPages":22,"topics":24,"createdAt":9,"pushedAt":9,"updatedAt":39,"readmeContent":40,"aiSummary":41,"trendingCount":16,"starSnapshotCount":16,"syncStatus":42,"lastSyncTime":43,"discoverSource":44},11214,"interview-guide","Snailclimb\u002Finterview-guide","Snailclimb","基于 Spring Boot 4.0 + Java 21 + Spring AI + PostgreSQL + pgvector + RustFS + Redis，实现简历智能分析、AI模拟面试、知识库RAG检索等核心功能。非常适合作为学习和简历项目，学习门槛低。",null,"https:\u002F\u002Fgithub.com\u002FSnailclimb\u002Finterview-guide","Java",2410,542,5,8,0,38,115,351,114,107.2,false,"main",[25,26,27,28,29,30,31,32,33,34,35,36,37,38],"mapstruct","pgvector","postgresql","redis","redisson","redisstreams","rustfs","springai","springboot","gradle","itext7","tika","rag","springboot4","2026-06-12 04:00:54","\u003Cdiv align=\"center\">\n\n**智能 AI 面试官平台** - 基于大语言模型的简历分析、模拟面试和 RAG 知识库系统\n\n[![Java](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FJava-21-orange?logo=openjdk)](https:\u002F\u002Fopenjdk.org\u002F)\n[![Spring Boot](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FSpring%20Boot-4.0-green?logo=springboot)](https:\u002F\u002Fspring.io\u002Fprojects\u002Fspring-boot)\n[![React](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FReact-18.3-blue?logo=react)](https:\u002F\u002Freact.dev\u002F)\n[![TypeScript](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FTypeScript-5.6-blue?logo=typescript)](https:\u002F\u002Fwww.typescriptlang.org\u002F)\n[![PostgreSQL](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FPostgreSQL-pgvector-336791?logo=postgresql)](https:\u002F\u002Fwww.postgresql.org\u002F)\n\n\n\u003C\u002Fdiv>\n\n\n---\n\n## 项目介绍\n\nInterviewGuide 是一个集成了简历分析、模拟面试（文字 + 语音）、面试安排、知识库管理和多模型配置的智能面试辅助平台。系统利用大语言模型（LLM）、向量数据库、Redis Stream 异步任务和实时语音技术，为求职者、HR 和培训机构提供智能化的简历评估、面试练习、知识库问答和面试日程管理能力。\n\n## 系统架构\n\n![系统架构图](https:\u002F\u002Foss.javaguide.cn\u002Fxingqiu\u002Fpratical-project\u002Finterview-guide\u002Finterview-guide-architecture-diagram.png)\n\n## 配套教程\n\n本项目承诺**完整功能免费开源**，也不会做所谓的 Pro 版或“付费解锁核心功能”之类的设计。\n\n如果你想学习这个项目，或者希望把它作为个人项目经历 \u002F 毕设选题，我也整理了一套相对细致的教程：从基础设施搭建、核心业务实现，到最后如何在面试中讲清楚思路与亮点，尽量把容易卡住的地方讲透。\n\n如果你确实需要更系统的辅导，可以点这里了解详情（**教程为付费内容**，主要是想覆盖一些时间成本，望理解，感谢支持）：[《SpringAI 智能面试平台+RAG 知识库》](https:\u002F\u002Fjavaguide.cn\u002Fzhuanlan\u002Finterview-guide.html)。\n\n## 技术栈\n\n### 后端技术\n\n| 技术                  | 版本  | 说明                          |\n| --------------------- | ----- | ----------------------------- |\n| Spring Boot           | 4.0.1 | 应用框架                      |\n| Java                  | 21    | 开发语言（虚拟线程）          |\n| Spring AI             | 2.0.0-M4 | AI 集成框架、OpenAI 兼容模型接入 |\n| Spring AI Agent Utils | 0.7.0 | Skill 资源加载、Advisor 能力扩展 |\n| PostgreSQL + pgvector | 14+   | 关系数据库 + 向量存储（Compose 默认 PG16） |\n| Redis + Redisson      | 6+ \u002F 4.0.0 | 缓存 + 消息队列（Stream） |\n| Apache Tika           | 2.9.2 | 文档解析                      |\n| iText 8               | 8.0.5 | PDF 导出                      |\n| MapStruct             | 1.6.3 | 对象映射                      |\n| SpringDoc OpenAPI     | 3.0.2 | API 接口文档                  |\n| DashScope SDK         | 2.22.7 | 语音识别\u002F合成（Qwen3 ASR\u002FTTS）|\n| AWS S3 SDK            | 2.29.51 | S3 兼容对象存储（MinIO\u002FRustFS）|\n| WebSocket             | -     | 语音面试实时双向通信          |\n| Gradle                | 8.14  | 构建工具                      |\n\n技术选型常见问题解答：\n\n1. 数据存储为什么选择 PostgreSQL + pgvector？PG 的向量数据存储功能够用了，精简架构，不想引入太多组件。\n2. 为什么引入 Redis？\n   - Redis 替代 `ConcurrentHashMap` 实现面试会话的缓存。\n   - 基于 Redis Stream 实现简历分析、知识库向量化等场景的异步（还能解耦，分析和向量化可以使用其他编程语言来做）。不使用 [Kafka](https:\u002F\u002Fjavaguide.cn\u002Fhigh-performance\u002Fmessage-queue\u002Fkafka-questions-01.html) 这类成熟的消息队列，也是不想引入太多组件。\n3. 构建工具为什么选择 Gradle？个人更喜欢用 Gradle，也写过相关的文章：[Gradle核心概念总结](https:\u002F\u002Fjavaguide.cn\u002Ftools\u002Fgradle\u002Fgradle-core-concepts.html)。\n\n### 前端技术\n\n| 技术              | 版本  | 说明           |\n| ----------------- | ----- | -------------- |\n| React             | 18.3  | UI 框架        |\n| TypeScript        | 5.6   | 开发语言       |\n| Vite              | 5.4   | 构建工具       |\n| Tailwind CSS      | 4.1   | 样式框架       |\n| React Router      | 7.11  | 路由管理       |\n| Framer Motion     | 12.23 | 动画库         |\n| Recharts          | 3.6   | 图表库         |\n| Lucide React      | 0.468 | 图标库         |\n| React Big Calendar| 1.19  | 面试日历组件   |\n| React Virtuoso    | 4.18  | RAG 聊天虚拟列表 |\n| pnpm              | 10.26 | 前端包管理器   |\n\n## 功能特性\n\n### 简历管理模块\n\n- **多格式解析**：支持 PDF、DOCX、DOC、TXT 等多种简历格式。\n- **异步处理流**：基于 Redis Stream 实现异步简历分析，支持实时查看处理进度（待分析\u002F分析中\u002F已完成\u002F失败）。\n- **稳定性保障**：内置分析失败自动重试机制（最多 3 次）与基于内容哈希的重复检测。\n- **分析报告导出**：支持将 AI 分析结果一键导出为结构化的 PDF 简历分析报告。\n\n### 模拟面试模块\n\n- **Skill 驱动出题**：内置 10+ 面试方向（Java 后端、阿里\u002F字节\u002F腾讯专项、前端、Python、算法、系统设计、测开、AI Agent 等），每个方向由 `SKILL.md` 定义考察范围、难度分布和参考知识库。\n- **历史题目去重**：出题时自动排除已有会话中问过的题目，避免重复考察。\n- **面试阶段时长联动**：总时长滑块拖动后，各阶段（自我介绍、技术考察、项目深挖、反问环节）按时比自动分配。\n- **智能追问流**：支持配置多轮智能追问（默认 1 条），模拟多轮问答场景。\n- **统一评估架构**：文字面试和语音面试共用同一套评估引擎（分批评估 + 结构化输出 + 二次汇总 + 降级兜底），评估结果可对比。\n- **报告一键导出**：支持异步生成并导出详细的 PDF 模拟面试评估报告。\n- **面试中心入口**：面试中心页整合文字面试和语音面试入口，支持继续面试和重新面试。\n\n### 面试安排模块\n\n- **邀请解析**：规则 + AI 双引擎，支持飞书\u002F腾讯会议\u002FZoom 格式，自动提取公司、岗位、时间、会议链接\n- **日历管理**：日\u002F周\u002F月视图 + 拖拽调整 + 列表视图\n- **状态流转**：定时任务自动过期，手动标记待面试\u002F已完成\u002F已取消\n- **面试提醒**：可配置提醒，避免错过面试\n\n### 语音面试模块\n\n实时语音对话面试，WebSocket + 千问3 语音模型（ASR\u002FTTS\u002FLLM 统一 API Key）：\n\n- **实时流式对话**：句子级并发 TTS，边生成边合成边播放，首包延迟 200ms\n- **服务端 VAD**：自动断句，实时字幕（含中间结果）\n- **回声防护 + 手动提交**：避免 AI 语音被误录入\n- **多轮上下文记忆 + 暂停\u002F恢复**：超时自动暂停\n- **Micrometer 埋点**：TTS\u002FASR 延迟、会话时长等指标\n\n> **已知问题**：端到端延迟偏高（服务端音频中转）、无耳机时回声泄漏、TTS 音色单一、弱网音频断续。后续计划探索 WebRTC、客户端 VAD 降噪、端到端语音模型等方案。\n\n### 知识库管理模块\n\n- **文档智能处理**：支持 PDF、DOCX、Markdown 等多种格式文档的自动上传、分块与异步向量化。\n- **RAG 检索增强**：集成 pgvector，通过查询改写、相似度阈值和 TopK 策略提升 AI 问答的准确性与专业度。\n- **流式响应交互**：基于 SSE（Server-Sent Events）技术实现打字机式流式响应。\n- **智能问答对话**：支持会话管理、置顶、多知识库关联、Markdown 展示和虚拟列表渲染。\n- **知识库运维**：支持分类管理、下载、重新向量化、搜索和统计信息展示。\n\n### 多模型与系统设置模块\n\n- **多 Provider 管理**：内置 DashScope、LM Studio、Kimi、DeepSeek、GLM 等 OpenAI 兼容 Provider 配置。\n- **默认模型切换**：支持在设置页切换默认聊天模型和默认向量模型，不需要频繁修改源码配置。\n- **语音服务配置**：ASR\u002FTTS 配置可视化管理，支持语音服务连通性测试。\n- **配置安全落盘**：运行时配置默认写入用户目录 `~\u002F.interview-guide\u002F`，支持 API Key 加密配置。\n\n### TODO\n\n- [x] 问答助手的 Markdown 展示优化\n- [x] 知识库管理页面的知识库下载\n- [x] 异步生成模拟面试评估报告\n- [x] Docker 快速部署\n- [x] 添加 API 限流保护\n- [x] 前端性能优化（RAG 聊天 - 虚拟列表）\n- [x] 模拟面试增加追问功能\n- [x] 语音面试功能（基于 Qwen3 实时语音模型）\n- [x] 面试安排管理（智能解析 + 日历视图）\n- [x] Skill 驱动出题（10+ 面试方向 + 参考知识库）\n- [x] 统一面试评估架构（文字\u002F语音共用评估引擎）\n- [x] 面试历史题目去重\n- [x] 面试中心页（整合文字\u002F语音入口）\n- [x] 语音面试 LLM 流式输出 + 句子级并发 TTS\n- [x] 语音面试暂停\u002F恢复 + 手动提交 + 回声防护\n- [x] 多 LLM Provider 管理与默认模型切换\n- [x] RAG 聊天会话管理 + 虚拟列表优化\n- [x] 可重复注解 API 限流（Global\u002FIP\u002FUser 维度）\n- [ ] 打通模拟面试和知识库\n- [ ] 语音面试接入 WebRTC 降低延迟\n- [ ] 语音面试支持更多 TTS 音色\n\n\n## 效果展示\n\n### 简历与面试\n\n面试中心：\n\n![面试中心](https:\u002F\u002Foss.javaguide.cn\u002Fxingqiu\u002Fpratical-project\u002Finterview-guide\u002Fpage-interview-hub.png)\n\nSkill 出题 + JD 解析：\n\n![Skill 出题 + JD 解析](https:\u002F\u002Foss.javaguide.cn\u002Fxingqiu\u002Fpratical-project\u002Finterview-guide\u002Fpage-skill-jd-parse.png)\n\n简历库：\n\n![简历库](https:\u002F\u002Foss.javaguide.cn\u002Fxingqiu\u002Fpratical-project\u002Finterview-guide\u002Fpage-resume-history.png)\n\n简历上传分析：\n\n![简历上传分析](https:\u002F\u002Foss.javaguide.cn\u002Fxingqiu\u002Fpratical-project\u002Finterview-guide\u002Fpage-resume-upload-analysis.png)\n\n简历分析详情：\n\n![简历分析详情](https:\u002F\u002Foss.javaguide.cn\u002Fxingqiu\u002Fpratical-project\u002Finterview-guide\u002Fpage-resume-analysis-detail.png)\n\n面试记录：\n\n![面试记录](https:\u002F\u002Foss.javaguide.cn\u002Fxingqiu\u002Fpratical-project\u002Finterview-guide\u002Fpage-interview-history.png)\n\n面试详情：\n\n![面试详情](https:\u002F\u002Foss.javaguide.cn\u002Fxingqiu\u002Fpratical-project\u002Finterview-guide\u002Fpage-interview-detail.png)\n\n模拟面试：\n\n![模拟面试](https:\u002F\u002Foss.javaguide.cn\u002Fxingqiu\u002Fpratical-project\u002Finterview-guide\u002Fpage-mock-interview.png)\n\n面试安排\n\n![面试安排](https:\u002F\u002Foss.javaguide.cn\u002Fxingqiu\u002Fpratical-project\u002Finterview-guide\u002Fpage-interview-schedule-list.png)\n\n多模型切换 + 语音服务设置：\n\n![管理聊天模型、向量模型和模块配置](https:\u002F\u002Foss.javaguide.cn\u002Fxingqiu\u002Fpratical-project\u002Finterview-guide\u002Fllm-settings.png)\n\n\n### 知识库\n\n知识库管理：\n\n![知识库管理](https:\u002F\u002Foss.javaguide.cn\u002Fxingqiu\u002Fpratical-project\u002Finterview-guide\u002Fpage-knowledge-base-management.png)\n\n问答助手：\n\n![问答助手](https:\u002F\u002Foss.javaguide.cn\u002Fxingqiu\u002Fpratical-project\u002Finterview-guide\u002Fpage-qa-assistant.png)\n\n## 项目结构\n\n```\ninterview-guide\u002F\n├── app\u002F                              # 后端应用\n│   ├── src\u002Fmain\u002Fjava\u002Finterview\u002Fguide\u002F\n│   │   ├── App.java                  # 主启动类\n│   │   ├── common\u002F                   # 通用基础能力\n│   │   │   ├── ai\u002F                   # LLM Provider、结构化输出、Prompt 安全\n│   │   │   ├── annotation\u002F           # @RateLimit 可重复限流注解\n│   │   │   ├── aspect\u002F               # RateLimitAspect + Redis Lua 限流\n│   │   │   ├── async\u002F                # Redis Stream 生产者\u002F消费者模板\n│   │   │   ├── config\u002F               # CORS、S3、OpenAPI、Jackson 等配置\n│   │   │   ├── evaluation\u002F           # 文字\u002F语音共用的统一评估引擎\n│   │   │   ├── exception\u002F            # 业务异常与全局异常处理\n│   │   │   └── result\u002F               # 统一响应 Result\u003CT>\n│   │   ├── infrastructure\u002F           # 基础设施\n│   │   │   ├── export\u002F               # PDF 导出\n│   │   │   ├── file\u002F                 # 文件解析、校验、清洗、S3 存储\n│   │   │   ├── mapper\u002F               # MapStruct 映射器\n│   │   │   └── redis\u002F                # RedisService、面试会话缓存\n│   │   └── modules\u002F                  # 业务模块\n│   │       ├── interview\u002F            # 模拟面试模块\n│   │       ├── interviewschedule\u002F    # 面试安排模块\n│   │       ├── knowledgebase\u002F        # 知识库模块\n│   │       ├── llmprovider\u002F          # 多模型 Provider 与语音配置\n│   │       ├── resume\u002F               # 简历模块\n│   │       └── voiceinterview\u002F       # 语音面试模块\n│   └── src\u002Fmain\u002Fresources\u002F\n│       ├── application.yml           # 应用配置\n│       ├── prompts\u002F                  # AI 提示词模板（StringTemplate）\n│       ├── scripts\u002F                  # Redis Lua 脚本\n│       ├── skills\u002F                   # 面试 Skill 定义和参考题库\n│       └── voice-interview-opening.yml # 语音面试开场白配置\n│\n├── frontend\u002F                         # 前端应用\n│   ├── src\u002F\n│   │   ├── api\u002F                      # API 接口\n│   │   ├── components\u002F               # 公共组件\n│   │   ├── hooks\u002F                    # 业务 Hooks\n│   │   ├── pages\u002F                    # 页面组件\n│   │   ├── types\u002F                    # 类型定义\n│   │   └── utils\u002F                    # 工具函数\n│   ├── package.json\n│   └── vite.config.ts\n│\n├── docker-compose.yml                # 完整部署：前端 + 后端 + PostgreSQL + Redis + MinIO\n├── docker-compose.dev.yml            # 本地开发依赖：PostgreSQL + Redis + RustFS\n├── docs\u002F                             # 架构设计与改造记录\n├── .env.example                      # 环境变量示例\n└── README.md\n```\n\n## 快速开始\n\n环境要求：\n\n| 依赖          | 版本 | 必需 | 说明                                     |\n| ------------- | ---- | ---- | ---------------------------------------- |\n| JDK           | 21+  | 是   | 开发语言                                 |\n| Node.js       | 18+  | 是   | 前端构建                                 |\n| pnpm          | 10+  | 推荐 | 前端包管理器（项目 packageManager 指定 10.26）|\n| Docker        | -    | 推荐 | 一键启动依赖服务（PostgreSQL\u002FRedis\u002FRustFS）|\n\n> 如果不用 Docker，需要自行安装 PostgreSQL 14+（含 pgvector 扩展）、Redis 6+ 和 S3 兼容存储。\n\n### 1. 克隆项目\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002FSnailclimb\u002Finterview-guide.git\ncd interview-guide\n```\n\n### 2. 配置环境变量\n\n推荐复制 `.env.example` 为 `.env`，后端 `bootRun` 会自动读取根目录 `.env`。最少需要填写 `AI_BAILIAN_API_KEY`，用于 DashScope 文本模型、ASR 和 TTS：\n\n```bash\ncp .env.example .env\n\n# 编辑 .env\n# AI_BAILIAN_API_KEY=your_dashscope_api_key\n# AI_MODEL=qwen3.5-flash\n```\n\n如果你更习惯通过 shell 环境变量注入，也可以这样设置：\n\n```bash\n# macOS \u002F Linux（zsh）\necho 'export AI_BAILIAN_API_KEY=your_api_key' >> ~\u002F.zshrc\nsource ~\u002F.zshrc\n\n# Linux（bash）\necho 'export AI_BAILIAN_API_KEY=your_api_key' >> ~\u002F.bashrc\nsource ~\u002F.bashrc\n```\n\n### 3. 启动依赖服务（可选）\n\n项目提供了 `docker-compose.dev.yml`，可一键启动 PostgreSQL、Redis、RustFS（S3 兼容存储）三个依赖：\n\n```bash\n# 启动依赖服务\ndocker compose -f docker-compose.dev.yml up -d\n\n# 停止依赖服务\ndocker compose -f docker-compose.dev.yml down\n\n# 停止并清除数据\ndocker compose -f docker-compose.dev.yml down -v\n```\n\n启动后默认账号：\n\n| 服务         | 地址             | 账号            | 密码            |\n| ------------ | ---------------- | --------------- | --------------- |\n| PostgreSQL   | `localhost:5432` | `postgres`      | `123456`        |\n| Redis        | `localhost:6379` | -               | -               |\n| RustFS 控制台 | `localhost:9001` | `rustfsadmin`   | `rustfsadmin`   |\n\n> **注意**：首次启动后需浏览器访问 [http:\u002F\u002Flocalhost:9001](http:\u002F\u002Flocalhost:9001) 登录 RustFS 控制台，手动创建名为 `interview-guide` 的 Bucket。使用 `docker-compose.dev.yml` + `:app:bootRun` 时，请确保 `.env` 中的 `APP_STORAGE_ACCESS_KEY` \u002F `APP_STORAGE_SECRET_KEY` 与 RustFS 账号一致，例如都设为 `rustfsadmin`。如果本地已有 MinIO 或其他 S3 兼容存储，也可以直接使用，在 `.env` 中修改 `APP_STORAGE_*` 配置即可。\n\n### 4. 启动应用\n\n**后端：**\n\n```bash\n.\u002Fgradlew :app:bootRun\n```\n\n后端服务启动于 `http:\u002F\u002Flocalhost:8080`\n\n**前端：**\n\n```bash\ncd frontend\ncorepack enable\npnpm install\npnpm dev\n```\n\n前端服务启动于 `http:\u002F\u002Flocalhost:5173`\n\n\n## Docker 快速部署\n\n本项目提供了完整的 Docker 支持，可以一键启动所有服务（前后端、数据库、中间件）。\n\nDocker Compose 编排了 6 个服务：PostgreSQL（pgvector）、Redis、MinIO（S3 兼容存储）、MinIO Bucket 初始化、Spring Boot 后端、React 前端（Nginx）。数据通过 Docker 命名卷持久化，`docker-compose down` 不会丢失数据。\n\n### 1. 前置准备\n\n- 安装 [Docker](https:\u002F\u002Fwww.docker.com\u002Fproducts\u002Fdocker-desktop\u002F) 和 Docker Compose\n- 申请阿里云百炼 API Key（用于 AI 对话功能，申请地址：\u003Chttps:\u002F\u002Fbailian.console.aliyun.com\u002F>）\n\n### 2. 快速启动\n\n在项目根目录下执行：\n\n`.env.example` 中的 PostgreSQL、Redis、MinIO 已与 `docker-compose.yml` 对齐（数据库用户 `postgres` \u002F 密码 `password`，MinIO `minioadmin` \u002F `minioadmin`）。复制为 `.env` 后主要填写 `AI_BAILIAN_API_KEY`；若你曾在旧版本中使用过不同的库密码或对象存储密钥，请同步修改 `.env`，必要时重建 Postgres 卷以免旧数据与密码不一致。\n\n```bash\n# 1. 复制环境变量配置文件\ncp .env.example .env\n\n# 2. 编辑 .env 文件，填入 AI 配置\n# vim .env\n# 必填：AI_BAILIAN_API_KEY=your_key_here\n# 可选：AI_MODEL=qwen3.5-flash   # 默认值为 qwen3.5-flash\n# 也可以在设置页维护 DashScope、Kimi、DeepSeek、GLM、LM Studio 等 Provider\n#\n# 面试参数配置（可选）：\n# APP_INTERVIEW_FOLLOW_UP_COUNT=1         # 每个主问题生成追问数量（默认 1）\n# APP_INTERVIEW_EVALUATION_BATCH_SIZE=8   # 回答评估分批大小（默认 8）\n# APP_AI_CONFIG_ENCRYPTION_KEY=32_chars   # 可选：运行时 Provider API Key 加密密钥\n\n# 3. 构建并启动所有服务\ndocker-compose up -d --build\n```\n\n> **仅启动依赖服务**：如果只想本地开发调试（用 `.\u002Fgradlew :app:bootRun` 启动后端），可以只启动基础设施：`docker compose up -d postgres redis minio createbuckets`。将 `.env.example` 复制为 `.env` 并填写 `AI_BAILIAN_API_KEY` 即可，默认账号与 `docker-compose.yml` 一致。\n\n### 3. 服务访问\n\n启动完成后，您可以通过以下地址访问各个服务：\n\n| 服务             | 地址                                           | 默认账号     | 默认密码     | 说明                   |\n| ---------------- | ---------------------------------------------- | ------------ | ------------ | ---------------------- |\n| **前端应用**     | [http:\u002F\u002Flocalhost](http:\u002F\u002Flocalhost)           | -            | -            | 用户访问入口           |\n| **后端 API**     | [http:\u002F\u002Flocalhost:8080](http:\u002F\u002Flocalhost:8080) | -            | -            | RESTful API            |\n| **接口文档**     | [http:\u002F\u002Flocalhost:8080\u002Fswagger-ui.html](http:\u002F\u002Flocalhost:8080\u002Fswagger-ui.html) | - | - | SpringDoc\u002FSwagger UI |\n| **MinIO 控制台** | [http:\u002F\u002Flocalhost:9001](http:\u002F\u002Flocalhost:9001) | `minioadmin` | `minioadmin` | 对象存储管理           |\n| **MinIO API**    | `localhost:9000`                               | -            | -            | S3 兼容接口            |\n| **PostgreSQL**   | `localhost:5432`                               | `postgres`   | `password`   | 数据库 (包含 pgvector) |\n| **Redis**        | `localhost:6379`                               | -            | -            | 缓存与消息队列         |\n\n### 4. 常用运维命令\n\n```bash\n# 查看服务状态\ndocker-compose ps\n\n# 查看后端日志\ndocker-compose logs -f app\n\n# 拉取新代码后重新构建部署\ndocker-compose up -d --build\n\n# 停止并移除所有服务（数据保留在 Docker 卷中）\ndocker-compose down\n\n# 停止服务并清除数据卷（慎用，会删除数据库和文件）\ndocker-compose down -v\n\n# 清理无用镜像（构建产生的中间层）\ndocker image prune -f\n```\n\n## 使用场景\n\n| 用户角色        | 使用场景                               |\n| --------------- | -------------------------------------- |\n| **求职者**      | 上传简历获取分析建议，进行模拟面试练习 |\n| **HR\u002F招聘人员** | 批量分析简历，评估候选人能力           |\n| **培训机构**    | 提供面试培训服务，管理知识库资源       |\n\n## 常见问题\n\n### Q: 数据库表创建失败\u002F数据丢失\n\n检查 JPA 的 `ddl-auto` 配置。`ddl-auto` 模式对比：\n\n| 模式     | 行为                            | 适用场景      | 数据保留 |\n| -------- | ------------------------------- | ------------- | -------- |\n| **update** | 智能模式：表不存在自动创建，存在则增量更新 | **开发环境（推荐）** | ✅ 保留 |\n| create   | 无条件删除并重建所有表          | 仅首次建表时使用 | ❌ 删除 |\n| validate | 只验证，不修改                  | 生产环境      | ✅ 保留 |\n| none     | 什么都不做                      | 生产环境      | ✅ 保留 |\n\n**推荐配置（已默认）**：\n\n```yaml\njpa:\n  hibernate:\n    ddl-auto: update  # 首次启动自动创建表，后续保留数据并增量更新\n```\n\n⚠️ **注意**：避免使用 `create` 模式，否则每次重启都会删除所有数据！\n\n### Q: 知识库向量化失败\n\n当 `initialize-schema: false` 时，Spring AI **不会自动创建** `vector_store` 表。\n\n```java\nspring:\n  ai:\n    vectorstore:\n      pgvector:\n        initialize-schema: true \n\n```\n\n建议开发环境设置为 true，方便快速启动。生产环境设置为 false，手动管理数据库 schema，避免意外变更。\n\n### Q: 简历分析失败\n\n检查一下阿里云 DashScope API KEY 是否配置正确（申请地址：\u003Chttps:\u002F\u002Fbailian.console.aliyun.com\u002F>）。\n\n### Q: 设置页新增\u002F切换模型后不生效？\n\n运行时 Provider 配置默认写到 `~\u002F.interview-guide\u002Fllm-providers.yml` 和 `~\u002F.interview-guide\u002Fllm-providers.env`。可以在设置页点击测试连接，或调用 `\u002Fapi\u002Fllm-provider\u002Freload` 重新加载配置。Docker 部署时如果希望配置持久化，建议为该目录挂载卷。\n\n### Q: 语音面试无法识别或没有声音？\n\n语音面试的 ASR\u002FTTS 默认也使用 `AI_BAILIAN_API_KEY`。请检查浏览器麦克风权限、后端日志中的 DashScope WebSocket 连接状态，以及设置页里的 ASR\u002FTTS 测试结果。无耳机时可能触发回声录入，建议先使用手动提交模式或佩戴耳机测试。\n\n### Q: 简历分析一直显示\"分析中\"？\n\n检查 Redis 连接和 Stream Consumer 是否正常运行。查看后端日志确认是否有错误。\n\n### Q: PDF 导出失败或中文显示异常？\n\n项目已内置中文字体（珠圆玉润仿宋），支持跨平台导出。如遇到问题，请检查：\n- 字体文件是否存在：`app\u002Fsrc\u002Fmain\u002Fresources\u002Ffonts\u002FZhuqueFangsong-Regular.ttf`\n- 检查日志中的字体加载信息\n- 确认 iText 依赖是否正确\n\n### Q: Windows PowerShell 下后端日志中文乱码？\n\n**原因简述**：后端与 Logback 按 **UTF-8** 输出日志；中文 Windows 下控制台默认多为 **GBK（代码页 936）**，且 PowerShell 的 `$OutputEncoding`、控制台编码若未统一为 UTF-8，显示时就会把同一串字节解释错，出现乱码。\n\n**本项目已做的配置**（一般无需再改）：根目录 `gradle.properties`（Gradle 进程 UTF-8）、`app\u002Fsrc\u002Fmain\u002Fresources\u002Flogback-spring.xml`（控制台日志 UTF-8）、`app\u002Fbuild.gradle` 中 `bootRun` 的 JVM 参数（含 `file.encoding` \u002F `stdout.encoding` \u002F `stderr.encoding`）。\n\n**仍乱码时（PowerShell 侧）**：在启动 `.\\gradlew.bat :app:bootRun` 的同一终端先执行下面一段；或写入 **PowerShell 配置文件**（`$PROFILE`）以便每次自动生效：\n\n```powershell\nchcp 65001 | Out-Null\n[Console]::OutputEncoding = [System.Text.UTF8Encoding]::new($false)\n[Console]::InputEncoding  = [System.Text.UTF8Encoding]::new($false)\n$OutputEncoding = [System.Text.UTF8Encoding]::new($false)\n```\n\n新建或编辑配置文件：`if (!(Test-Path $PROFILE)) { New-Item -Path $PROFILE -ItemType File -Force }`，再 `notepad $PROFILE` 将上述内容粘贴保存；新开终端后生效，或执行 `. $PROFILE` 立即加载。若提示脚本无法执行，可执行一次：`Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned`。\n\n在 PowerShell 中建议使用 `.\\gradlew.bat :app:bootRun`（或仓库根目录的 `.\\gradlew.bat`），避免与执行策略、路径解析相关的问题。\n\n## 贡献\n\n欢迎提交 Issue 和 Pull Request！\n\n## 许可证\n\nAGPL-3.0 License（只要通过网络提供服务，就必须向用户公开修改后的源码）\n","InterviewGuide 是一个基于大语言模型的智能面试辅助平台，集成了简历分析、AI模拟面试和知识库RAG检索等功能。项目采用Spring Boot 4.0、Java 21、Spring AI等技术栈，结合PostgreSQL + pgvector实现向量存储，Redis用于缓存及异步任务处理，同时支持实时语音通信。适合求职者、HR以及培训机构使用，帮助提升面试准备效率和质量。其低学习门槛也使其成为理想的个人学习或毕业设计项目选择。",2,"2026-06-11 03:31:24","trending"]