01-项目架构设计与技术选型

从零构建AI面试助手:Spring Boot 3 + Vue 3 全栈架构实战


一、前言

1.1 传统面试准备的痛点

在当前的就业市场中,面试准备一直是求职者和HR面临的共同难题。根据调研数据显示,超过70%的求职者在面试前感到焦虑,主要原因包括:

  • 信息不对称:不了解目标公司的面试风格和考察重点
  • 缺乏实战演练:传统刷题方式无法模拟真实面试场景
  • 反馈不及时:自我练习时难以获得专业的改进建议
  • 简历匹配度低:简历与岗位JD匹配度不高,导致简历筛选通过率低下
  • 面试经验难以沉淀:每次面试都是独立事件,无法形成知识积累

1.2 AI赋能面试的新机遇

随着大语言模型(LLM)技术的快速发展,AI正在重塑面试准备的各个环节。AI面试助手可以:

  • 智能模拟面试:基于岗位JD生成针对性面试问题,模拟真实面试官
  • 简历智能优化:分析简历与岗位匹配度,提供优化建议
  • 语音交互能力:支持语音面试,还原真实面试场景
  • 多模型支持:根据不同场景选择最优AI模型
  • 数据驱动决策:记录面试表现,提供量化分析报告

本文将详细介绍如何从零构建一个完整的AI面试助手系统,涵盖技术选型、架构设计、开发实践等全流程。


二、项目背景与需求分析

2.1 项目定位

AI面试助手是一个面向求职者和HR的全栈应用系统,核心定位包括:

维度 描述
目标用户 求职者(初级到高级)、HR、猎头
核心场景 简历优化、模拟面试、笔试题库、面试复盘
技术特色 多模型LLM、语音交互、向量检索、智能推荐
商业模式 免费基础版 + 付费高级版 + 企业定制版

2.2 功能需求分析

2.2.1 核心功能模块
复制代码
┌─────────────────────────────────────────────────────────────┐
│                      AI面试助手系统                          │
├─────────────┬─────────────┬─────────────┬───────────────────┤
│  用户中心    │  简历管理    │  面试中心    │    笔试题库        │
├─────────────┼─────────────┼─────────────┼───────────────────┤
│ • 注册登录   │ • 简历上传   │ • AI模拟面试 │ • 分类题库        │
│ • 套餐管理   │ • 智能解析   │ • 语音面试   │ • 智能组卷        │
│ • 积分系统   │ • 版本管理   │ • 面试记录   │ • 错题本          │
│ • 通知中心   │ • JD匹配分析 │ • 能力评估   │ • 知识点图谱      │
└─────────────┴─────────────┴─────────────┴───────────────────┘
2.2.2 非功能性需求
  • 性能要求:接口响应时间 < 500ms,支持并发用户 1000+
  • 可用性:系统可用性 99.9%,支持故障自动恢复
  • 安全性:JWT认证、敏感数据加密、API限流防刷
  • 扩展性:支持水平扩展,新模型接入零代码改动
  • 可维护性:模块化设计,完善的日志和监控体系

三、技术架构总览

3.1 系统架构图

复制代码
┌─────────────────────────────────────────────────────────────────────────┐
│                              前端层 (Frontend)                           │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐  ┌─────────────────┐ │
│  │   Vue 3     │  │ Element Plus│  │  Pinia      │  │  Vue Router     │ │
│  │  Composition│  │   UI组件库   │  │  状态管理    │  │   路由管理       │ │
│  │    API      │  │             │  │             │  │                 │ │
│  └──────┬──────┘  └─────────────┘  └─────────────┘  └─────────────────┘ │
│         │                                                               │
│         │ HTTP/WebSocket                                                │
│         ▼                                                               │
└─────────────────────────────────────────────────────────────────────────┘
                                    │
                                    ▼
