利用元旦假期,我开源了一个大模型智能面试平台+知识库!

你好,我是 Guide。利用元旦假期,我开源了一个基于 Spring Boot 4.0 + Java 21 + Spring AI + PostgreSQL + pgvector + RustFS + Redis 的大模型项目,实现了简历智能分析、AI 模拟面试、知识库 RAG 检索等核心功能。

项目介绍

InterviewGuide 是一个集成了简历分析、模拟面试和知识库管理的智能面试辅助平台。系统利用大语言模型(LLM)和向量数据库技术,为求职者和 HR 提供智能化的简历评估和面试练习服务。

系统架构

提示:架构图采用 draw.io 绘制,导出为 svg 格式,在 Github Dark 模式下的显示效果会有问题。

异步处理流程

简历分析和知识库向量化采用 Redis Stream 异步处理:

arduino 复制代码
上传请求 → 保存文件 → 发送消息到 Stream → 立即返回
                              ↓
                      Consumer 消费消息
                              ↓
                    执行分析/向量化任务
                              ↓
                      更新数据库状态
                              ↓
                   前端轮询获取最新状态

状态流转: PENDINGPROCESSINGCOMPLETED / FAILED

技术栈

后端技术

技术 版本 说明
Spring Boot 4.0 应用框架
Java 21 开发语言
Spring AI 2.0 AI 集成框架
PostgreSQL + pgvector 14+ 关系数据库 + 向量存储
Redis 6+ 缓存 + 消息队列(Stream)
Apache Tika 2.9.2 文档解析
iText 8 8.0.5 PDF 导出
MapStruct 1.6.3 对象映射
Gradle 8.14 构建工具

技术选型常见问题解答:

  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 展示优化
  • 知识库管理页面的下载
  • 异步生成模拟面试评估报告
  • 模拟面试增加追问功能
  • 打通模拟面试和知识库

效果展示

简历与面试

简历库:

简历上传分析:

简历分析详情:

面试记录:

面试详情:

模拟面试:

知识库

知识库管理:

问答助手:

项目结构

bash 复制代码
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. 克隆项目

bash 复制代码
git clone https://github.com/Snailclimb/interview-guide.git
cd interview-guide

2. 配置数据库

sql 复制代码
-- 创建数据库
CREATE DATABASE interview_guide;
​
-- 连接数据库并启用 pgvector 扩展(可选,启动后端SpringAI框架底层会自动创建)
CREATE EXTENSION vector;

3. 配置环境变量

ini 复制代码
# AI API 密钥(阿里云 DashScope)
export AI_BAILIAN_API_KEY=your_api_key

4. 修改应用配置

编辑 app/src/main/resources/application.yml

yaml 复制代码
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. 启动服务

后端:

bash 复制代码
./gradlew bootRun

后端服务启动于 http://localhost:8080

前端:

bash 复制代码
cd frontend
pnpm install
pnpm dev

前端服务启动于 http://localhost:5173

使用场景

用户角色 使用场景
求职者 上传简历获取分析建议,进行模拟面试练习
HR/招聘人员 批量分析简历,评估候选人能力
培训机构 提供面试培训服务,管理知识库资源

常见问题

Q: 简历分析失败

检查一下阿里云 DashScope API KEY 是否配置正确(申请地址: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(只要通过网络提供服务,就必须向用户公开修改后的源码)

相关推荐
桦说编程5 分钟前
记一次 Coding Agent 改动带来的bug与启示
后端·agent·vibecoding
302wanger7 分钟前
Mole-在终端里给Mac做减法
后端
一心只读圣贤书26 分钟前
本地后端环境与前端联调总结(前端小白视角)
后端
Brown.alexis1 小时前
es6知识点5-自备使用
前端·javascript·es6
杨利杰YJlio1 小时前
KB5121003更新详解:安全启动证书、AI组件、资源管理器与安装验证
前端·javascript·后端
忙碌碌粒粒橙1 小时前
《用户付一次钱,你的系统为什么处理了两遍:Webhook 重复投递避坑指南》
后端
数字化探索者笔记1 小时前
从零搭建:VMware 银河麒麟V10部署 OceanBase 4.2.5 企业版集中式数据库
后端
紫菜猫一只1 小时前
Vue 3 与 React 常用写法对比
前端
jinggongszh1 小时前
使用AI协同开发产品条码规则功能——从“理解方案、原型、接口文档”到“落地真实前端代码”
前端·人工智能·mes系统·mes工程架构
渔夫正在掘金1 小时前
Cordis 中文教程:渐进式构建插件化应用
前端·node.js·ai编程