SpringBoot+ Spring AI:掌握智能应用开发

0 阅读4分钟

SpringBoot+ Spring AI:掌握智能应用开发

构建AI驱动的功能通常意味着要处理分散在代码库中的SDK、HTTP客户端和提示逻辑。有了Spring AI,这个故事就改变了。当与SpringBoot结合使用时,您可以获得一种干净的、生产就绪的方式,将大型语言模型(LLM)功能直接添加到Java应用程序中。

在本文中,我们将介绍一个简单但现实的SpringBoot+ Spring AI项目,解释关键思想,然后探索高级特性和未来趋势。

I.介绍

Springboot

SpringBoot是现代Java后端开发的支柱。它通过提供以下功能简化了Spring应用:

  • 自动配置
  • 像Tomcat这样的嵌入式服务器
  • 强烈的“约定优于配置”理念

结果很简单:您可以用最少的设置构建独立的生产级应用程序。

Spring AI

Spring AI是Spring生态系统中一个较新的模块,专注于AI集成。它的目标是在流行的AI服务(如OpenAI,Azure OpenAI和Hugging Face)上提供统一的抽象层。

与处理原始HTTP调用或特定于供应商的SDK不同,您可以使用熟悉的Spring概念,如客户端,模板和配置属性。

二.实现细节

SpringBoot+ Spring AI应用

让我们逐步构建一个最小的AI驱动的REST服务。

1.环境准备

在你开始之前,确保你有:

  • JDK 17+
  • Maven 3.6+
  • OpenAI API密钥(来自platform.openai.com)

2.项目简介

您可以使用start.spring.io生成具有以下依赖项的项目:

  • Spring Web
  • Spring AI(OpenAI starter)

或者直接添加到pom.xml

Copy<!-- 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>

这个初学者隐藏了大部分样板文件,并为您提供了一个现成的AI客户端。

3.配置OpenAI API密钥

application.propertiesapplication.yml中,配置您的API密钥和模型:

Copyspring.ai.openai.api-key=your-api-key-here
spring.ai.openai.chat.options.model=gpt-3.5-turbo

SpringBoot会自动为您连接所有内容。

4.创建简单控制器

现在让我们公开一个基本的聊天端点。

Copyimport 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 {
    private final ChatClient chatClient;
    public AIController(ChatClient chatClient) {
        this.chatClient = chatClient;
    }
    @GetMapping("/ai/chat")
    public String chat(@RequestParam String message) {
        return chatClient.call(message);
    }
}

这就是Spring AI的美妙之处:单个方法调用将提示发送给模型并返回响应。

5.高级:自定义提示模板

对于真实的应用程序,纯文本提示往往是不够的。Spring AI提供了PromptTemplate来创建结构化,可重用的提示。

Copyimport org.springframework.ai.chat.prompt.PromptTemplate;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;

@PostMapping("/ai/translate")
public String translate(@RequestBody TranslationRequest request) {
    PromptTemplate promptTemplate = new PromptTemplate("""
        Translate the following {sourceLang} text into {targetLang}:
        {text}
        """);
    promptTemplate.add("sourceLang", request.sourceLang());
    promptTemplate.add("targetLang", request.targetLang());
    promptTemplate.add("text", request.text());
    return chatClient.call(promptTemplate.render());
}


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

这种方法使提示更易于阅读、维护和扩展。

6.运行应用程序

使用IDE或命令行启动应用程序:

Copymvn spring-boot:run

嵌入式服务器将在端口8080上启动。

7.接口测试

第一章/ai/chat

请求:

CopyGET http://localhost:8080/ai/chat?message=Java一Hello World

回应:

Copypublic class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}
(二)/ai/translate

请求(POST):

Copy{
  "sourceLang": "Chinese",
  "targetLang": "English",
  "text": "The weather is really nice today"
}

回应:

Copy"Today's weather is really nice."

8.高级配置

您可以使用配置选项微调模型行为:

Copyspring.ai.openai.chat.options.temperature=0.7
spring.ai.openai.chat.options.max-tokens=500
  • 温度控制随机性
  • max-tokens限制响应长度

9.异常处理

全局异常处理程序使错误处理保持干净和一致。

Copyimport 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 Exception: " + ex.getMessage());
    }
}

10.完整的项目结构

Copysrc/main/java
└── com.example.aiapp
    ├── AIController.java
    ├── GlobalExceptionHandler.java
    └── AiAppApplication.java

11.关键点解释

  • 依赖管理:Spring AI starters简化设置
  • 自动配置:ChatClient自动注入
  • 提示模板:简洁、结构化的提示生成
  • 可扩展性:以后易于切换AI提供商

三.膨胀

1.错误场景

无效的API密钥:

Copy{
  "status": 401,
  "error": "Unauthorized",
  "message": "AI: Invalid API Key"
}

其他常见情况包括缺少字段或不支持的语言。

2.输出可能不同

AI输出是概率性的。不同的模型或温度值可能会产生略有不同的结果,即使是对于相同的提示。

3.流响应(高级)

对于实时输出,类似于ChatGPT类型,使用流式传输:

Copy@GetMapping("/ai/chat-stream")
public Flux<String> chatStream(@RequestParam String message) {
    return streamingChatClient.stream(message);
}

4.处理超长文本

如果响应被截断,则增加令牌限制:

Copyspring.ai.openai.chat.options.max-tokens=2000

5.自定义响应模板

返回JSON而不是纯文本:

Copy@PostMapping(value = "/ai/translate", produces = "application/json")
public Map<String, String> translate(...) {
    return Map.of("result", translatedText);
}

回应:

Copy{ "result": "Today's weather is really nice." }

6.其他测试想法

  • 询问算法:
  • Write a Fibonacci sequence function in Python
  • 翻译成不同的语言:
Copy{
  "sourceLang": "English",
  "targetLang": "French",
  "text": "Hello, how are you?"
}

预期产出:

Copy"Bonjour, comment allez-vous ?"

四.总结和趋势

SpringBoot仍然是Java后端开发的基础,而Spring AI在其上添加了一个强大的AI层。它们共同实现了“传统业务+ AI增强”架构,适用于聊天机器人、文档分析、代码生成等。

未来趋势

1.技术方向

  • 多模式支持(文本、图像、语音、视频)
  • 更好的本地模型集成(Llama、Ollama)
  • 更快、更高效的流响应

2.生态系统扩展

  • 支持更多AI提供商(Gemini、Claude)
  • 与Spring Security和Spring Cloud深度集成
  • 速率限制和监控等业务就绪功能

3.行业应用

  • 面向金融、医疗和教育的垂直解决方案
  • 用于自主任务执行的AI Agent框架