┌─────────────────────────────────────────────────────────────────────────┐
│                           网关层 (Gateway)                               │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐  ┌─────────────────┐ │
│  │   Nginx     │  │   负载均衡   │  │  SSL终结    │  │   静态资源缓存    │ │
│  │  反向代理    │  │             │  │             │  │                 │ │
│  └─────────────┘  └─────────────┘  └─────────────┘  └─────────────────┘ │
└─────────────────────────────────────────────────────────────────────────┘
                                    │
                                    ▼
┌─────────────────────────────────────────────────────────────────────────┐
│                           后端层 (Backend)                               │
│  ┌─────────────────────────────────────────────────────────────────┐   │
│  │                    Spring Boot 3.4.0 Application                  │   │
│  │  ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌────────┐  │   │
│  │  │Controller│ │  Service │ │ Repository│ │  Entity  │ │  Config│  │   │
│  │  │   控制层  │ │  业务层   │ │  数据访问  │ │  实体层   │ │  配置  │  │   │
│  │  └──────────┘ └──────────┘ └──────────┘ └──────────┘ └────────┘  │   │
│  │                                                                  │   │
│  │  ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌────────┐  │   │
│  │  │Spring AI │ │Spring Sec│ │   JWT    │ │  Redis   │ │PostgreSQL│  │   │
│  │  │ AI集成   │ │  安全框架 │ │  认证    │ │  缓存    │ │  数据库  │  │   │
│  │  └──────────┘ └──────────┘ └──────────┘ └──────────┘ └────────┘  │   │
│  └─────────────────────────────────────────────────────────────────┘   │
└─────────────────────────────────────────────────────────────────────────┘
                                    │
                    ┌───────────────┼───────────────┐
                    ▼               ▼               ▼
┌───────────────────────┐ ┌─────────────────┐ ┌─────────────────────┐
│    数据存储层          │ │    缓存层        │ │    外部服务层        │
│  ┌─────────────────┐  │ │  ┌─────────────┐│ │  ┌───────────────┐  │
│  │   PostgreSQL    │  │ │  │    Redis    ││ │  │   OpenAI API  │  │
│  │  关系型数据库    │  │ │  │   缓存/队列  ││ │  │  GPT-4/GPT-3.5│  │
│  │  + pgvector     │  │ │  │   限流/会话  ││ │  └───────────────┘  │
│  └─────────────────┘  │ │  └─────────────┘│ │  ┌───────────────┐  │
│                       │ │                 │ │  │  DeepSeek API │  │
│                       │ │                 │ │  │   深度求索     │  │
│                       │ │                 │ │  └───────────────┘  │
│                       │ │                 │ │  ┌───────────────┐  │
│                       │ │                 │ │  │  MiniMax API  │  │
│                       │ │                 │ │  │   海螺AI       │  │
│                       │ │                 │ │  └───────────────┘  │
└───────────────────────┘ └─────────────────┘ └─────────────────────┘

3.2 数据流向设计

复制代码
用户请求流程:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

1. 用户操作 → Vue 3前端 → Axios请求 → Nginx网关 → Spring Boot后端

2. 认证流程:
   登录请求 → JWT生成 → Token返回 → 前端存储 → 后续请求携带Token

3. AI调用流程:
   面试请求 → 模型选择 → Prompt构建 → LLM API调用 → 流式响应 → 前端展示

4. 数据持久化流程:
   业务操作 → Service处理 → Repository持久化 → PostgreSQL存储

5. 缓存使用场景:
   - 用户会话:Redis Hash存储
   - 热点数据:Redis String缓存
   - 限流控制:Redis Lua脚本实现滑动窗口
   - 消息队列:Redis List实现异步任务

四、核心技术选型详解

4.1 后端技术栈选型

4.1.1 Spring Boot 3.4 核心优势

Spring Boot 3.x 是基于 Spring Framework 6 和 Java 17+ 的重大升级版本,我们选择 3.4.0 的主要原因:

特性 说明 本项目收益
GraalVM原生镜像 支持AOT编译生成原生可执行文件 启动时间从秒级降至毫秒级,内存占用降低50%
虚拟线程支持 Project Loom虚拟线程正式集成 高并发场景下线程资源利用率大幅提升
Observability增强 Micrometer 1.12+ 统一可观测性 链路追踪、指标监控开箱即用
Spring AI集成 官方AI框架支持 LLM调用标准化,多模型切换无缝衔接
** Jakarta EE 9** 包名从javax迁移到jakarta 与新一代Java生态保持一致
4.1.2 Spring AI vs LangChain4j 对比分析

