一、引言

Spring Boot 是一个致力于简化 Spring 应用程序开发过程的框架,通过自动配置、内嵌 Web 服务器(如 Tomcat)以及“约定优于配置”的理念,赋能开发者快速搭建具备生产就绪能力的独立应用。

Spring AI 作为 Spring 生态系统中的关键成员,专注于集成人工智能能力。其目标是降低大语言模型(LLM)及生成式 AI 服务的调用复杂度,提供统一的 API 抽象层,并兼容 OpenAI、Azure AI、Hugging Face 等主流 AI 服务提供商。

二、实现过程:构建 Spring Boot + Spring AI 基础应用

1. 环境准备

  JDK 17 或更高版本

  Maven 3.6 或以上

  有效的 OpenAI API 密钥(请于 platform.openai.com 获取)

2. 项目初始化

  建议通过 start.spring.io 生成项目骨架,勾选以下依赖:

 Spring Web

  Spring AI(请选择适配的稳定版本)

也可直接在 `pom.xml` 中手动引入:

xml

  <!-Spring AI OpenAI 集成 -->

  <dependency>

      <groupId>org.springframework.ai</groupId>

      <artifactId>spring-ai-openai-spring-boot-starter</artifactId>

      <version>0.8.1</version> <!-请使用最新版本 -->

  </dependency>

 <!-Spring Web -->

  <dependency>

      <groupId>org.springframework.boot</groupId>

      <artifactId>spring-boot-starter-web</artifactId>

  </dependency>

3. 配置 OpenAI API 密钥

  在 `application.properties` 或 `application.yml` 中配置:

 properties

  # OpenAI 配置

  spring.ai.openai.api-key=your-api-key-here

  spring.ai.openai.chat.options.model=gpt-3.5-turbo

4. 构建控制器(Controller)

  java

  import org.springframework.ai.chat.ChatClient;

  import org.springframework.web.bind.annotation.*;

  @RestController

  public class AIController {

      private final ChatClient chatClient;

 // 构造器注入

      public AIController(ChatClient chatClient) {

          this.chatClient = chatClient;

      }

  @GetMapping("/ai/chat")

      public String chat(@RequestParam String message) {

          return chatClient.call(message);

      }

  }

 5. 进阶功能:结构化提示词模板

  通过 PromptTemplate 实现更可控的 AI 交互逻辑:

java

  import org.springframework.ai.chat.prompt.PromptTemplate;

  import org.springframework.web.bind.annotation.*;

  @PostMapping("/ai/translate")

  public String translate(@RequestBody TranslationRequest request) {

      PromptTemplate promptTemplate = new PromptTemplate("""

          将以下{sourceLang}文本翻译成{targetLang}:

          {text}

          """);

       promptTemplate.add("sourceLang", request.sourceLang());

      promptTemplate.add("targetLang", request.targetLang());

      promptTemplate.add("text", request.text());

        return chatClient.call(promptTemplate.render());

  }

   // 使用 Record 类型定义数据传输对象

  record TranslationRequest(String sourceLang, String targetLang, String text) {}

6. 启动应用

  通过 IDE 或命令行启动 Spring Boot 主类。

7. 接口测试示例

 测试 `/ai/chat` 接口  

    访问:  

    `http://localhost:8080/ai/chat?message=用Java写一个Hello World程序`  

    预期返回(HTTP 200):

   java

    public class HelloWorld {

        public static void main(String[] args) {

            System.out.println("Hello, World!");

        }

    }

测试 `/ai/translate` 接口  

    请求方式:POST  

    地址:`http://localhost:8080/ai/translate`  

    请求头:`Content-Type: application/json`  

    请求体:

   json

    {

      "sourceLang": "中文",

      "targetLang": "英文",

      "text": "今天天气真好"

    }

预期响应(HTTP 200):  

    `"Today's weather is really nice."`

8. 高级参数配置

  在配置文件中调整生成参数:

properties

  # 控制生成内容的创造性与长度

  spring.ai.openai.chat.options.temperature=0.7

  spring.ai.openai.chat.options.max-tokens=500

9. 异常统一处理

java

  import org.springframework.ai.openai.api.OpenAiApiException;

  import org.springframework.http.ResponseEntity;

  import org.springframework.web.bind.annotation.ExceptionHandler;

  import org.springframework.web.bind.annotation.RestControllerAdvice;

  @RestControllerAdvice

  public class GlobalExceptionHandler {

    @ExceptionHandler(OpenAiApiException.class)

      public ResponseEntity<String> handleOpenAiError(OpenAiApiException ex) {

          return ResponseEntity.status(ex.getStatusCode())

                 .body("AI服务错误: " + ex.getMessage());

      }

  }

10. 项目结构概览

   src/main/java

   └── com.example

       └── aiapp

           ├── AIController.java

           ├── GlobalExceptionHandler.java

           └── AiAppApplication.java

11. 核心要点解析

  依赖管理:Spring AI Starter 极大简化了 AI 能力集成过程

  自动配置:ChatClient 自动装配已配置的 OpenAI 客户端实例

  模板引擎:PromptTemplate 支持动态、结构化提示词的生成

  扩展性:架构支持灵活切换不同的 AI 服务提供商

三、功能拓展与最佳实践

1. 典型错误场景

  API 密钥无效将返回 401 状态码及错误描述

  请求体缺少必要字段触发 400 Bad Request

  指定不支持的语言时返回翻译失败提示

2. 输出差异性说明

  实际返回内容可能因模型版本及温度(temperature)等参数产生合理差异。

3. 流式响应(高级特性)

  如需实现类 ChatGPT 的实时输出效果,可使用 StreamingChatClient:

  java

  @GetMapping("/ai/chat-stream")

  public Flux<String> chatStream(@RequestParam String message) {

      return streamingChatClient.stream(message);

  }

4. 长文本处理策略

  超出模型 Token 限制的文本将被截断,可通过调整 `max-tokens` 参数予以缓解。

5. 响应格式定制

  可配置接口返回 JSON 格式数据:

  java

  @PostMapping(value = "/ai/translate", produces = "application/json")

  public Map<String, String> translate(...) {

      return Map.of("result", translatedText);

  }

6. 测试建议

  建议使用多组不同场景验证接口稳定性,例如代码生成、多语种翻译等。

四、总结与发展展望

Spring Boot 作为现代 Java 应用开发的核心框架,与 Spring AI 的结合为传统业务系统注入智能化能力,在智能客服、文档解析、代码生成等场景中展现巨大潜力。

未来演进方向:

技术深化:加强多模态交互、本地模型集成与流式响应性能

生态完善:拓展对新兴模型的支持,强化与企业级组件的安全集成

行业渗透:发展垂直领域解决方案及 AI Agent 框架,推动智能化应用落地

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