前言

标签:Spring AI、RAG、PGVector、Redis、DeepSeek、知识库、AI教育平台、Java项目实战
适用人群:Java开发工程师、AI应用开发者、应届生毕设、企业项目开发
项目名称:EduAgentX 智能教育知识库系统

前两篇文章我们已经掌握了:

  • Spring AI基础开发
  • ChatClient使用
  • Prompt工程
  • Embedding向量化
  • PGVector向量数据库
  • RAG检索增强生成
  • Tool Calling
  • Agent开发思想

但很多开发者学完之后仍然会有一个问题:

我知道这些概念,但不知道如何真正落地一个项目。

所以本篇文章直接以一个完整项目为例,带你从0到1搭建:

EduAgentX AI知识库系统

实现效果:

学生提问

↓

AI检索课程资料

↓

结合知识库回答

↓

返回准确答案

而不是普通AI的:

我不知道

一、项目背景

假设我们开发一个在线教育平台。

目前已有:

用户系统
课程系统
考试系统
学习记录系统

学生经常提问:

什么是SpringMVC?

Redis缓存穿透是什么?

Java线程池有哪些参数?

我这次考试为什么成绩下降?

传统方式:

老师回答

问题:

成本高
效率低
无法24小时服务

于是增加:

AI学习助手

二、项目整体架构设计

整体架构如下:

                    Vue3

                      │

               Spring Gateway

                      │

          ┌──────────┴──────────┐

          │                     │

      用户服务            AI知识库服务

                                │

                      Spring AI

                                │

       ┌─────────────┬─────────────┐

       │             │             │

    Redis        PGVector      DeepSeek

       │

     MySQL

职责划分:

MySQL

存储:

用户
课程
考试
成绩

Redis

缓存:

用户信息

课程详情

热点问题

聊天记录

PGVector

存储:

知识库向量

DeepSeek

负责:

理解问题

生成答案

Spring AI

负责:

统一调用模型

向量检索

Prompt组装

三、数据库设计

用户表

CREATE TABLE sys_user(
    id BIGINT PRIMARY KEY,
    username VARCHAR(50),
    password VARCHAR(100),
    create_time DATETIME
);

课程表

CREATE TABLE course(
    id BIGINT PRIMARY KEY,
    course_name VARCHAR(100),
    teacher_name VARCHAR(50),
    description TEXT
);

AI聊天记录表

CREATE TABLE ai_chat_record(
    id BIGINT PRIMARY KEY,
    user_id BIGINT,
    question TEXT,
    answer TEXT,
    create_time DATETIME
);

知识库文档表

CREATE TABLE knowledge_document(
    id BIGINT PRIMARY KEY,
    title VARCHAR(255),
    content LONGTEXT,
    status TINYINT,
    create_time DATETIME
);

四、知识库文档上传设计

企业项目中知识来源:

PDF

Word

Markdown

Excel

TXT

网页内容

例如上传:

Java面试宝典.pdf

后台接口:

@PostMapping("/upload")
public Result upload(
        MultipartFile file){
    
    return knowledgeService.upload(file);
}

处理流程:

上传文件

↓

解析内容

↓

切片

↓

向量化

↓

存入PGVector

五、文档切片(Chunk)

很多新人直接把:

100页PDF

发送给大模型。

这是错误的。


原因:

Token限制。


正确方式:

切片

例如:

Java线程池

核心线程数

最大线程数

阻塞队列

切成:

Chunk1

Chunk2

Chunk3

每块:

300~500字

最佳。


Spring AI支持:

TokenTextSplitter

代码:

TokenTextSplitter splitter =
new TokenTextSplitter();

List<Document> docs =
splitter.apply(
List.of(document)
);

结果:

一个文档

↓

多个Chunk

六、Embedding向量化

切片后:

文字

模型无法检索。


需要:

向量化

注入:

@Autowired
private EmbeddingModel embeddingModel;

执行:

EmbeddingResponse response =
embeddingModel.call(
new EmbeddingRequest(
List.of(content),
EmbeddingOptionsBuilder
.builder()
.build()
)
);

结果:

Java线程池

↓

[0.11,0.35,0.77...]

七、接入PGVector

Maven依赖

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>
        spring-ai-pgvector-store
    </artifactId>
