2026年Java AI开发实战:Spring AI完全指南

从手动写HTTP到自动配置,Java开发者如何用Spring AI玩转大模型


一、写在前面

Java调大模型,终于不用手写HTTP了。

2026年,Spring AI 2.0 正式发布,Java生态终于有了原生、AI友好的AI集成框架。

本文将带你:

  • 理解Spring AI的核心概念
  • 掌握Spring AI vs LangChain4j选型
  • 快速上手第一个AI应用
  • 了解企业级最佳实践

二、为什么Java开发者需要关注Spring AI

1.1 曾经的痛

以前用Java调GPT、Claude:

  • 要么手写OkHttp/RestTemplate拼JSON
  • 要么用非官方SDK担心跑路
  • 切换模型要从代码到配置全改一遍

1.2 Spring AI的到来

对比项 手写HTTP Python openai库 Spring AI
接入成本 低(3行) 低(3行配置)
类型安全 有(编译期检查)
切换模型 改一堆代码 改参数 改一行配置
流式响应 手动处理SSE 简单 Flux原生支持
Spring集成 自己搞 不存在 原生(DI/AOP)

1.3 2026年技术格局

┌─────────────────────────────────────────────────────────┐
│           Java AI 开发框架 (2026)                   │
├─────────────────────────────────────────────────────────┤
│  Spring AI 2.0          │  LangChain4j            │
│  • Spring官方背书       │  • 框架无关性            │
│  • 20+模型支持         │  • 15+模型支持          │
│  • Spring Boot深度集成 │  • Quarkus/SE都能跑      │
│  • M4里程碑版本       │  • 生产就绪             │
└─────────────────────────────────────────────────────────┘

三、Spring AI 2.0 核心特性

3.1 统一多模型接入

在这里插入图片描述

Spring AI 2.0 支持20+模型提供商:

厂商 模型 特点
OpenAI GPT-5.4 业界标杆
Anthropic Claude Opus 4.6 编程最强
Google Gemini 3 Pro 多模态
阿里 Qwen3.5 国产之光
Ollama 本地模型 隐私合规

一行配置切换模型

spring.ai.openai.base-url=https://api.openai.com
spring.ai.openai.api-key=${OPENAI_API_KEY}

# 切换只需改这一行
spring.ai.openai.base-url=https://api.anthropic.com

3.2 ChatClient:极简API

@RestController
class AIController {
    
    private final ChatClient chatClient;
    
    // 注入即可用
    public AIController(ChatClient chatClient) {
        this.chatClient = chatClient;
    }
    
    @GetMapping("/chat")
    public String chat(@RequestParam String message) {
        return chatClient.prompt()
            .user(message)
            .call()
            .content();
    }
}

3.3 结构化输出:告别JSON解析

// AI直接返回Java对象
record WeatherResponse(
    String city,
    int temperature,
    String condition
) {}

WeatherResponse weather = chatClient.prompt()
    .user("北京今天天气怎么样?")
    .call()
    .entity(WeatherResponse.class);

System.out.println(weather.city());    // 北京
System.out.println(weather.temperature()); // 25

3.4 RAG:企业知识库

@Bean
public vectorStore vectorStore() {
    return new PgVectorStore(jdbcTemplate, embeddingModel);
}

@Bean
public ChatClient ragChatClient(ChatClient.Builder builder, 
                                VectorStore vectorStore) {
    return builder
        .defaultSystem("你是一个专业助手")
        .defaultAdvisors(
            new RetrieveAdvisor(vectorStore)
                .asAii()
        )
        .build();
}

3.5 Function Calling:打通业务

@Tool(description = "查询商品库存")
public int getProductStock(String productId) {
    return productRepository.findById(productId)
        .map(p -> p.getStock())
        .orElse(0);
}

ChatResponse response = chatClient.prompt()
    .user("帮我查下SKU-12345还有多少库存?")
    .tools(new ToolCallbackProvider<>(this))
    .call()
    .chatResponse();

四、选型指南:Spring AI vs LangChain4j

