【Java AI 新纪元】Spring AI 深度解析:让 Java 开发者无缝接入大模型

🚀 前言:Java 开发者的 AI 破局之路

在过去的一两年里,Python 凭借 LangChain 等框架几乎统治了 AI 应用层开发。作为 Java 开发者,我们难道只能看着或者被迫转语言吗?

当然不是! Spring 官方重磅推出的 Spring AI 框架,正是为了解决这个问题而来。它将 Spring 生态的设计理念(依赖注入、POJO 编程、抽象接口)带入了 AI 领域,让我们能够用最熟悉的 Java 代码,轻松对接 OpenAI、Ollama、Azure 等各种大模型。

今天,我们就来深度拆解 Spring AI,手把手教你构建一个智能应用。


📚 一、什么是 Spring AI?

Spring AI 是一个应用框架,旨在简化包含人工智能功能的应用程序开发,避免与特定模型提供商(如 OpenAI)过度耦合。

核心理念:Portable API(可移植 API)

就像 Spring Data 让我们切换数据库只需改配置一样,Spring AI 让我们切换大模型也只需改一行配置。

graph TD A[Java 业务代码] --> B{Spring AI 抽象层} B --> C[OpenAI] B --> D[Azure OpenAI] B --> E[Ollama (Local)] B --> F[Bedrock / HuggingFace] style B fill:#6db33f,stroke:#fff,stroke-width:2px,color:#fff

核心特性

  1. 统一的模型接口:支持 Chat(聊天)、Image(绘图)、Audio(语音)。
  2. Prompt Management :支持模板化的提示词管理 (.st 文件)。
  3. Function Calling:允许大模型回调 Java 方法(例如查数据库、调 API)。
  4. RAG(检索增强生成):内置了向量数据库(Vector Store)和文档加载器(Document Reader)的抽象。
  5. 结构化输出:自动将 AI 的回复映射为 Java Bean。

🛠️ 二、快速上手:5分钟搭建 AI 助手

我们将基于 Spring Boot 3.2+JDK 17+ ,对接 OpenAI 协议(也可以轻松换成本地的 Ollama)。

1. 引入依赖

pom.xml 中添加 Spring AI 的 Milestone 仓库(注意:Spring AI 迭代较快,建议关注官网最新版本,这里以 Milestone 为例):

xml 复制代码
<dependencies>
    <!-- Spring Boot Starter Web -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    
    <!-- Spring AI OpenAI Starter -->
    <dependency>
        <groupId>org.springframework.ai</groupId>
        <artifactId>spring-ai-openai-spring-boot-starter</artifactId>
    </dependency>
</dependencies>

<!-- 务必添加 Spring Milestone 仓库 -->
<repositories>
    <repository>
        <id>spring-milestones</id>
        <name>Spring Milestones</name>
        <url>https://repo.spring.io/milestone</url>
        <snapshots><enabled>false</enabled></snapshots>
    </repository>
</repositories>

2. 配置文件

application.yml 中配置 API Key。如果你用的是第三方中转服务,记得修改 base-url

yaml 复制代码
spring:
  application:
    name: spring-ai-demo
  ai:
    openai:
      api-key: sk-xxxxxxxxxxxxxxxxxxxxxxxx  # 替换你的 Key
      base-url: https://api.openai.com    # 或者你的中转地址
      chat:
        options:
          model: gpt-3.5-turbo  # 指定模型

💻 三、实战代码详解

3.1 基础对话:使用 ChatClient

Spring AI 提供了 ChatClient,这是一个流式(Fluent)风格的 API,非常优雅。

java 复制代码
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ChatController {

    private final ChatClient chatClient;

    // 构造器注入,Spring AI 自动配置好了 builder
    public ChatController(ChatClient.Builder builder) {
        this.chatClient = builder.build();
    }

    @GetMapping("/chat")
    public String chat(@RequestParam String message) {
        return chatClient.prompt()
                .user(message)
                .call()
                .content(); // 直接获取文本内容
    }
}

启动调用:

访问 http://localhost:8080/chat?message=给我讲个笑话,你将直接收到 AI 的回复。


3.2 进阶:Prompt Template(提示词模板)

在实际开发中,我们不会硬编码 Prompt。Spring AI 支持类似 MessageFormat 的占位符。

