Spring AI 入门:从零开始搭建第一个AI应用

随着大语言模型(LLM)的快速发展,将 AI 能力集成到企业级 Java 应用中已成为迫切需求。Spring AI 是 Spring 生态中专门为 AI 集成打造的框架,它提供了一套统一的 API,让开发者可以轻松对接 OpenAI、Azure OpenAI、HuggingFace 等多家 AI 服务商。本文将带你从零开始,搭建你的第一个 Spring AI 应用。

概述:Spring AI 是什么

Spring AI 是一个由 Spring 团队推出的官方项目,旨在为 Java 开发者提供一种声明式、可移植的方式来构建 AI 应用。它的设计哲学与 Spring 生态一脉相承:

  • 统一抽象:提供 ChatModelEmbeddingModel 等核心接口,屏蔽底层 AI 服务商的差异
  • 声明式编程:通过注解和自动配置简化集成
  • 模块化设计:支持 OpenAI、Azure、HuggingFace、Ollama 等多个 AI 提供商

一句话总结:Spring AI 之于 AI 服务,就像 Spring JDBC 之于数据库——它提供了一个统一的抽象层,让你无需关心底层服务商的差异。

环境准备:前置条件

在开始之前,请确保你的开发环境满足以下要求:

  • JDK 17+:Spring AI 基于 Spring Boot 3.x,需要 JDK 17 或更高版本
  • Maven 3.6+Gradle 7.x+:用于构建项目
  • OpenAI API Key:如果你使用 OpenAI 作为 AI 提供商(也可以使用DeepSeek)
  • IDE:推荐 IntelliJ IDEA 或 VS Code

快速开始:搭建项目

方式一:使用 Spring Initializr

访问 Spring Initializr(https://start.spring.io/),选择以下依赖:

  • Spring Web
  • Spring AI OpenAI(或你需要的 AI 提供商)

方式二:手动创建 Maven 项目

在 pom.xml 中添加 Spring AI 的 BOM 和依赖:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-bom</artifactId>
            <version>1.0.0-M2</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>
    <dependency>
        <groupId>org.springframework.ai</groupId>
        <artifactId>spring-ai-openai-spring-boot-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

配置 API Key

在 application.yml 中配置你的 OpenAI API Key:

spring:
  ai:
    openai:
      api-key: ${OPENAI_API_KEY}
      chat:
        options:
          model: gpt-4o
          temperature: 0.7

实现:编写第一个 AI 对话接口

1. 注入 ChatClient

Spring AI 提供了 ChatClient 作为最上层的高阶 API,我们可以直接注入使用:

@RestController
@RequestMapping("/ai")
public class ChatController {

    private final ChatClient chatClient;

    public ChatController(ChatClient.Builder chatClientBuilder) {
        this.chatClient = chatClientBuilder.build();
    }

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

2. 流式响应

对于长文本生成,流式响应可以提供更好的用户体验:

@RestController
@RequestMapping("/ai")
public class StreamChatController {

    private final ChatClient chatClient;

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

    @GetMapping("/chat/stream")
    public Flux<String> streamChat(@RequestParam String message) {
        return chatClient.prompt()
                .user(message)
                .stream()
                .content();
    }
}

3. 添加系统提示词

在实际应用中,我们通常需要给 AI 设定角色和行为的上下文:

@GetMapping("/chat/with-system")
public String chatWithSystem(@RequestParam String message) {
    return chatClient.prompt()
            .system("你是一个资深的 Java 技术专家,请用简洁专业的方式回答问题。")
            .user(message)
            .call()
            .content();
}

进阶:自定义 ChatOptions

Spring AI 允许你细粒度地控制 AI 调用的参数:

@GetMapping("/chat/custom")
public String chatWithCustomOptions(@RequestParam String message) {
    return chatClient.prompt()
            .user(message)
            .options(ChatOptionsBuilder.builder()
                    .withModel("gpt-4o-mini")
                    .withTemperature(0.3)
                    .withMaxTokens(500)
                    .build())
            .call()
            .content();
}

最佳实践:异常处理

在生产环境中,我们需要处理 API 调用可能出现的异常:

@RestControllerAdvice
public class AiExceptionHandler {

    @ExceptionHandler(AiAccessDeniedException.class)
    public ResponseEntity<String> handleAccessDenied(AiAccessDeniedException e) {
        return ResponseEntity.status(403).body("API Key invalid or insufficient permissions");
    }

    @ExceptionHandler(AiServiceException.class)
    public ResponseEntity<String> handleServiceError(AiServiceException e) {
        return ResponseEntity.status(502).body("AI service unavailable: " + e.getMessage());
    }
}

总结:本文要点

通过本文,你学习了如何从零开始创建一个 Spring AI 应用:

  • Spring AI 是 Spring 生态中的 AI 集成框架,提供统一的 API 抽象
  • 通过 spring-ai-openai-spring-boot-starter 可以快速集成 OpenAI
  • ChatClient 是 Spring AI 提供的高阶 API,封装了提示词构造和调用流程
  • 支持流式响应、自定义参数和异常处理
Logo

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

更多推荐