在Java生态中,Spring AI和LangChain4j是两个主要的LLM集成框架,我们最终选择Spring AI:

java 复制代码
// Spring AI 调用示例 - 简洁直观
@Autowired
private ChatClient chatClient;

public String chat(String message) {
    return chatClient.prompt()
        .user(message)
        .call()
        .content();
}

// LangChain4j 调用示例 - 相对复杂
ChatLanguageModel model = OpenAiChatModel.builder()
    .apiKey("your-api-key")
    .modelName("gpt-4")
    .build();

String response = model.generate(UserMessage.from(message)).content().text();
对比维度 Spring AI LangChain4j 本项目选择
生态整合 与Spring生态深度集成 独立框架,需额外配置 Spring AI
配置方式 application.yml声明式配置 代码式配置 Spring AI
自动配置 支持Spring Boot Starter 需手动配置 Spring AI
多模型支持 官方支持10+模型提供商 社区支持较广 Spring AI
流式响应 原生支持Flux流式输出 支持但需额外处理 Spring AI
Prompt管理 PromptTemplate模板引擎 类似功能 相当
向量存储 集成PgVector、Redis等 集成较多向量数据库 Spring AI
社区活跃度 Spring官方维护,更新快 社区驱动 Spring AI

结论:对于已经使用Spring Boot的项目,Spring AI是更自然的选择,配置简洁、生态完善、官方支持有保障。

4.2 前端技术栈选型

4.2.1 Vue 3 + Element Plus 技术组合
typescript 复制代码
// Vue 3 Composition API 示例 - 面试页面逻辑
<script setup lang="ts">
import { ref, onMounted, onUnmounted } from 'vue'
import { useInterviewStore } from '@/stores/interview'
import { ElMessage } from 'element-plus'

const interviewStore = useInterviewStore()
const currentQuestion = ref('')
const isRecording = ref(false)
const messages = ref<Array<{role: string, content: string}>>([])

// 开始语音面试
const startVoiceInterview = async () => {
  try {
    await interviewStore.initVoiceSession()
    isRecording.value = true
    ElMessage.success('语音面试已开始')
  } catch (error) {
    ElMessage.error('初始化失败')
  }
}

// 发送消息
const sendMessage = async (content: string) => {
  messages.value.push({ role: 'user', content })
  const response = await interviewStore.sendMessage(content)
  messages.value.push({ role: 'assistant', content: response })
}
</script>
4.2.2 Vue 3 vs React 技术选型对比
对比维度 Vue 3 React 本项目选择
学习曲线 平缓,模板语法直观 较陡,需掌握JSX和Hooks Vue 3
性能表现 响应式系统,渲染优化好 Virtual DOM,需手动优化 Vue 3
TypeScript支持 原生支持,类型推导完善 需额外配置,生态成熟 相当
组件库生态 Element Plus、Ant Design Vue Ant Design、Material UI Vue 3
企业级后台 Element Plus成熟稳定 Ant Design功能丰富 Vue 3
团队熟悉度 国内使用广泛 大厂使用较多 Vue 3
AI应用案例 快速开发,迭代效率高 生态更丰富 Vue 3

Element Plus 核心优势

  • 企业级中后台UI组件库,组件丰富度国内第一
  • 与Vue 3深度整合,Composition API友好
  • 主题定制能力强,支持暗黑模式
  • 文档完善,中文社区活跃

4.3 数据库选型

4.3.1 PostgreSQL + pgvector 向量存储
sql 复制代码
-- pgvector 扩展启用
CREATE EXTENSION IF NOT EXISTS vector;

