你好,我是 Guide。利用元旦假期,我開源了一個基於 Spring Boot 3.3 + Java 21 + Spring AI + PostgreSQL + pgvector + RustFS + Redis 的大模型項目,實現了簡歷智能分析、AI 模擬面試、知識庫 RAG 檢索等核心功能。
項目介紹
InterviewGuide 是一個集成了簡歷分析、模擬面試和知識庫管理的智能面試輔助平台。系統利用大語言模型(LLM)和向量數據庫技術,為求職者和 HR 提供智能化的簡歷評估和麪試練習服務。
- Github 地址:https://github.com/Snailclimb/interview-guide
- Gitee 地址:https://gitee.com/SnailClimb/interview-guide
感興趣的朋友可以拉下來試試,歡迎 Star 鼓勵一下!功能會繼續完善改進,現在只是最基礎版本!
系統架構
異步處理流程:
簡歷分析和知識庫向量化採用 Redis Stream 異步處理:
上傳請求 → 保存文件 → 發送消息到 Stream → 立即返回
↓
Consumer 消費消息
↓
執行分析/向量化任務
↓
更新數據庫狀態
↓
前端輪詢獲取最新狀態
狀態流轉: PENDING → PROCESSING → COMPLETED / FAILED
技術棧
後端技術
| 技術 | 版本 | 説明 |
|---|---|---|
| Spring Boot | 3.3 | 應用框架 |
| Java | 21 | 開發語言 |
| Spring AI | 1.1.2 | AI 集成框架 |
| PostgreSQL + pgvector | 14+ | 關係數據庫 + 向量存儲 |
| Redis | 6+ | 緩存 + 消息隊列(Stream) |
| Apache Tika | 2.9.2 | 文檔解析 |
| iText 7 | 7.2.5 | PDF 導出 |
| MapStruct | 1.5.5.Final | 對象映射 |
| Gradle | 8.8 | 構建工具 |
技術選型常見問題解答:
- 數據存儲為什麼選擇 PostgreSQL + pgvector?PG 的向量數據存儲功能夠用了,精簡架構,不想引入太多組件。
-
為什麼引入 Redis?
- Redis 替代
ConcurrentHashMap實現面試會話的緩存。 - 基於 Redis Stream 實現簡歷分析、知識庫向量化等場景的異步(還能解耦,分析和向量化可以使用其他編程語言來做)。不使用 Kafka 這類成熟的消息隊列,也是不想引入太多組件。
- Redis 替代
- 構建工具為什麼選擇 Gradle?個人更喜歡用 Gradle,也寫過相關的文章:Gradle 核心概念總結。
前端技術
| 技術 | 版本 | 説明 |
|---|---|---|
| React | 18.3 | UI 框架 |
| TypeScript | 5.6 | 開發語言 |
| Vite | 5.4 | 構建工具 |
| Tailwind CSS | 4.1 | 樣式框架 |
| React Router | 7.11 | 路由管理 |
| Framer Motion | 12.23 | 動畫庫 |
| Recharts | 3.6 | 圖表庫 |
| Lucide React | - | 圖標庫 |
功能特性
簡歷管理模塊
- 多格式支持:PDF、DOCX、DOC、TXT
- 異步分析:上傳後立即返回,後台 Redis Stream 處理
- 狀態輪詢:實時顯示分析進度(待分析/分析中/已完成/失敗)
- 自動重試:分析失敗自動重試(最多 3 次)
- 簡歷去重:基於內容哈希檢測重複
- PDF 報告導出
模擬面試模塊
- 基於簡歷生成個性化面試問題
- 實時問答交互
- 多維度評分(技術能力、溝通能力等)
- 面試報告生成和導出
- 雷達圖可視化展示
- 面試歷史統計
知識庫管理模塊
- 多格式支持:PDF、DOCX、DOC、TXT、Markdown
- 文檔上傳和自動分塊
- 異步向量化處理
- RAG 檢索增強生成
- 流式響應(SSE)
- 智能問答對話
- 知識庫統計信息
TODO
- [ ] 問答助手的 Markdown 展示優化
- [ ] 知識庫管理頁面的下載
- [ ] 異步生成模擬面試評估報告
- [ ] 模擬面試增加追問功能
- [ ] 打通模擬面試和知識庫
效果展示
簡歷與面試
簡歷庫:
簡歷上傳分析:
簡歷分析詳情:
面試記錄:
面試詳情:
模擬面試:
知識庫
知識庫管理:
問答助手:
項目結構
interview-guide/
├── app/ # 後端應用
│ ├── src/main/java/interview/guide/
│ │ ├── App.java # 主啓動類
│ │ ├── common/ # 通用模塊
│ │ │ ├── config/ # 配置類
│ │ │ ├── exception/ # 異常處理
│ │ │ └── result/ # 統一響應
│ │ ├── infrastructure/ # 基礎設施
│ │ │ ├── export/ # PDF 導出
│ │ │ ├── file/ # 文件處理
│ │ │ ├── redis/ # Redis 服務
│ │ │ └── storage/ # 對象存儲
│ │ └── modules/ # 業務模塊
│ │ ├── interview/ # 面試模塊
│ │ ├── knowledgebase/ # 知識庫模塊
│ │ └── resume/ # 簡歷模塊
│ └── src/main/resources/
│ ├── application.yml # 應用配置
│ └── prompts/ # AI 提示詞模板
│
├── frontend/ # 前端應用
│ ├── src/
│ │ ├── api/ # API 接口
│ │ ├── components/ # 公共組件
│ │ ├── pages/ # 頁面組件
│ │ ├── types/ # 類型定義
│ │ └── utils/ # 工具函數
│ ├── package.json
│ └── vite.config.ts
│
└── README.md
快速開始
環境要求:
| 依賴 | 版本 | 必需 |
|---|---|---|
| JDK | 21+ | 是 |
| Node.js | 18+ | 是 |
| PostgreSQL | 14+ | 是 |
| pgvector 擴展 | - | 是 |
| Redis | 6+ | 是 |
| S3 兼容存儲 | - | 是 |
1. 克隆項目
git clone https://github.com/Snailclimb/interview-guide.git
cd interview-guide
2. 配置數據庫
-- 創建數據庫
CREATE DATABASE interview_guide;
-- 連接數據庫並啓用 pgvector 擴展(可選,啓動後端SpringAI框架底層會自動創建)
CREATE EXTENSION vector;
3. 配置環境變量
# AI API 密鑰(阿里雲 DashScope)
export AI_BAILIAN_API_KEY=your_api_key
4. 修改應用配置
編輯 app/src/main/resources/application.yml:
spring:
# PostgreSQL數據庫配置
datasource:
url: jdbc:postgresql://localhost:5432/interview_guide
username: your_username
password: your_password
data:
redis:
host: localhost
port: 6379
# RustFS (S3兼容) 存儲配置
app:
storage:
endpoint: http://localhost:9000
access-key: your_access_key
secret-key: your_secret_key
bucket: interview-guide
# Redisson配置
redisson:
config: |
singleServerConfig:
address: "redis://localhost:6379"
database: 0
idleConnectionTimeout: 10000
connectTimeout: 10000
timeout: 3000
retryAttempts: 3
retryInterval: 1500
password: null
subscriptionsPerConnection: 5
clientName: null
subscriptionConnectionMinimumIdleSize: 1
subscriptionConnectionPoolSize: 50
connectionMinimumIdleSize: 10
connectionPoolSize: 64
dnsMonitoringInterval: 5000
5. 啓動服務
後端:
./gradlew bootRun
後端服務啓動於 http://localhost:8080
前端:
cd frontend
pnpm install
pnpm dev
前端服務啓動於 http://localhost:5173
使用場景
| 用户角色 | 使用場景 |
|---|---|
| 求職者 | 上傳簡歷獲取分析建議,進行模擬面試練習 |
| HR/招聘人員 | 批量分析簡歷,評估候選人能力 |
| 培訓機構 | 提供面試培訓服務,管理知識庫資源 |
常見問題
Q: 簡歷分析失敗
檢查一下阿里雲 DashScope API KEY 是否配置正確(申請地址:https://bailian.console.aliyun.com/)。
Q: 簡歷分析一直顯示"分析中"?
檢查 Redis 連接和 Stream Consumer 是否正常運行。查看後端日誌確認是否有錯誤。
Q: 知識庫問答沒有響應?
確認知識庫已完成向量化(狀態為 COMPLETED),檢查 pgvector 擴展是否正確安裝。
Q: PDF 導出失敗?
檢查 iText 依賴是否正確,確認字體文件存在。
分支説明
| 分支 | 説明 |
|---|---|
master |
主分支,包含完整功能(Redis Stream 異步處理) |
v1.0-without-redis |
基礎版本,同步處理,無 Redis 依賴 |
貢獻
歡迎提交 Issue 和 Pull Request!
許可證
AGPL-3.0 License(只要通過網絡提供服務,就必須向用户公開修改後的源碼)