4.1 核心对比

在这里插入图片描述

维度 Spring AI 2.0 LangChain4j
定位 Spring生态"嫡长子" Java AI"瑞士军刀"
框架依赖 必须Spring Boot 框架无关
模型支持 20+ 15+
向量数据库 10+ 15+
启动速度 200-400ms <100ms(Quarkus)
内存占用 150-300MB 50-100MB

4.2 选型决策树

你的项目用Spring Boot吗?
    │
    ├── 是 → 追求稳定性 → Spring AI
    │
    └── 否 → 追求灵活性 → LangChain4j
    
追求快速启动(Serverless)?
    │
    ├── 是 → LangChain4j + Quarkus
    │
    └── 否 → 两者皆可

需要混合部署?
    │
    ├── 是 → 核心:Spring AI + 创新:LangChain4j
    │
    └── 否 → 根据团队熟悉度选择

4.3 2026年趋势

  • MCP协议成为标准:工具调用将标准化
  • 多模态成企业刚需:PDF图表处理能力
  • 本地模型爆发:Ollama+远程混合部署

五、快速上手:5分钟跑通第一个AI应用

在这里插入图片描述

5.1 项目创建

访问 start.spring.io,选择:

Spring Boot: 3.5.x
Java: 21
Dependencies:
  - Spring Web
  - Spring AI OpenAI

5.2 配置

# application.yml
spring:
  ai:
    openai:
      api-key: ${OPENAI_API_KEY}
      chat:
        options:
          model: gpt-4o-mini

5.3 代码

@SpringBootApplication
public class AiApplication {
    public static void main(String[] args) {
        SpringApplication.run(AiApplication.class, args);
    }
}

@RestController
class ChatController {
    
    private final ChatClient chatClient;
    
    public ChatController(ChatClient.Builder builder) {
        this.chatClient = builder.build();
    }
    
    @GetMapping("/chat")
    public String chat(@RequestParam String message) {
        return chatClient.prompt()
            .user(message)
            .call()
            .content();
    }
}

5.4 运行

curl "localhost:8080/chat?message=用Java怎么调AI?"

六、企业级最佳实践

6.1 多模型切换

@Configuration
class AIConfig {
    
    @Bean
    @Primary
    public ChatClient primaryChatClient(
            @Value("${ai.primary.model}") String model,
            ChatClient.Builder builder) {
        return builder.defaultSystem(p -> p.text("你是一个专业助手"))
            .build();
    }
    
    @Bean
    public ChatClient codeChatClient(
            @Value("${ai.code.model:claude-opus}") String model,
            ChatClient.Builder builder) {
        return builder.defaultSystem(p -> p.text("你是一个编程专家"))
            .build();
    }
}

6.2 流式响应

@GetMapping(value = "/stream", produces = MediaType.TEXT_EVENT_STREAM)
public Flux<String> streamChat(@RequestParam String message) {
    return chatClient.prompt()
        .user(message)
        .stream()
        .content();
}

6.3 错误处理

@Bean
public ChatClient chatClient(ChatClient.Builder builder) {
    return builder
        .defaultSystem(p -> p.text("你是一个专业助手"))
        .defaultErrorHandler(exception -> 
            Flux.just("抱歉,AI服务暂时不可用:" + exception.getMessage()))
        .build();
}

七、总结与展望

7.1 核心要点

Spring AI让Java AI开发像调用本地服务一样简单

  • 零学习成本:会Spring Boot就会Spring AI
  • 一套配置通吃:20+模型无缝切换
  • 生产就绪:流式/结构化输出/重试机制全内置

7.2 学习路线

第1周:Spring AI Hello World
    ↓
第2周:RAG知识库实战
    ↓
第3周:Function Calling业务集成
    ↓
第4周:生产环境部署与监控

7.3 资源

  • 官网:spring.io/projects/spring-ai
  • 文档:docs.spring.io/spring-ai/reference
  • 示例:github.com/spring-projects/spring-ai
Logo

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

更多推荐