# 前言

标签:Spring AI、DeepSeek、Agent、PGVector、Redis、RAG、Java AI开发、企业级项目
项目名称:EduAgentX-AI 智能学习助手
技术栈:Spring Boot 3.5 + Spring AI 1.x + DeepSeek + PostgreSQL + PGVector + Redis + Vue3

如果你准备找工作或者准备做一个真正有亮点的项目,那么仅仅实现:

chatClient.prompt("你好")

这样的 AI 聊天功能是远远不够的。

因为现在面试官真正感兴趣的是:

你是否真正理解 AI 应用架构?

例如:

  • 如何实现知识库?
  • 如何实现向量检索?
  • 如何实现多轮对话?
  • 如何实现 Agent?
  • 如何实现 Tool Calling?
  • 如何降低 Token 成本?
  • 如何保证回答准确率?

这些问题才是 AI 项目的核心。

本篇文章将带你完整设计一个企业级 AI 项目。


一、项目目标

我们要实现:

EduAgentX AI学习助手

核心能力:

AI问答

学生提问

↓

AI回答

知识库检索

课程资料

↓

向量搜索

↓

精准回答

学习规划

分析成绩

↓

推荐课程

↓

生成学习计划

Agent执行

查询成绩

查询课程

生成报告

自动分析

二、整体架构设计

企业级架构如下:

                    Vue3

                      │

                 Gateway

                      │

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

         │                         │

      用户服务                AI服务

                                   │

                             Spring AI

                                   │

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

      │              │              │

    Redis        PGVector       DeepSeek

      │

    MySQL

职责说明:

组件 作用
MySQL 业务数据
Redis 缓存、记忆
PGVector 向量存储
DeepSeek 大模型
Spring AI AI编排
Agent 自动执行任务

三、项目目录设计

推荐目录:

eduagentx-ai

├── controller
│
├── service
│
├── ai
│   ├── rag
│   ├── agent
│   ├── tool
│   ├── memory
│   └── prompt
│
├── vector
│
├── redis
│
├── config
│
└── entity

很多新人喜欢:

controller

service

mapper

全部堆一起。


AI项目必须模块化。


四、Maven依赖

核心依赖:

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>
        spring-ai-starter-model-openai
    </artifactId>
</dependency>

PGVector:

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

Redis:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>
        spring-boot-starter-data-redis
    </artifactId>
</dependency>

PostgreSQL:

<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
</dependency>

五、接入DeepSeek

目前国内企业最常用:

DeepSeek-V3
DeepSeek-R1

配置:

spring:

  ai:

    openai:

      base-url:
        https://api.deepseek.com

      api-key:
        sk-xxxxxxxx

注意:

DeepSeek兼容:

OpenAI API

因此:

ChatClient

代码完全不需要修改。


六、ChatClient封装

企业开发:

不要每个地方直接调用。


封装:

@Component
public class AiChatService {

    @Autowired
    private ChatClient chatClient;

    public String chat(String msg){

        return chatClient
                .prompt(msg)
                .call()
                .content();
    }

}

Controller:

@GetMapping("/chat")
public String chat(String msg){

    return aiChatService.chat(msg);

}

统一维护。


七、知识库设计

很多人以为:

上传PDF

↓

直接问

就叫知识库。


实际上:

完整流程:

文档

↓

切片

↓

Embedding

↓

向量存储

↓

检索

↓

Prompt增强

↓

大模型回答

八、文档切片

例如:

Java面试宝典.pdf

100页

不能直接向量化。


需要:

Chunk

Spring AI:

TokenTextSplitter splitter =
new TokenTextSplitter();

执行:

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

结果:

Chunk1

Chunk2

Chunk3

推荐大小:

300~500 Token

九、Embedding实现

注入:

@Autowired
private EmbeddingModel embeddingModel;

生成向量:

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

返回:

[0.12,0.35,0.88...]

十、PGVector接入

建表:

CREATE EXTENSION vector;

向量表:

