news 2026/4/3 7:52:17

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Spring Boot 3.3+Java 21+Spring AI+RustFS打造的智能面试平台开源啦!

昨天开源了一个基于 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

系统架构

异步处理流程

简历分析和知识库向量化采用 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[1] 这类成熟的消息队列,也是不想引入太多组件。

  3. 构建工具为什么选择 Gradle?个人更喜欢用 Gradle,也写过相关的文章:Gradle 核心概念总结[2]。

前端技术

技术

版本

说明

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(只要通过网络提供服务,就必须向用户公开修改后的源码)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/1 14:10:41

copy复制浏览器中的对象属性及值

var data_list [] for (i0; i < obj_list.length; i){temp {}for (obj in obj_list[i]){temp[obj] obj_list[i][obj]}console.log(temp)data_list.push(temp) }

作者头像 李华
网站建设 2026/3/28 14:44:01

羽球成长新体验:在吴忠码上俱乐部,遇见更好的自己

在国家二级运动员韩宁波教练的指导下&#xff0c;学员的每一个动作都被细致观察和纠正。俱乐部引入了先进的AI智能化排课系统&#xff0c;根据每位学员的时间、水平和进步速度&#xff0c;自动生成个性化的训练计划。01 专业教练引领走进吴忠码上羽毛球俱乐部&#xff0c;你会立…

作者头像 李华
网站建设 2026/4/2 12:16:25

SpringMVC分块上传大文件有什么技巧?

大文件传输系统解决方案 作为广东某软件有限公司的项目负责人&#xff0c;针对贵司提出的政府级大文件传输系统需求&#xff0c;我司提供以下专业解决方案。 需求分析与痛点解决 核心需求匹配 超大文件传输&#xff1a;支持100G单文件传输&#xff0c;文件夹传输保留层级结…

作者头像 李华
网站建设 2026/3/24 20:28:50

运维系列【仅供参考】:在Ubuntu下安装Apache

在Ubuntu下安装Apache 在Ubuntu下安装Apache 安装过程中可能遇到的问题1: 可能遇到的问题2: 可能遇到的问题3: 在Ubuntu下安装Apache 在Ubuntu下安装软件其实非常方便,Ubuntu提供了apt-get工具,可以使用该工具直接下载安装软件。 在Linux里,系统最高权限账户为root账户…

作者头像 李华
网站建设 2026/3/26 19:22:43

SpringMVC如何处理文件夹上传及目录结构?

湖南某软件公司前端工程师大文件传输方案&#xff08;20G兼容IE8&#xff09; 一、需求分析与技术选型 核心需求拆解&#xff1a; 文件传输&#xff1a; 单文件20G分片上传/下载文件夹递归结构保留&#xff08;含空文件夹&#xff09;传输中断续传&#xff08;MD5校验&#xf…

作者头像 李华
网站建设 2026/4/3 6:48:09

springboot高校车辆校车租赁预约管理系统-vue论文

目录 研究背景与意义系统技术架构系统核心功能创新点与优势应用效果验证结论与展望 开发技术源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01; 以下是关于"SpringBoot高校车辆校车租赁预约管理系统-Vue"论文摘要的参考框架和内…

作者头像 李华