本文为Java开发者提供大模型学习路径,通过实战项目介绍如何将Agent接入企业内部系统。文章涵盖向量数据库接入、内部数据库查询、会话持久化、可观测性接入及容器化部署等关键步骤,强调Java开发者可利用现有技术栈(如Spring Security、Spring Data JPA等)无缝集成AI能力,实现企业级AI应用。

前两天跑通了Spring AI的基础调用和工具定义,今天聊Java开发者真正的主场——把Agent接入企业内部系统。

这部分是Python开发者相对弱势的地方:连数据库、做权限控制、接消息队列——Spring全家桶才是主场。


企业级Agent和普通Demo的差距

先说清楚Gap在哪:

维度 Demo级 企业级
数据来源 硬编码 / 公开API 内部数据库 / 知识库
知识库 向量数据库 + 文档检索
权限控制 基于用户身份过滤数据
会话存储 内存 Redis / 数据库持久化
可观测性 console.log 完整trace链路
部署方式 本地跑 Docker + K8s / Spring Boot容器化

Java开发者做这些,大部分已经在日常工作里做过了,只是现在多了一个"AI"角色参与进来。


实战项目:企业内部知识库助手

做一个能回答公司内部问题的AI助手:

  • 能查公司的技术文档
  • 能查员工的工单记录
  • 不同角色看到的数据不同(权限隔离)

项目整体架构

图片


步骤一:接入向量数据库做RAG

RAG(检索增强生成)是企业AI最核心的能力——让模型能回答基于公司内部文档的问题。

Spring AI内置支持pgvector(PostgreSQL插件),配置简单:

# application.yml
spring:
  datasource:
    url: jdbc:postgresql://localhost:5432/enterprise_ai
    username: ${DB_USER}
    password: ${DB_PASS}
  ai:
    vectorstore:
      pgvector:
        index-type: HNSW
        distance-type: COSINE_DISTANCE
        dimensions: 1536# text-embedding-3-small 的维度

文档入库(可以写成一次性脚本,或者定时任务):

@Service
public class KnowledgeBaseService {

    @Autowired
    private VectorStore vectorStore;

    @Autowired
    private TokenTextSplitter textSplitter;

    // 把文档切块存入向量库
    public void ingestDocument(String content, String docTitle, String category) {
        Document document = new Document(
            content,
            Map.of(
                "title", docTitle,
                "category", category,
                "createdAt", LocalDate.now().toString()
            )
        );

        // 切块(避免超过模型上下文长度)
        List<Document> chunks = textSplitter.apply(List.of(document));
        
        // 向量化并存入数据库
        vectorStore.add(chunks);
        
        log.info("文档 [{}] 已入库,切分为 {} 个chunk", docTitle, chunks.size());
    }
}

查询时用QuestionAnswerAdvisor自动做相似度检索:

@Service
public class EnterpriseAgentService {

    @Autowired
    private ChatClient chatClient;

    @Autowired
    private VectorStore vectorStore;

    public String ask(String question, UserContext userCtx) {
        // 根据用户权限过滤向量搜索结果
        SearchRequest searchRequest = SearchRequest.defaults()
            .withTopK(5)
            .withSimilarityThreshold(0.7)
            // 用元数据过滤——只搜当前用户有权限查看的分类
            .withFilterExpression("category in " + userCtx.getAllowedCategories());

        return chatClient.prompt()
            .system(buildSystemPrompt(userCtx))
            .user(question)
            .advisors(new QuestionAnswerAdvisor(vectorStore, searchRequest))
            .call()
            .content();
    }
}

步骤二:接内部数据库

把数据库查询包装成Tool,Agent能直接查实时数据:

@Component
public class EnterpriseDataTools {

    @Autowired
    private TicketRepository ticketRepository;

    @Autowired
    private SecurityContextHolder securityContextHolder; // 获取当前用户

    @Tool(description = "查询当前用户的工单列表,可按状态过滤。status可选值:OPEN/IN_PROGRESS/CLOSED")
    public List<TicketSummary> getMyTickets(String status) {
        // 从SecurityContext获取当前用户(权限天然收敛)
        String currentUser = getCurrentUser();
        
        TicketStatus ticketStatus = status != null
            ? TicketStatus.valueOf(status) 
            : null;
            
        return ticketRepository.findByAssigneeAndStatus(currentUser, ticketStatus)
            .stream()
            .map(TicketSummary::from)
            .collect(Collectors.toList());
    }

