Java AI 项目开发指南


Java AI 项目开发指南:从入门到生产级落地

一、开篇:Java 开发者做 AI,为什么行?

很多 Java 开发者对 AI 开发望而却步,最大的误解是“Java 做不了 AI”。事实恰恰相反——Java 在 AI 领域的生态虽不如 Python 丰富,但“不能做”和“生态差”是两码事。

Java 做 AI 的核心价值在于工程化。AI 模型可以用 Python 训练,但 AI 应用可以用 Java 构建。Java 的优势在于高并发、稳定性、成熟的微服务生态以及企业级的部署流水线——这些恰恰是 Python 生态的短板。

在企业级 AI 应用中,Java 的核心价值在于其跨平台特性、成熟的微服务生态以及应对高并发场景的能力。Java 更适合构建高并发、低延迟的 AI 服务网关与业务编排层。

定位清晰:Java 开发者的角色是 AI 应用开发者,而非 AI 算法研究员。你不需要懂深度学习的数学证明,就像你用 HashMap 不需要懂红黑树的原理一样。理解接口、掌握用法、知道什么场景用什么工具,就够了。

二、技术栈全景:Java AI 开发的工具箱

Java AI 技术栈可分为三个层次:

层次 核心工具 用途
基础计算层 ND4J、Deeplearning4j 张量运算、数值计算
算法框架层 Tribuo、DJL、Weka 机器学习算法、深度学习模型
服务集成层 Spring AI、LangChain4j、Java GenKit 与企业现有架构对接

2.1 AI 应用开发框架(集成大模型)

这是当前 Java AI 开发的重点方向:

  • Spring AI(官方推荐):Spring 官方推出的 AI 框架,深度遵循 Spring 设计哲学,统一对接 OpenAI、Azure、Hugging Face 等主流模型。如果你使用 Spring Boot,这是最自然的选择。
  • Spring AI Alibaba:基于 Spring AI,为通义千问等国产模型深度定制。
  • LangChain4j:Java 版的 LangChain,功能强大、高度模块化。适合需要高度自定义、探索复杂 AI 技术组合的团队。
  • Java GenKit:Google 推出的生成式 AI 开发工具包,轻量、低代码,不强制依赖 Spring。适合老系统改造或非 Spring 项目。
  • JBoltAI:国产企业级 AI 框架,基于工程化理念构建,提供 AI 资源网关、事件驱动架构、全局监控等能力。

2.2 机器学习与深度学习库

  • Deeplearning4j (DL4J):Java 生态中最成熟的深度学习框架,支持分布式训练,可与 Hadoop、Spark 集成。
  • DJL (Deep Java Library):亚马逊开源,引擎无关的深度学习框架,支持 PyTorch、TensorFlow、MXNet 后端。
  • Tribuo:Oracle 维护的机器学习框架,提供完整的模型可解释性工具。
  • Weka:经典机器学习库,适合快速数据探索和原型验证。

2.3 关键组件

  • 向量数据库:Milvus、Weaviate、Qdrant,支撑 RAG 应用
  • 模型推理:ONNX Runtime,跨平台模型推理
  • 本地模型部署:Ollama,本地部署开源模型

三、环境准备

3.1 基础环境

  • JDK:版本需 17 或以上(Spring AI 要求)
  • 构建工具:Maven 或 Gradle
  • IDE:IntelliJ IDEA 或 Eclipse

3.2 Maven 依赖配置(以 Spring AI 为例)

<!-- Spring Boot Parent -->
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>3.2.0</version>
</parent>

<!-- Spring AI BOM -->
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-bom</artifactId>
            <version>1.0.0-M6</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<!-- Spring AI OpenAI Starter -->
<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-openai-spring-boot-starter</artifactId>
</dependency>

3.3 DJL 环境配置

<dependency>
    <groupId>ai.djl</groupId>
    <artifactId>api</artifactId>
    <version>0.28.0</version>
</dependency>
<dependency>
    <groupId>ai.djl</groupId>
    <artifactId>pytorch-engine</artifactId>
    <version>0.28.0</version>
    <scope>runtime</scope>
</dependency>

