【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 开发者,现在正是上车学习的最佳时机!

相关推荐
你好~每一天1 小时前
从传统行业到AI入门:我的CAIE Level I学习体验与思考
大数据·数据结构·人工智能·学习·jupyter·idea
Y***89081 小时前
Spring Boot的项目结构
java·spring boot·后端
好好研究1 小时前
MyBatis框架 - 注解形式
java·数据库·mysql·maven·mybatis
美团技术团队1 小时前
R-HORIZON:探索长程推理边界,复旦 NLP&美团 LongCat 联合提出 LRMs 能力评测新框架
人工智能
美团技术团队1 小时前
美团 LongCat 团队发布 AMO-Bench:突破 AIME 评测饱和困境,重新定义 LLM 数学上限
人工智能
m0_488913011 小时前
Deep Research技术全解析:从Reasoning到Research with Reasoning的AI进化之路(值得收藏)
开发语言·人工智能·机器学习·大模型·ai大模型·大模型学习
雪兽软件1 小时前
在企业中实施人工智能的关键步骤
人工智能
大写-凌祁1 小时前
硬核劝学:2026年 AI 工程师“飞升”指南 (LLM/RL/VLM/AIGC 全路线)
人工智能·aigc
烤麻辣烫1 小时前
黑马程序员苍穹外卖(新手)DAY8
java·开发语言·学习·spring·intellij-idea