-- 创建带向量字段的简历表
CREATE TABLE resumes (
    id BIGSERIAL PRIMARY KEY,
    user_id BIGINT NOT NULL,
    content TEXT NOT NULL,
    embedding VECTOR(1536),  -- OpenAI text-embedding-ada-002维度
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- 创建向量索引 - 支持相似度搜索
CREATE INDEX idx_resumes_embedding ON resumes 
USING ivfflat (embedding vector_cosine_ops) 
WITH (lists = 100);

-- 相似简历检索查询
SELECT id, content, 
       1 - (embedding <=> query_embedding) AS similarity
FROM resumes
WHERE 1 - (embedding <=> query_embedding) > 0.8
ORDER BY embedding <=> query_embedding
LIMIT 10;

PostgreSQL选型理由

特性 MySQL PostgreSQL 本项目选择
JSON支持 JSON类型,功能有限 JSONB类型,索引、查询强大 PostgreSQL
向量扩展 不支持原生向量 pgvector插件成熟 PostgreSQL
全文检索 基础支持 高级全文检索,多语言支持 PostgreSQL
复杂查询 优化器较简单 优化器强大,复杂查询性能好 PostgreSQL
AI应用生态 社区方案较少 与LLM生态整合更好 PostgreSQL
ACID合规 部分存储引擎不完全 完全ACID合规 PostgreSQL
4.3.2 pgvector 向量检索原理
复制代码
向量相似度计算流程:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

1. 文本向量化
   简历文本 → OpenAI Embedding API → 1536维向量

2. 向量存储
   向量 + 元数据 → PostgreSQL + pgvector → 建立IVFFlat索引

3. 相似度检索
   查询文本 → 向量化 → 余弦相似度计算 → 返回Top-K结果

索引算法选择:
- IVFFlat:平衡查询速度和召回率,适合百万级数据
- HNSW:查询速度更快,内存占用更高,适合千万级数据

4.4 缓存层设计

4.4.1 Redis 多场景应用架构
java 复制代码
/**
 * Redis 多场景配置类
 */
@Configuration
public class RedisConfig {
    
    // 场景1:缓存 - 热点数据缓存,TTL 5-30分钟
    @Bean("cacheRedisTemplate")
    public RedisTemplate<String, Object> cacheRedisTemplate(
            RedisConnectionFactory factory) {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(factory);
        // 配置序列化...
        return template;
    }
    
    // 场景2:分布式锁 - 防止并发问题
    public boolean tryLock(String key, String value, long expireTime) {
        Boolean result = redisTemplate.opsForValue()
            .setIfAbsent(key, value, expireTime, TimeUnit.SECONDS);
        return Boolean.TRUE.equals(result);
    }
    
    // 场景3:限流 - 滑动窗口算法
    public boolean rateLimit(String key, int maxRequests, int windowSeconds) {
        long now = System.currentTimeMillis();
        long windowStart = now - windowSeconds * 1000;
        
        redisTemplate.opsForZSet().removeRangeByScore(key, 0, windowStart);
        Long current = redisTemplate.opsForZSet().zCard(key);
        
        if (current != null && current >= maxRequests) {
            return false; // 限流触发
        }
        
        redisTemplate.opsForZSet().add(key, String.valueOf(now), now);
        redisTemplate.expire(key, windowSeconds, TimeUnit.SECONDS);
        return true;
    }
    
    // 场景4:消息队列 - 异步任务处理
    public void enqueue(String queueName, Object message) {
        redisTemplate.opsForList().rightPush(queueName, message);
    }
    
    public Object dequeue(String queueName) {
        return redisTemplate.opsForList().leftPop(queueName, 5, TimeUnit.SECONDS);
    }
}
4.4.2 Redis 应用场景矩阵
应用场景 数据结构 实现方案 业务价值
用户会话 Hash JWT Token黑名单 + 用户状态 支持登出、多端管理
热点数据缓存 String 面试题库、配置信息 降低DB压力,提升响应速度
分布式锁 String + Lua SET NX EX + 唯一标识 防止重复提交、并发问题
API限流 Sorted Set 滑动窗口算法 防止恶意刷接口
异步队列 List LPUSH/BRPOP 简历解析、消息通知异步化
排行榜 Sorted Set ZADD/ZREVRANGE 面试能力排行榜
布隆过滤器 RedisBloom 防止缓存穿透 提升缓存命中率

五、项目模块划分

5.1 后端模块结构

复制代码
ai-interview-guide-backend/
├── pom.xml                              # 父POM,统一管理依赖版本
├── src/
│   └── main/
│       ├── java/com/aiinterview/
│       │   ├── AInterviewApplication.java    # 启动类
│       │   ├── config/                       # 配置类
│       │   │   ├── SecurityConfig.java       # Spring Security配置
│       │   │   ├── RedisConfig.java          # Redis配置
│       │   │   ├── WebConfig.java            # Web跨域配置
│       │   │   └── AiConfig.java             # Spring AI配置
│       │   ├── controller/                   # 控制层
│       │   │   ├── AuthController.java       # 认证接口
│       │   │   ├── ResumeController.java     # 简历接口
│       │   │   ├── InterviewController.java  # 面试接口
│       │   │   ├── QuestionController.java   # 题库接口
│       │   │   └── UserController.java       # 用户接口
│       │   ├── service/                      # 业务层
│       │   │   ├── impl/                     # 实现类
│       │   │   ├── AuthService.java
│       │   │   ├── ResumeService.java
│       │   │   ├── InterviewService.java
│       │   │   └── LlmService.java           # LLM统一调用服务
│       │   ├── repository/                   # 数据访问层
│       │   │   ├── UserRepository.java
│       │   │   ├── ResumeRepository.java
│       │   │   └── InterviewRepository.java
│       │   ├── entity/                       # 实体类
│       │   │   ├── User.java
│       │   │   ├── Resume.java
│       │   │   └── InterviewSession.java
│       │   ├── dto/                          # 数据传输对象
│       │   │   ├── request/                  # 请求DTO
│       │   │   └── response/                 # 响应DTO
│       │   ├── vo/                           # 视图对象
│       │   ├── enums/                        # 枚举类
│       │   │   ├── ModelProvider.java        # 模型提供商枚举
│       │   │   └── UserRole.java             # 用户角色枚举
│       │   ├── exception/                    # 异常处理
│       │   ├── utils/                        # 工具类
│       │   │   ├── JwtUtils.java             # JWT工具
│       │   │   └── SecurityUtils.java        # 安全工具
│       │   └── interceptor/                  # 拦截器
│       │       └── JwtAuthenticationFilter.java
│       └── resources/
│           ├── application.yml               # 主配置
│           ├── application-dev.yml           # 开发环境
│           ├── application-prod.yml          # 生产环境
│           └── prompts/                      # AI Prompt模板
│               ├── interview-system.prompt
│               ├── resume-optimize.prompt
│               └── question-generate.prompt

5.2 前端模块结构

复制代码
ai-interview-guide-frontend/
├── package.json                    # 项目依赖
├── vite.config.ts                  # Vite配置
├── tsconfig.json                   # TypeScript配置
├── index.html                      # 入口HTML
├── src/
│   ├── main.ts                     # 入口文件
│   ├── App.vue                     # 根组件
│   ├── api/                        # API接口封装
│   │   ├── auth.ts                 # 认证相关
│   │   ├── resume.ts               # 简历相关
│   │   ├── interview.ts            # 面试相关
│   │   └── request.ts              # Axios封装
│   ├── components/                 # 公共组件
│   │   ├── common/                 # 通用组件
│   │   ├── interview/              # 面试相关组件
│   │   └── resume/                 # 简历相关组件
│   ├── views/                      # 页面视图
│   │   ├── auth/                   # 认证页面
│   │   │   ├── LoginView.vue
│   │   │   └── RegisterView.vue
│   │   ├── resume/                 # 简历管理
│   │   │   ├── ResumeListView.vue
│   │   │   ├── ResumeUploadView.vue
│   │   │   └── ResumeOptimizeView.vue
│   │   ├── interview/              # 面试中心
│   │   │   ├── InterviewHomeView.vue
│   │   │   ├── InterviewChatView.vue
│   │   │   └── InterviewVoiceView.vue
│   │   ├── question/               # 笔试题库
│   │   └── dashboard/              # 个人中心
│   ├── stores/                     # Pinia状态管理
│   │   ├── auth.ts                 # 用户认证状态
│   │   ├── interview.ts            # 面试状态
│   │   └── resume.ts               # 简历状态
│   ├── router/                     # 路由配置
│   │   └── index.ts
│   ├── utils/                      # 工具函数
│   │   ├── storage.ts              # 本地存储
│   │   ├── validate.ts             # 表单验证
│   │   └── format.ts               # 格式化
│   ├── types/                      # TypeScript类型
│   │   ├── auth.ts
│   │   ├── resume.ts
│   │   └── interview.ts
│   └── assets/                     # 静态资源
│       ├── images/
│       ├── styles/
│       └── icons/

5.3 核心业务模块详解

5.3.1 用户认证模块
复制代码
用户认证流程:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

注册流程:
用户输入 → 参数校验 → 用户名查重 → BCrypt加密密码 → 写入DB → 返回成功

登录流程:
用户输入 → 参数校验 → 查询用户 → 密码比对 → 生成JWT → 返回Token

Token验证:
请求携带Token → JWT拦截器 → 解析验证 → 注入用户上下文 → 放行/拒绝

权限控制:
方法注解 @PreAuthorize("hasRole('PREMIUM')") → 角色校验 → 执行/拒绝
5.3.2 简历管理模块
复制代码
简历处理流程:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

上传流程:
PDF/Word上传 → 文件校验 → 文本提取(PDFBox/POI) → 内容存储 → 向量化 → 写入PgVector

优化流程:
选择简历 → 输入目标JD → 构建Prompt → LLM分析 → 生成优化建议 → 保存版本

匹配分析:
简历向量化 ←→ JD向量化 → 余弦相似度计算 → 匹配度评分 → 生成匹配报告
5.3.3 面试中心模块
复制代码
AI面试流程:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

初始化:
选择岗位类型 → 加载Prompt模板 → 创建Session → 初始化ChatHistory

面试进行:
用户输入 → 上下文组装 → 模型调用 → 流式响应 → 前端展示 → 记录对话

语音面试:
语音输入 → WebRTC采集 → STT识别 → 文本处理 → LLM响应 → TTS合成 → 语音播放

面试评估:
对话结束 → 分析回答质量 → 生成能力雷达图 → 输出改进建议 → 保存面试记录

六、开发环境搭建

6.1 环境要求

组件 版本要求 说明
JDK 21 LTS Spring Boot 3.4最低要求Java 17,推荐21
Node.js 20 LTS Vue 3开发推荐版本
Maven 3.9+ 依赖管理
PostgreSQL 16+ 关系型数据库
Redis 7.0+ 缓存服务
IDE IntelliJ IDEA 2023.3+ 推荐IDE

6.2 后端环境搭建步骤

bash 复制代码
# 1. 克隆项目
git clone https://github.com/your-repo/ai-interview-guide.git
cd ai-interview-guide-backend

# 2. 配置数据库
# 创建PostgreSQL数据库
createdb ai_interview_db

# 启用pgvector扩展
psql ai_interview_db -c "CREATE EXTENSION IF NOT EXISTS vector;"

# 3. 配置Redis
# 启动Redis服务
redis-server

# 4. 配置环境变量
cp .env.example .env
# 编辑.env文件,配置数据库连接、Redis连接、API密钥等

# 5. 编译运行
./mvnw clean install
./mvnw spring-boot:run

# 6. 验证启动
curl http://localhost:8080/actuator/health

6.3 前端环境搭建步骤

bash 复制代码
# 1. 进入前端目录
cd ai-interview-guide-frontend

# 2. 安装依赖
npm install

# 3. 配置环境
# .env.development 文件
VITE_API_BASE_URL=http://localhost:8080/api
VITE_WS_URL=ws://localhost:8080/ws

# 4. 启动开发服务器
npm run dev

# 5. 访问应用
# 浏览器打开 http://localhost:5173

6.4 Docker 一键部署

yaml 复制代码
# docker-compose.yml 配置
version: '3.8'
services:
  postgres:
    image: ankane/pgvector:latest
    environment:
      POSTGRES_DB: ai_interview_db
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: password
    ports:
      - "5432:5432"
    volumes:
      - postgres_data:/var/lib/postgresql/data

  redis:
    image: redis:7-alpine
    ports:
      - "6379:6379"
    volumes:
      - redis_data:/data

  backend:
    build: ./ai-interview-guide-backend
    ports:
      - "8080:8080"
    environment:
      - SPRING_PROFILES_ACTIVE=dev
      - SPRING_DATASOURCE_URL=jdbc:postgresql://postgres:5432/ai_interview_db
      - SPRING_REDIS_HOST=redis
    depends_on:
      - postgres
      - redis

  frontend:
    build: ./ai-interview-guide-frontend
    ports:
      - "80:80"
    depends_on:
      - backend

volumes:
  postgres_data:
  redis_data:

七、总结与下篇预告

7.1 本文总结

本文详细介绍了AI面试助手项目的整体架构设计和技术选型过程,核心要点包括:

  1. 技术栈选择:Spring Boot 3.4 + Vue 3 + PostgreSQL + Redis,全栈现代化技术组合
  2. Spring AI优势:相比LangChain4j更适合Spring生态,配置简洁、官方支持
  3. 向量数据库:pgvector扩展让PostgreSQL具备向量检索能力,满足AI应用需求
  4. Redis多场景应用:缓存、锁、限流、队列,一个组件解决多个问题
  5. 模块化设计:清晰的模块划分,便于团队协作和后续扩展

7.2 项目亮点

  • 多模型支持:OpenAI、DeepSeek、MiniMax等10+模型一键切换
  • 语音交互:完整的语音面试流程,支持STT和TTS
  • 向量检索:基于pgvector的简历智能匹配
  • 企业级安全:JWT认证 + RBAC权限控制 + API限流

7.3 下篇预告

下一篇文章:《Spring Boot 3 项目初始化:从0到1搭建企业级后端框架》

将重点讲解:

  • Spring Boot 3.4 项目初始化配置
  • Maven多模块架构设计
  • 统一返回结果封装
  • 日志与监控配置
  • 项目结构规范与代码示例

敬请期待!


参考资料

  1. Spring Boot 3.4 官方文档
  2. Spring AI 参考文档
  3. Vue 3 官方文档
  4. Element Plus 组件库
  5. pgvector 向量扩展
  6. PostgreSQL 16 文档
  7. Redis 7.0 文档

下篇预告:《Spring Boot 3 项目初始化:从0到1搭建企业级后端框架》

如果本文对你有帮助,欢迎点赞、收藏、评论交流!关注专栏获取更多AI应用开发实战内容。

相关推荐
Han.miracle12 小时前
JDK 1.7 HashMap 多线程扩容为什么会死循环?
java
qcx2312 小时前
【系统学AI】07 ReAct范式:从奠基之作到Reflexion/RAF的演进
前端·人工智能·react.js
小小程序员mono12 小时前
模型进入「日更时代」:GPT-5.6 泄露、Claude 4.8 逼近、Gemini 3.5 上线、国产杀疯了摘要
人工智能·重构·开源·github
yanxiaoyu11012 小时前
小白学习深度学习、强化学习的相关重要内容
人工智能·深度学习·学习
嗝o゚12 小时前
CANN asnumpy 库——昇腾 NPU 原生 NumPy 兼容层
人工智能·numpy·cann·asnumpy
Larcher12 小时前
「Codex + DeepSeek 用户请进:你的对话记录是不是也卡到想砸键盘?」
人工智能·github·编程语言
Black蜡笔小新12 小时前
制造业AI质检工作站/自动化AI算法训练服务器DLTM企业AI算力工作站筑牢制造业品质防线
人工智能·算法·自动化
hughnz12 小时前
AI 掌舵:量化上游石油和天然气的下一轮价值革命
人工智能