    @Tool(description = "根据工单ID查询工单详情和处理历史")
    public TicketDetail getTicketDetail(String ticketId) {
        String currentUser = getCurrentUser();
        Ticket ticket = ticketRepository.findById(ticketId)
            .orElseThrow(() -> new TicketNotFoundException(ticketId));
        
        // 权限校验(和普通Service一样)
        if (!ticket.isAccessibleBy(currentUser)) {
            throw new AccessDeniedException("无权查看此工单");
        }
        
        return TicketDetail.from(ticket);
    }

    private String getCurrentUser() {
        return SecurityContextHolder.getContext()
            .getAuthentication()
            .getName();
    }
}

关键点:权限控制写在Tool里,和普通Service的权限控制方式完全一样。Agent能调用这个工具,但工具本身的权限边界是你控制的。


步骤三:会话持久化(Redis)

内存存会话不可靠,生产环境要持久化到Redis:

@Configuration
public class ChatConfig {

    @Autowired
    private RedisTemplate<String, Object> redisTemplate;

    @Bean
    public ChatMemory chatMemory() {
        // 替换掉默认的 InMemoryChatMemory
        return new RedisChatMemory(redisTemplate, Duration.ofHours(24));
    }
}

// 自定义 Redis 实现(Spring AI 目前需要自己实现,不复杂)
@Component
public class RedisChatMemory implements ChatMemory {

    private final RedisTemplate<String, Object> redisTemplate;
    private final Duration ttl;
    private static final String KEY_PREFIX = "chat:memory:";

    @Override
    public void add(String conversationId, List<Message> messages) {
        String key = KEY_PREFIX + conversationId;
        // 把 messages 序列化存到 Redis List
        messages.forEach(msg -> 
            redisTemplate.opsForList().rightPush(key, serializeMessage(msg))
        );
        redisTemplate.expire(key, ttl);
    }

    @Override
    public List<Message> get(String conversationId, int lastN) {
        String key = KEY_PREFIX + conversationId;
        long size = redisTemplate.opsForList().size(key);
        long start = Math.max(0, size - lastN);
        
        return redisTemplate.opsForList().range(key, start, -1)
            .stream()
            .map(this::deserializeMessage)
            .collect(Collectors.toList());
    }
}

步骤四:可观测性接入

企业级应用必须能追踪每次AI调用的链路——花了多少token、调了哪些工具、输出了什么。

Spring AI天然集成Micrometer,配置一下就能接入:

# application.yml
management:
  tracing:
    enabled: true
    sampling:
      probability: 1.0
spring:
  ai:
    chat:
      observations:
        include-prompt: true# 记录输入prompt
        include-completion: true # 记录模型输出

用LangSmith做专门的AI trace(可选):

@Configuration
public class LangSmithConfig {
    
    @Bean
    public ChatClientCustomizer langSmithCustomizer() {
        return builder -> builder
            .defaultAdvisors(new SimpleLoggerAdvisor()); // 基础日志
    }
}

加上Prometheus + Grafana,就能看到:

  • 每次调用的延迟分布
  • Token消耗趋势
  • 工具调用成功率
  • 用户最常问的问题类型

这套监控和普通Spring Boot监控完全一套体系,Java开发者不需要额外学习。


步骤五:容器化部署

Spring AI应用的部署和普通Spring Boot没区别:

# Dockerfile
FROM openjdk:21-jre-slim

WORKDIR /app
COPY target/enterprise-ai-0.0.1-SNAPSHOT.jar app.jar

# 环境变量注入(不要把密钥写进镜像)
ENV OPENAI_API_KEY=""
ENV DB_PASSWORD=""

EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]
# docker-compose.yml
version: '3.8'
services:
app:
    build: .
    ports:
      - "8080:8080"
    environment:
      - OPENAI_API_KEY=${OPENAI_API_KEY}
      - SPRING_DATASOURCE_URL=jdbc:postgresql://db:5432/enterprise_ai
    depends_on:
      - db
      - redis

db:
    image: pgvector/pgvector:pg16
    environment:
      POSTGRES_DB: enterprise_ai
      POSTGRES_PASSWORD: ${DB_PASSWORD}