CREATE TABLE knowledge_vector(

    id BIGSERIAL PRIMARY KEY,

    content TEXT,

    embedding vector(1536)

);

Spring AI:

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

自动存储。


十一、RAG检索实现

用户:

什么是Redis缓存穿透?

执行:

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

得到:

Redis缓存穿透

Redis布隆过滤器

相关内容。


拼接Prompt:

String prompt = """
请根据以下知识回答:

%s

问题:

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

发送:

chatClient
.prompt(prompt)
.call()
.content();

十二、多轮对话记忆

用户:

我叫张三

下一句:

我叫什么?

需要:

Memory

能力。


Redis实现

Key:

chat:1001

Value:

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

Spring AI:

MessageChatMemoryAdvisor

配置:

chatClient
.prompt(msg)
.advisors(
memoryAdvisor
)
.call();

十三、Redis缓存优化

热门问题:

什么是Redis

什么是IOC

什么是线程池

每天被问:

10000+

次。


解决:

缓存答案

流程:

问题

↓

MD5

↓

Redis

↓

存在返回

↓

不存在调用模型

代码:

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

成本下降:

70%

以上。


十四、Tool开发规范

企业项目:

不要写:

public String test(){}

推荐:

@Service
public class ScoreTool {
}

一个工具:

一个职责

例如:

成绩工具

课程工具

考试工具

学习计划工具

分离。


十五、成绩分析Tool

例如:

@Service
public class ScoreTool {

    public String
    analyse(Long userId){

        return """
        Java:85

        MySQL:78

        Redis:60
        """;
    }
}

注册:

chatClient
.prompt(question)
.tools(
scoreTool
)
.call();

模型自动调用。


十六、课程推荐Tool

@Service
public class CourseTool {

    public String recommend(
            String weakPoint){

        return "Redis高级课程";
    }
}

Agent:

分析成绩

↓

发现Redis弱

↓

调用课程工具

↓

推荐课程

十七、学习计划Tool

@Service
public class PlanTool {

    public String create(){

        return """
        第1周:

        Redis基础

        第2周:

        Redis实战
        """;
    }
}

最终形成:

完整学习规划

十八、Agent设计

真正Agent:

用户问题

↓

分析意图

↓

调用工具

↓

获取结果

↓

再次推理

↓

返回答案

例如:

用户:

根据我最近成绩
生成学习计划

Agent:

调用ScoreTool

↓

分析弱项

↓

调用CourseTool

↓

调用PlanTool

↓

生成结果

十九、生产环境优化

企业项目必须考虑。


Token控制

限制:

单次提问
≤3000字

Prompt模板化

统一管理:

prompt/

teacher.txt

assistant.txt

agent.txt

敏感词过滤

避免:

违法内容
恶意Prompt

限流

推荐:

Redis
+
令牌桶

二十、面试亮点包装

如果这是你的项目。

简历可以写:


EduAgentX AI学习助手

技术栈:

Spring Boot

Spring AI

DeepSeek

PGVector

Redis

MySQL

Vue3

项目亮点:

1. 基于Spring AI实现企业级AI助手

2. 使用PGVector构建RAG知识库

3. Redis实现聊天记忆与热点缓存

4. DeepSeek实现智能问答

5. 基于Tool Calling实现Agent能力

6. 实现学习规划与课程推荐

7. 支持PDF知识库导入

8. 支持多轮对话

二十一、真正的企业级AI架构(2026)

很多教程停留在:

Spring AI

↓

ChatGPT

而大厂实际架构已经变成:

Spring AI

↓

Agent

↓

Workflow

↓

RAG

↓

Redis

↓

PGVector

↓

MCP

↓

DeepSeek

总结

到这里,你已经掌握了 Spring AI 企业级开发的完整主线:

第一阶段

ChatClient调用模型

↓

第二阶段

Prompt工程

↓

第三阶段

RAG知识库

↓

第四阶段

Redis记忆

↓

第五阶段

Tool Calling

↓

第六阶段

Agent开发

↓

第七阶段

MCP生态接入
Logo

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

更多推荐