四、快速开始:Spring AI 三分钟集成大模型

4.1 配置文件(application.yml)

spring:
  ai:
    openai:
      api-key: YOUR_API_KEY
      base-url: https://api.deepseek.com  # 以 DeepSeek 为例
      chat:
        options:
          model: deepseek-chat
          temperature: 0.7

4.2 核心代码

@RestController
public class AIController {

    private final ChatClient chatClient;

    public AIController(ChatClient.Builder builder) {
        this.chatClient = builder.build();
    }

    @GetMapping("/chat")
    public String chat(@RequestParam String message) {
        return this.chatClient
            .prompt()
            .user(message)
            .call()
            .content();
    }
}

就这么简单——三行代码,一个可用的 AI 对话接口就完成了。

五、核心 AI 编程模式

5.1 结构化输出(Structured Output)

让 AI 返回格式化的数据,而非自由文本:

public record WeatherInfo(String city, double temperature, String condition) {}

@GetMapping("/weather")
public WeatherInfo getWeather(@RequestParam String city) {
    return this.chatClient
        .prompt()
        .user("查询" + city + "的天气")
        .call()
        .entity(WeatherInfo.class);  // 自动反序列化为 Java 对象
}

Spring AI 会自动生成 JSON Schema、指示模型遵守格式、并将响应反序列化为你的类型。

5.2 流式响应(Streaming)

大模型推理耗时较长,通过流式响应以增量返回,极大缓解用户等待焦虑:

