博客 / 詳情

返回

Spring Boot 3.3+Java 21+Spring AI+RustFS打造的智能面試平台開源啦!

你好,我是 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 消費消息
                              ↓
                    執行分析/向量化任務
                              ↓
                      更新數據庫狀態
                              ↓
                   前端輪詢獲取最新狀態

狀態流轉: PENDINGPROCESSINGCOMPLETED / 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 構建工具

技術選型常見問題解答:

  1. 數據存儲為什麼選擇 PostgreSQL + pgvector?PG 的向量數據存儲功能夠用了,精簡架構,不想引入太多組件。
  2. 為什麼引入 Redis?

    • Redis 替代 ConcurrentHashMap 實現面試會話的緩存。
    • 基於 Redis Stream 實現簡歷分析、知識庫向量化等場景的異步(還能解耦,分析和向量化可以使用其他編程語言來做)。不使用 Kafka 這類成熟的消息隊列,也是不想引入太多組件。
  3. 構建工具為什麼選擇 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 展示優化
  • [ ] 知識庫管理頁面的下載
  • [ ] 異步生成模擬面試評估報告
  • [ ] 模擬面試增加追問功能
  • [ ] 打通模擬面試和知識庫

效果展示

簡歷與面試

簡歷庫:

簡歷上傳分析:

簡歷分析詳情:

面試記錄:

面試詳情:

模擬面試:

知識庫

知識庫管理:

問答助手:

page-qa-assistant

項目結構

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(只要通過網絡提供服務,就必須向用户公開修改後的源碼)

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.