</dependency>

配置

spring:
  datasource:
    url: jdbc:postgresql://localhost:5432/eduagentx

存储向量

vectorStore.add(
List.of(
new Document(content)
)
);

数据库:

内容

+

向量

同时保存。


八、用户提问流程

学生输入:

什么是Redis缓存穿透?

系统执行:

问题

↓

Embedding

↓

向量搜索

↓

获取相关文档

↓

构造Prompt

↓

调用DeepSeek

↓

返回答案

九、核心RAG代码实现

查询知识:

List<Document> docs =
vectorStore.similaritySearch(
question
);

获取:

Redis缓存穿透

Redis布隆过滤器

Redis缓存击穿

相关内容。


构造Prompt:

String prompt = """
你是一名Java高级讲师。

请根据以下知识回答:

%s

用户问题:

%s
"""
.formatted(
docs.toString(),
question
);

调用模型:

String answer =
chatClient
.prompt(prompt)
.call()
.content();

返回:

缓存穿透指...

十、聊天记忆实现

普通聊天:

问一次

忘一次

用户:

我叫张三

下一句:

我叫什么?

AI不知道。


解决:

Chat Memory

Redis存储:

user:1001:chat

格式:

[
 {
   "role":"user",
   "content":"我叫张三"
 },
 {
   "role":"assistant",
   "content":"好的"
 }
]

Spring AI支持:

MessageChatMemoryAdvisor

配置:

Advisor advisor =
new MessageChatMemoryAdvisor(
chatMemory
);

效果:

连续对话

实现。


十一、热点问题缓存优化

例如:

学生频繁提问:

什么是SpringMVC?

什么是Redis?

每次都调用模型。

成本极高。


方案:

Redis缓存。


Key:

ai:question:hash

流程:

问题

↓

Redis查询

↓

存在

↓

直接返回

↓

不存在

↓

调用AI

↓

写入Redis

Java实现:

String cache =
redisTemplate.opsForValue()
.get(key);

if(cache != null){
    return cache;
}

成本直接下降:

70%以上

十二、Prompt工程优化

很多项目效果差:

不是模型问题。

而是Prompt垃圾。


错误Prompt:

解释Redis

优化后:

你是一位拥有10年经验的Java架构师。

请从以下几个方面解释Redis:

1. 定义

2. 核心数据结构

3. 使用场景

4. 面试重点

要求:

通俗易懂
包含代码示例

回答质量提升明显。


十三、权限控制设计

企业知识库必须做权限。


例如:

学生:

只能访问课程资料

教师:

访问全部资料

管理员:

访问系统文档

实现:

if(role.equals("student")){
    queryCourseDoc();
}

避免:

数据泄露

十四、AI学习助手升级

在EduAgentX中。


基础版:

问

↓

答

升级版:

分析成绩

↓

发现薄弱知识点

↓

推荐课程

↓

生成学习计划

例如:

学生:

Java成绩65分

AI:

集合框架掌握较差

建议学习:

ArrayList

HashMap

ConcurrentHashMap

十五、企业部署方案

开发环境:

Docker

生产环境:

Nginx

↓

Spring Boot

↓

Redis集群

↓

PostgreSQL

↓

PGVector

↓

DeepSeek

推荐配置:

4核8G

Redis 4G

PostgreSQL 8G

即可支撑:

5000+
在线用户

十六、项目亮点(简历可写)

如果你准备找工作。

项目描述可以写:


EduAgentX智能教育平台

技术栈:

Spring Boot

Spring AI

DeepSeek

PGVector

Redis

MySQL

Vue3

项目亮点:

1. 基于Spring AI实现RAG知识库

2. 使用PGVector完成向量检索

3. Redis缓存热点问题

4. 实现多轮对话记忆

5. 支持PDF知识库导入

6. 支持课程资料智能问答

7. AI生成学习计划

8. Agent辅助学习分析

总结

当下企业真正需要的已经不是:

调用一下ChatGPT接口

而是:

Spring AI

+

RAG

+

向量数据库

+

Redis

+

Agent

构建能够解决实际业务问题的 AI 系统。

如果你把这套 EduAgentX AI知识库项目 完整做出来,无论是校招还是社招,都已经具备了一个比较有竞争力的 AI 应用项目。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