@GetMapping(value = "/chat/stream", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<String> chatStream(@RequestParam String message) {
    return this.chatClient
        .prompt()
        .user(message)
        .stream()
        .content();  // 返回 Flux<String>,前端通过 SSE 接收
}

5.3 对话记忆(Chat Memory)

大模型本身是无状态的,每次推理都是 Stateless 的。所有“记忆”都靠外部系统把历史对话塞进 context:

@Bean
public ChatMemory chatMemory() {
    return new InMemoryChatMemory();  // 生产环境建议使用持久化存储
}

@GetMapping("/chat/memory")
public String chatWithMemory(@RequestParam String sessionId, @RequestParam String message) {
    return this.chatClient
        .prompt()
        .user(message)
        .advisors(new MessageChatMemoryAdvisor(chatMemory, sessionId))
        .call()
        .content();
}

六、RAG(检索增强生成):让 AI 认识你的私有数据

RAG 已成为行业标准方案。它的核心思路是:在用户问题发送给大模型之前,先从知识库中检索相关文档,将检索结果作为上下文一起发送给模型。

6.1 RAG 架构概览

用户问题 → 向量化(Embedding)→ 向量检索 → 相关文档片段

                    Prompt 组装(问题 + 文档片段)

                    大模型生成回答

6.2 Spring AI RAG 实现

Spring AI 提供了模块化的 RAG 架构,支持开箱即用的 RetrievalAugmentationAdvisor:

// 1. 配置向量存储(以 Milvus 为例)
@Bean
public VectorStore vectorStore(EmbeddingModel embeddingModel) {
    return new MilvusVectorStore(
        MilvusVectorStoreConfig.builder()
            .withCollectionName("knowledge_base")
            .build(),
        embeddingModel
    );
}

// 2. 文档加载与分块
@Bean
public DocumentReader documentReader() {
    return new TextDocumentReader("classpath:/docs/");
}

// 3. RAG 检索增强
@GetMapping("/rag/chat")
public String ragChat(@RequestParam String question) {
    return this.chatClient
        .prompt()
        .user(question)
        .advisors(new RetrievalAugmentationAdvisor(
            vectorStore,
            DocumentRetriever.defaultRetriever()
        ))
        .call()
        .content();
}

6.3 关键步骤详解

  • 文档加载:支持 PDF、Word、Markdown、TXT 等多种格式
  • 文档分块:将长文档切分为适合向量化的片段
  • 向量化:使用 Embedding 模型将文本转为向量
  • 向量存储:存入 Milvus、Weaviate、Qdrant 等向量数据库
  • 检索增强:根据用户问题检索相关文档,注入 Prompt

七、Tool Calling(工具调用):让 AI 执行操作

Tool Calling 是 AI Agent 的核心能力,允许大语言模型在需要时调用外部工具或函数来获取实时数据或执行操作。

7.1 工作流程

  1. 定义工具:将 Java 方法注册为工具(包含名称、描述、参数模式)
  2. AI 决策:模型分析用户意图,决定是否需要调用工具
  3. 执行工具:Spring AI 自动分发并执行对应的工具方法

7.2 代码示例:天气查询工具

@Component
public class WeatherService {

    @Tool(description = "查询指定城市的实时天气信息")
    public WeatherInfo getWeather(
        @ToolParam(description = "城市名称,如'北京'") String city
    ) {
        // 调用外部天气 API
        return weatherApiClient.query(city);
    }
}

@RestController
public class AgentController {

    private final ChatClient chatClient;

    public AgentController(ChatClient.Builder builder, WeatherService weatherService) {
        this.chatClient = builder
            .defaultTools(weatherService)  // 注册工具
            .build();
    }

    @GetMapping("/agent/weather")
    public String askWeather(@RequestParam String question) {
        // 用户问 "北京今天天气怎么样?"
        // 模型自动判断需要调用 getWeather 工具
        return this.chatClient
            .prompt()
            .user(question)
            .call()
            .content();
    }
}

八、Deeplearning4j:训练自己的深度学习模型

如果需要训练自己的模型,Deeplearning4j 是 Java 生态的首选。

8.1 构建神经网络(图像分类示例)

// 1. 构建计算图配置
ComputationGraphConfiguration config = new NeuralNetConfiguration.Builder()
    .weightInit(WeightInit.XAVIER)
    .updater(new Adam(0.01))
    .graphBuilder()
    .addInputs("input")
    .addLayer("cnn1", new ConvolutionLayer.Builder()
        .kernelSize(3, 3)
        .stride(1, 1)
        .nOut(32)
        .build(), "input")
    .addLayer("pool1", new SubsamplingLayer.Builder()
        .poolingType(PoolingType.MAX)
        .kernelSize(2, 2)
        .build(), "cnn1")
    .addLayer("output", new OutputLayer.Builder()
        .lossFunction(LossFunctions.LossFunction.NEGATIVELOGLIKELIHOOD)
        .nIn(128)
        .nOut(numClasses)
        .activation(Activation.SOFTMAX)
        .build(), "dense2")
    .setOutputs("output")
    .build();

// 2. 加载数据集
ImageRecordReader reader = new ImageRecordReader(28, 28, 1,
    new ParentPathLabelGenerator());
reader.initialize(new FileSplit(new File("mnist_train")));

// 3. 模型训练
ComputationGraph model = new ComputationGraph(config);
model.fit(new RecordReaderDataSetIterator(reader, batchSize, 1, numClasses), epochs);

8.2 核心组件

  • ND4J:张量运算库,类似 NumPy
  • DataVec:数据预处理流水线
  • DL4J:神经网络构建与训练
  • 支持 GPU 加速:通过 CUDA 实现

九、DJL:加载和部署预训练模型

DJL(Deep Java Library)允许 Java 开发者直接加载 PyTorch、TensorFlow 等主流框架训练的模型。

9.1 加载 Hugging Face 模型

// 加载图像分类模型
Criteria<Image, Classifications> criteria = Criteria.builder()
    .opt(Criteria.Builder.TYPE_FAMILY, "image")
    .setTypes(Image.class, Classifications.class)
    .optApplication(Application.CV.OBJECT_DETECTION)
    .build();

ZooModel<Image, Classifications> model = criteria.loadModel();

// 推理
Image image = ImageFactory.getInstance().fromFile("path/to/image.jpg");
Classifications result = model.predict(image);

9.2 本地部署大模型(DJL + ONNX Runtime)

DJL 0.28 版本已支持 Hugging Face tokenizer,可直接加载 Llama、Qwen 等主流大模型:

// 加载 ONNX 格式的模型
Criteria<String, String> criteria = Criteria.builder()
    .setTypes(String.class, String.class)
    .optModelPath(Paths.get("model/qwen.onnx"))
    .optTranslator(new TextGenerationTranslator())
    .build();

ZooModel<String, String> model = criteria.loadModel();
Predictor<String, String> predictor = model.newPredictor();
String result = predictor.predict("你好,请介绍一下自己");

十、工程化落地:从 Demo 到生产

接入大模型只是第一步,工程化才是“可用级别”应用的核心。Java AI 的工程化需聚焦三个关键维度:

10.1 统一接入层

企业实际业务常需对接多类模型。工程化的首要任务是建立统一入口:

  • 标准化接口:上层业务调用方式一致,屏蔽底层模型差异
  • 自动协议适配:网关封装不同厂商的 API 协议差异
// 统一模型接口
public interface ModelService {
    String chat(String prompt);
}

// 各模型实现
@Service("openai")
public class OpenAIService implements ModelService { ... }

@Service("deepseek")
public class DeepSeekService implements ModelService { ... }

// 统一调用
@Autowired
@Qualifier("deepseek")
private ModelService modelService;

10.2 高并发支撑

AI 应用上线后需应对每秒数千次调用:

  • 事件驱动架构:请求转为事件消息入队列,异步非阻塞处理
  • 智能调度:基于 Token 动态负载均衡,避免节点过载
  • 熔断降级:保障核心业务不中断

响应式编程示例:

server:
  tomcat:
    threads:
      max: 200
    accept-count: 1000

10.3 全生命周期管控

企业级应用需要透明化管理:

  • 全局监控:实时查看 QPS、响应时长、错误率等核心指标
  • 成本精细化:按部门、项目核算 Token 消耗
  • 全链路追踪:唯一调用 ID 贯穿全程,快速定位问题

10.4 分层架构

企业级 AI 平台应采用标准分层架构:

前端层 → Java 业务网关层 → AI 能力层 → 模型服务层 → 数据层
  • 网关层(Spring Cloud Gateway):认证、限流、熔断
  • 业务层:处理原有系统对接
  • AI 能力层:Prompt 管理、Tool Calling、多 Agent 协同
  • 模型服务层:模型推理与部署
  • 数据层:向量数据库、业务数据库

10.5 生产环境关键配置

  • 连接池:合理设置大模型 API 的连接池大小
  • 缓存:利用 Caffeine 缓存热点问答,提升 QPS
  • 模型版本管理:建立与代码库分离的模型仓库
  • 监控体系:集成 Prometheus 暴露推理延迟、错误率等指标

十一、学习路线:4 个月从入门到实战

第一阶段:基础准备(第 1-2 周)

  • 巩固 Java 核心知识(集合、多线程、网络编程)
  • 熟悉 Spring Boot 基础
  • 了解 AI 基本概念(大模型、Prompt、Token)

第二阶段:框架入门(第 3-6 周)

  • 学习 Spring AI,快速集成大模型
  • 掌握 ChatClient 的基本用法
  • 实现第一个 AI 对话应用

第三阶段:核心技术(第 7-12 周)

  • Prompt Engineering:提示词工程
  • RAG:检索增强生成
  • Tool Calling:工具调用
  • Streaming:流式响应

第四阶段:项目实战(第 13-16 周)

  • 构建一个完整的 AI 项目(如智能客服、知识库问答)
  • 实践工程化落地(统一接入、高并发、监控)
  • 学习 DJL 或 DL4J 进行模型部署

推荐资源

  • Spring AI 官方文档和示例
  • Spring AI Alibaba 官方示例仓库
  • LangChain4j 官方教程

总结

用 Java 开发 AI 项目,核心是用 Java 强大的工程化能力,将先进的 AI 模型安全、高效、可控地集成到企业级应用中。记住三个关键点:

  1. 选对框架:Spring AI 是 Java 开发者集成大模型的首选
  2. 掌握模式:RAG 和 Tool Calling 是 AI 应用的两大核心模式
  3. 工程优先:统一接入、高并发支撑、全生命周期管控,缺一不可

AI 应用的价值不在于“能调用模型”,而在于“稳定服务业务”。Java 团队唯有以工程化思维先行,才能构建出高效、可控、可持续的企业级 AI 应用。