最近 AI 工具的热度居高不下,作为 Java 开发者,我们总在想:能不能用熟悉的 Spring 生态快速集成 AI 能力?答案是肯定的 ——Spring AI 来了!它就像 Spring 家族的一位新成员,让我们能用写 Spring Boot 的方式轻松对接各种 AI 模型。今天就来聊聊 Spring AI 的基本操作,带你快速上手。

一、Spring AI 是什么?先搞懂定位

        简单说,Spring AI 是 Spring 官方推出的 AI 工具包,它的核心目标是:降低 Java 开发者使用 AI 模型的门槛。

        想象一下,以前调用 OpenAI 的 API 需要自己处理 HTTP 请求、解析 JSON、管理 API 密钥;现在有了 Spring AI,这些工作都被封装成了熟悉的 Spring 风格组件,我们只需注入ChatClient,调用几个方法就能实现对话功能 —— 这就是 Spring AI 的价值。

它支持主流的 AI 模型:

  • 开源模型:如 Llama 2、Mistral
  • 商业 API:如 OpenAI、Azure OpenAI、Google Gemini
  • 本地模型:通过 Ollama 集成本地部署的模型

        而且保持了 Spring 一贯的特性:依赖注入、自动配置、模板类(类似 RestTemplate),上手成本极低。

二、环境准备:5 分钟搭好 Spring AI 项目

1. 版本要求

  • JDK 17+(Spring AI 对 JDK 版本要求较高)
  • Spring Boot 3.2+(建议用最新稳定版)

2. 引入依赖

        目前 Spring AI 还没正式进入 Maven 中央仓库,需要先添加 Spring 的仓库。在pom.xml中配置:

<!-- 仓库配置 -->
<repositories>
    <repository>
        <id>spring-snapshots</id>
        <name>Spring Snapshots</name>
        <url>https://repo.spring.io/snapshot</url>
        <releases>
            <enabled>false</enabled>
        </releases>
    </repository>
</repositories>

<!-- 核心依赖:以OpenAI为例 -->
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    
    <!-- Spring AI OpenAI集成 -->
    <dependency>
        <groupId>org.springframework.ai</groupId>
        <artifactId>spring-ai-openai-spring-boot-starter</artifactId>
        <version>0.8.1-SNAPSHOT</version> <!-- 版本可能更新,建议查最新版 -->
    </dependency>
</dependencies>

        如果用 Gradle,配置类似,核心是引入对应的 starter。

三、第一个例子:用 Spring AI 调用 OpenAI 聊天

        以最常用的 OpenAI 为例,实现一个简单的对话功能,步骤简单到离谱:

1. 配置 API 密钥

        在application.properties中填入你的 OpenAI 密钥:

spring.ai.openai.api-key=sk-你的API密钥
# 可选:指定模型,默认是gpt-3.5-turbo
spring.ai.openai.chat.model=gpt-3.5-turbo

2. 注入 ChatClient,直接用!

        Spring AI 已经自动配置好了ChatClient,我们直接注入使用:

import org.springframework.ai.chat.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 AiController {

    // 注入Spring AI提供的ChatClient
    private final ChatClient chatClient;

    // 构造器注入(Spring推荐方式)
    public AiController(ChatClient chatClient) {
        this.chatClient = chatClient;
    }

    // 一个简单的接口:接收问题,返回AI回答
    @GetMapping("/chat")
    public String chat(@RequestParam String message) {
        // 调用AI模型,获取响应
        return chatClient.prompt()
                .user(message)  // 设置用户输入
                .call()         // 发送请求
                .content();     // 提取回答内容
    }
}

3. 启动项目,测试效果

        启动 Spring Boot 应用,访问http://localhost:8080/chat?message=Spring AI是什么,就能收到 AI 的回答。整个过程没有一行 HTTP 调用代码,没有 JSON 解析,完全是 Spring 的 “注入即用” 风格!

四、进阶操作:提示词(Prompt)管理与模板

        实际开发中,提示词往往需要动态拼接(比如传入用户参数)。Spring AI 提供了PromptTemplate来管理提示词,避免硬编码。

1. 定义提示词模板

src/main/resources/prompts目录下创建weather-prompt.st文件:

请根据城市名{city},预测未来{days}天的天气,用简洁的中文回答。

其中{city}{days}是占位符。

2. 使用模板生成提示词

import org.springframework.ai.chat.prompt.Prompt;
import org.springframework.ai.chat.prompt.PromptTemplate;
import org.springframework.ai.resource.ClassPathResource;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.Map;

@RestController
public class WeatherController {

    private final ChatClient chatClient;

    public WeatherController(ChatClient chatClient) {
        this.chatClient = chatClient;
    }

    @GetMapping("/weather")
    public String getWeather(
            @RequestParam String city,
            @RequestParam int days) {

        // 加载提示词模板
        PromptTemplate promptTemplate = new PromptTemplate(
                new ClassPathResource("prompts/weather-prompt.st"),
                Map.of("city", city, "days", days) // 填充占位符
        );

        // 生成Prompt对象
        Prompt prompt = promptTemplate.create();

        // 调用AI
        return chatClient.prompt(prompt).call().content();
    }
}

        这样做的好处是:提示词与代码分离,方便修改和管理,尤其适合复杂场景。

五、切换模型:从 OpenAI 到本地模型

        Spring AI 的一大优势是模型无关性—— 同一套代码,切换模型只需改配置。比如换成本地部署的 Llama 2(需通过 Ollama 运行):

  1. 替换依赖:
<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-ollama-spring-boot-starter</artifactId>
    <version>0.8.1-SNAPSHOT</version>
</dependency>
  1. 修改配置:
# Ollama服务地址(本地默认)
spring.ai.ollama.base-url=http://localhost:11434
# 指定模型
spring.ai.ollama.chat.model=llama2
  1. 代码完全不变!之前的ChatClient调用逻辑无需修改,直接兼容。

六、避坑指南:新手常遇到的问题

  1. 版本兼容:Spring AI 目前还是快照版(SNAPSHOT),建议用最新版,避免旧版本的 BUG。
  2. API 密钥安全:生产环境不要把密钥写在配置文件里,建议用环境变量或配置中心:
    spring.ai.openai.api-key=${OPENAI_API_KEY:默认值}
    
  3. 超时设置:AI 模型调用可能较慢,可配置超时时间:
    spring.ai.openai.chat.timeout=30000 # 30秒
    
  4. 依赖冲突:如果项目中有旧版本的 Spring Boot,可能需要排除冲突的依赖(如 Jackson)。

七、写在最后:Spring AI 的未来可期

        作为 Spring 生态的一部分,Spring AI 最大的优势是降低认知成本——Java 开发者不用学习新框架,就能快速集成 AI 能力。目前它还在快速迭代中,未来会支持更多模型和功能(如图像生成、embedding 向量等)。

        如果你想在 Java 项目中加入 AI 功能,Spring AI 绝对是首选工具。从今天的例子来看,只需几行配置和代码,就能实现一个 AI 对话接口,这种便捷性在以前是难以想象的。

        赶紧试试吧!用 Spring 的方式,玩转 AI 其实很简单~

Logo

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

更多推荐