java 复制代码
    @GetMapping("/analyze")
    public String analyzeSentiment(@RequestParam String product, @RequestParam String comment) {
        String template = """
                你是一个电商情感分析师。
                请分析用户对产品 {product} 的评论:"{comment}"。
                只返回以下三个单词之一:正面、负面、中性。
                """;
        
        return chatClient.prompt()
                .user(u -> u.text(template)
                        .param("product", product)
                        .param("comment", comment))
                .call()
                .content();
    }

3.3 核心杀手锏:结构化输出 (Structured Output)

这是 Java 开发者最喜欢的功能!不用再费劲去正则匹配 JSON 了,Spring AI 能自动把 LLM 的回复转成 Java Bean。

定义 POJO:

java 复制代码
public record MovieReview(String title, String summary, double rating) {}

Controller 实现:

java 复制代码
import org.springframework.core.ParameterizedTypeReference;
import java.util.List;

@GetMapping("/recommend")
public List<MovieReview> recommendMovies(@RequestParam String category) {
    return chatClient.prompt()
            .user(u -> u.text("推荐3部高分的{category}电影")
                    .param("category", category))
            .call()
            .entity(new ParameterizedTypeReference<List<MovieReview>>() {}); 
            // 👆 这里神奇的事情发生了,直接返回 List<MovieReview> 对象
}

原理解析:

Spring AI 会自动在 Prompt 后面追加一段 Schema 指令,告诉 LLM 必须返回符合该 JSON 结构的文本,然后利用 BeanOutputParser 自动反序列化。


🧩 四、Spring AI vs LangChain4j

很多朋友会问,市面上还有 LangChain4j,该怎么选?

维度 Spring AI LangChain4j
背景 Spring 官方团队出品(VMware/Broadcom) 社区驱动
设计风格 极致的 Spring 风格,依赖注入、自动配置 模仿 Python LangChain 的设计
集成度 与 Spring Boot 浑然天成 也是主要适配 Java,但更独立
生态位 适合追求标准化、企业级稳定性的项目 适合想要快速尝试新特性、灵活度高的项目

建议: 如果你的项目已经是重度 Spring Boot 项目,首选 Spring AI


🔗 五、接入本地大模型 (Ollama)

想免费跑 AI?用 Ollama 部署 Llama3 或 DeepSeek。Spring AI 切换过去只需要改几行配置!

  1. 安装 Ollama 并运行 ollama run llama3
  2. 修改依赖 :将 spring-ai-openai 换成 spring-ai-ollama
  3. 修改配置
yaml 复制代码
spring:
  ai:
    ollama:
      base-url: http://localhost:11434
      chat:
        model: llama3

**Java 代码一行都不用动!**这就是 Spring AI 抽象层的威力。


📝 总结

Spring AI 的出现标志着 Java 正式进入了大模型应用开发的"正规军"时代。它不仅解决了 Python 难以集成到现有 Java 企业系统的问题,还通过优雅的抽象屏蔽了不同大模型厂商的 API 差异。

未来展望:

随着 Spring AI 的不断迭代,RAG(检索增强生成)和 Agent(智能体)的支持会越来越完善。作为 Java 开发者,现在正是上车学习的最佳时机!

相关推荐
NGINX开源社区16 分钟前
使用 NGINX 作为 AI Proxy
大数据·人工智能·nginx
majingming1235 小时前
FUNCTION
java·前端·javascript
zopple5 小时前
常见的 Spring 项目目录结构
java·后端·spring
腾讯蓝鲸智云5 小时前
嘉为蓝鲸可观测系列产品入选Gartner《中国智能IT监控与日志分析工具市场指南》
运维·人工智能·信息可视化·自动化
LaughingZhu6 小时前
Product Hunt 每日热榜 | 2026-03-25
人工智能·经验分享·深度学习·神经网络·产品运营
蟑螂恶霸6 小时前
Windows安装OpenCV 4.8
人工智能·windows·opencv
枫叶林FYL6 小时前
【自然语言处理 NLP】第二章 经典NLP算法与特征工程(Classical NLP Algorithms)
人工智能·深度学习·机器学习
非著名程序员6 小时前
阿里云重磅上线 Qoder 专家团模式,AI 编程进入组团作战时代
人工智能
质量行者6 小时前
如何进行接口测试
功能测试·ai·测试
xuxie997 小时前
N11 ARM-irq
java·开发语言