前言标签Spring AI、RAG、PGVector、Redis、DeepSeek、知识库、AI教育平台、Java项目实战适用人群Java开发工程师、AI应用开发者、应届生毕设、企业项目开发项目名称EduAgentX 智能教育知识库系统前两篇文章我们已经掌握了Spring AI基础开发ChatClient使用Prompt工程Embedding向量化PGVector向量数据库RAG检索增强生成Tool CallingAgent开发思想但很多开发者学完之后仍然会有一个问题我知道这些概念但不知道如何真正落地一个项目。所以本篇文章直接以一个完整项目为例带你从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组装三、数据库设计用户表CREATETABLEsys_user(idBIGINTPRIMARYKEY,usernameVARCHAR(50),passwordVARCHAR(100),create_timeDATETIME);课程表CREATETABLEcourse(idBIGINTPRIMARYKEY,course_nameVARCHAR(100),teacher_nameVARCHAR(50),descriptionTEXT);AI聊天记录表CREATETABLEai_chat_record(idBIGINTPRIMARYKEY,user_idBIGINT,questionTEXT,answerTEXT,create_timeDATETIME);知识库文档表CREATETABLEknowledge_document(idBIGINTPRIMARYKEY,titleVARCHAR(255),contentLONGTEXT,statusTINYINT,create_timeDATETIME);四、知识库文档上传设计企业项目中知识来源PDF Word Markdown Excel TXT 网页内容例如上传Java面试宝典.pdf后台接口PostMapping(/upload)publicResultupload(MultipartFilefile){returnknowledgeService.upload(file);}处理流程上传文件 ↓ 解析内容 ↓ 切片 ↓ 向量化 ↓ 存入PGVector五、文档切片Chunk很多新人直接把100页PDF发送给大模型。这是错误的。原因Token限制。正确方式切片例如Java线程池 核心线程数 最大线程数 阻塞队列切成Chunk1 Chunk2 Chunk3每块300~500字最佳。Spring AI支持TokenTextSplitter代码TokenTextSplittersplitternewTokenTextSplitter();ListDocumentdocssplitter.apply(List.of(document));结果一个文档 ↓ 多个Chunk六、Embedding向量化切片后文字模型无法检索。需要向量化注入AutowiredprivateEmbeddingModelembeddingModel;执行EmbeddingResponseresponseembeddingModel.call(newEmbeddingRequest(List.of(content),EmbeddingOptionsBuilder.builder().build()));结果Java线程池 ↓ [0.11,0.35,0.77...]七、接入PGVectorMaven依赖dependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-pgvector-store/artifactId/dependency配置spring:datasource:url:jdbc:postgresql://localhost:5432/eduagentx存储向量vectorStore.add(List.of(newDocument(content)));数据库内容 向量同时保存。八、用户提问流程学生输入什么是Redis缓存穿透系统执行问题 ↓ Embedding ↓ 向量搜索 ↓ 获取相关文档 ↓ 构造Prompt ↓ 调用DeepSeek ↓ 返回答案九、核心RAG代码实现查询知识ListDocumentdocsvectorStore.similaritySearch(question);获取Redis缓存穿透 Redis布隆过滤器 Redis缓存击穿相关内容。构造PromptStringprompt 你是一名Java高级讲师。 请根据以下知识回答 %s 用户问题 %s .formatted(docs.toString(),question);调用模型StringanswerchatClient.prompt(prompt).call().content();返回缓存穿透指...十、聊天记忆实现普通聊天问一次 忘一次用户我叫张三下一句我叫什么AI不知道。解决Chat MemoryRedis存储user:1001:chat格式[{role:user,content:我叫张三},{role:assistant,content:好的}]Spring AI支持MessageChatMemoryAdvisor配置AdvisoradvisornewMessageChatMemoryAdvisor(chatMemory);效果连续对话实现。十一、热点问题缓存优化例如学生频繁提问什么是SpringMVC 什么是Redis每次都调用模型。成本极高。方案Redis缓存。Keyai:question:hash流程问题 ↓ Redis查询 ↓ 存在 ↓ 直接返回 ↓ 不存在 ↓ 调用AI ↓ 写入RedisJava实现StringcacheredisTemplate.opsForValue().get(key);if(cache!null){returncache;}成本直接下降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 应用项目。
Spring AI 实战指南(三):从0到1打造企业级 AI 知识库项目(EduAgentX实战版)
前言标签Spring AI、RAG、PGVector、Redis、DeepSeek、知识库、AI教育平台、Java项目实战适用人群Java开发工程师、AI应用开发者、应届生毕设、企业项目开发项目名称EduAgentX 智能教育知识库系统前两篇文章我们已经掌握了Spring AI基础开发ChatClient使用Prompt工程Embedding向量化PGVector向量数据库RAG检索增强生成Tool CallingAgent开发思想但很多开发者学完之后仍然会有一个问题我知道这些概念但不知道如何真正落地一个项目。所以本篇文章直接以一个完整项目为例带你从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组装三、数据库设计用户表CREATETABLEsys_user(idBIGINTPRIMARYKEY,usernameVARCHAR(50),passwordVARCHAR(100),create_timeDATETIME);课程表CREATETABLEcourse(idBIGINTPRIMARYKEY,course_nameVARCHAR(100),teacher_nameVARCHAR(50),descriptionTEXT);AI聊天记录表CREATETABLEai_chat_record(idBIGINTPRIMARYKEY,user_idBIGINT,questionTEXT,answerTEXT,create_timeDATETIME);知识库文档表CREATETABLEknowledge_document(idBIGINTPRIMARYKEY,titleVARCHAR(255),contentLONGTEXT,statusTINYINT,create_timeDATETIME);四、知识库文档上传设计企业项目中知识来源PDF Word Markdown Excel TXT 网页内容例如上传Java面试宝典.pdf后台接口PostMapping(/upload)publicResultupload(MultipartFilefile){returnknowledgeService.upload(file);}处理流程上传文件 ↓ 解析内容 ↓ 切片 ↓ 向量化 ↓ 存入PGVector五、文档切片Chunk很多新人直接把100页PDF发送给大模型。这是错误的。原因Token限制。正确方式切片例如Java线程池 核心线程数 最大线程数 阻塞队列切成Chunk1 Chunk2 Chunk3每块300~500字最佳。Spring AI支持TokenTextSplitter代码TokenTextSplittersplitternewTokenTextSplitter();ListDocumentdocssplitter.apply(List.of(document));结果一个文档 ↓ 多个Chunk六、Embedding向量化切片后文字模型无法检索。需要向量化注入AutowiredprivateEmbeddingModelembeddingModel;执行EmbeddingResponseresponseembeddingModel.call(newEmbeddingRequest(List.of(content),EmbeddingOptionsBuilder.builder().build()));结果Java线程池 ↓ [0.11,0.35,0.77...]七、接入PGVectorMaven依赖dependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-pgvector-store/artifactId/dependency配置spring:datasource:url:jdbc:postgresql://localhost:5432/eduagentx存储向量vectorStore.add(List.of(newDocument(content)));数据库内容 向量同时保存。八、用户提问流程学生输入什么是Redis缓存穿透系统执行问题 ↓ Embedding ↓ 向量搜索 ↓ 获取相关文档 ↓ 构造Prompt ↓ 调用DeepSeek ↓ 返回答案九、核心RAG代码实现查询知识ListDocumentdocsvectorStore.similaritySearch(question);获取Redis缓存穿透 Redis布隆过滤器 Redis缓存击穿相关内容。构造PromptStringprompt 你是一名Java高级讲师。 请根据以下知识回答 %s 用户问题 %s .formatted(docs.toString(),question);调用模型StringanswerchatClient.prompt(prompt).call().content();返回缓存穿透指...十、聊天记忆实现普通聊天问一次 忘一次用户我叫张三下一句我叫什么AI不知道。解决Chat MemoryRedis存储user:1001:chat格式[{role:user,content:我叫张三},{role:assistant,content:好的}]Spring AI支持MessageChatMemoryAdvisor配置AdvisoradvisornewMessageChatMemoryAdvisor(chatMemory);效果连续对话实现。十一、热点问题缓存优化例如学生频繁提问什么是SpringMVC 什么是Redis每次都调用模型。成本极高。方案Redis缓存。Keyai:question:hash流程问题 ↓ Redis查询 ↓ 存在 ↓ 直接返回 ↓ 不存在 ↓ 调用AI ↓ 写入RedisJava实现StringcacheredisTemplate.opsForValue().get(key);if(cache!null){returncache;}成本直接下降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 应用项目。