redis:
    image: redis:7-alpine
# 一行启动
docker-compose up -d

三天速通总结

Java开发者的AI Agent学习路径

图片

Java开发者做企业AI应用,核心优势在于你不用换工具链:

  • 权限控制:Spring Security,原来怎么写,现在还怎么写
  • 数据库访问:Spring Data JPA / MyBatis,原来怎么查,现在还怎么查
  • 会话管理:Redis,该存的还是存
  • 部署运维:Docker + K8s,没变化
  • 监控告警:Micrometer + Prometheus,没变化

AI能力是新增的,不是替换的。 Spring AI的定位就是把大模型接进你已有的技术体系,而不是让你从头重建一套。

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线科技企业深耕十二载,见证过太多因技术卡位而跃迁的案例。那些率先拥抱 AI 的同事,早已在效率与薪资上形成代际优势,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在大模型的学习中的很多困惑。我们整理出这套 AI 大模型突围资料包

  • ✅ 从零到一的 AI 学习路径图
  • ✅ 大模型调优实战手册(附医疗/金融等大厂真实案例)
  • ✅ 百度/阿里专家闭门录播课
  • ✅ 大模型当下最新行业报告
  • ✅ 真实大厂面试真题
  • ✅ 2026 最新岗位需求图谱

所有资料 ⚡️ ,朋友们如果有需要 《AI大模型入门+进阶学习资源包》下方扫码获取~
在这里插入图片描述

① 全套AI大模型应用开发视频教程

(包含提示工程、RAG、LangChain、Agent、模型微调与部署、DeepSeek等技术点)
在这里插入图片描述

② 大模型系统化学习路线

作为学习AI大模型技术的新手,方向至关重要。 正确的学习路线可以为你节省时间,少走弯路;方向不对,努力白费。这里我给大家准备了一份最科学最系统的学习成长路线图和学习规划,带你从零基础入门到精通!
在这里插入图片描述

③ 大模型学习书籍&文档

学习AI大模型离不开书籍文档,我精选了一系列大模型技术的书籍和学习文档(电子版),它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础。
在这里插入图片描述

④ AI大模型最新行业报告

2025最新行业报告,针对不同行业的现状、趋势、问题、机会等进行系统地调研和评估,以了解哪些行业更适合引入大模型的技术和应用,以及在哪些方面可以发挥大模型的优势。
在这里插入图片描述

⑤ 大模型项目实战&配套源码

学以致用,在项目实战中检验和巩固你所学到的知识,同时为你找工作就业和职业发展打下坚实的基础。
在这里插入图片描述

⑥ 大模型大厂面试真题

面试不仅是技术的较量,更需要充分的准备。在你已经掌握了大模型技术之后,就需要开始准备面试,我精心整理了一份大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余

图片

以上资料如何领取?

在这里插入图片描述

为什么大家都在学大模型?

最近科技巨头英特尔宣布裁员2万人,传统岗位不断缩减,但AI相关技术岗疯狂扩招,有3-5年经验,大厂薪资就能给到50K*20薪!

图片

不出1年,“有AI项目经验”将成为投递简历的门槛。

风口之下,与其像“温水煮青蛙”一样坐等被行业淘汰,不如先人一步,掌握AI大模型原理+应用技术+项目实操经验,“顺风”翻盘!
在这里插入图片描述
在这里插入图片描述

这些资料真的有用吗?

这份资料由我和鲁为民博士(北京清华大学学士和美国加州理工学院博士)共同整理,现任上海殷泊信息科技CEO,其创立的MoPaaS云平台获Forrester全球’强劲表现者’认证,服务航天科工、国家电网等1000+企业,以第一作者在IEEE Transactions发表论文50+篇,获NASA JPL火星探测系统强化学习专利等35项中美专利。本套AI大模型课程由清华大学-加州理工双料博士、吴文俊人工智能奖得主鲁为民教授领衔研发。

资料内容涵盖了从入门到进阶的各类视频教程和实战项目,无论你是小白还是有些技术基础的技术人员,这份资料都绝对能帮助你提升薪资待遇,转行大模型岗位。
在这里插入图片描述
在这里插入图片描述

以上全套大模型资料如何领取?

在这里插入图片描述https://mp.weixin.qq.com/s/Zfzd-MCXADSJl_wGtwUU9g

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