Spring AI 概述与环境搭建

引言

在人工智能技术飞速发展的今天,将AI能力集成到企业应用中已成为提升产品竞争力的关键手段。Spring AI作为Spring生态系统中的一员新将,为Java开发者提供了一套标准、易用的API,让复杂的AI能力集成变得简单而优雅。

无论您是希望快速构建AI聊天机器人的初学者,还是寻求在现有企业应用中集成AI功能的资深开发者,Spring AI都能为您提供强大的支持。它屏蔽了不同AI模型间的差异,让您专注于业务逻辑的实现,而非底层技术的复杂细节。

本文将引导您从零开始搭建Spring AI开发环境,并构建您的第一个AI应用,为后续深入学习打下坚实基础。

什么是 Spring AI

Spring AI 是 Spring 生态系统中的一个新兴项目,旨在简化 AI 应用程序的开发。它提供了一套标准的 API 和抽象,使得开发者能够以统一的方式与各种大语言模型(LLM)进行交互,而无需关心底层实现细节。

核心概念

  1. Prompt(提示词) - 向 AI 模型发送的输入文本,是与AI沟通的语言
  2. Model(模型) - 大语言模型,如 OpenAI、通义千问等,负责处理Prompt并生成响应
  3. OutputParser(输出解析器) - 将 AI 模型的输出解析为结构化数据,便于程序处理

环境准备

系统要求

  • JDK 17 或更高版本
  • Maven 3.8+ 或 Gradle 7+
  • 支持的 AI 模型 API 访问权限(如OpenAI API Key)

Maven依赖配置

使用Spring Boot 3.x项目,添加以下依赖:

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

    <!-- Spring AI OpenAI Starter -->
    <dependency>
        <groupId>org.springframework.ai</groupId>
        <artifactId>spring-ai-openai-spring-boot-starter</artifactId>
    </dependency>
</dependencies>

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

<repositories>
    <repository>
        <id>spring-milestones</id>
        <name>Spring Milestones</name>
        <url>https://repo.spring.io/milestone</url>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>
    <repository>
        <id>spring-snapshots</id>
        <name>Spring Snapshots</name>
        <url>https://repo.spring.io/snapshot</url>
        <releases>
            <enabled>false</enabled>
        </releases>
    </repository>
</repositories>

使用最新版本,这里添加了Spring的仓库,如果你配置了其他仓库,请修改mirrorOf配置以排除 Spring 仓库:

<mirror>
    <id>my-mirror</id>
    <mirrorOf>*,!spring-snapshots,!central-portal-snapshots</mirrorOf>
    <url>https://my-company-repository.com/maven</url>
</mirror>

第一个 Spring AI 应用

配置文件设置

application.yml 中添加模型配置:这里使用的质谱AI

spring:
  ai:
    openai:
      api-key: ${YOU_API_KEY}
      base-url: https://open.bigmodel.cn/api/paas
      chat:
        options:
          model: glm-4.5
        completions-path: /v4/chat/completions

核心代码实现

创建一个简单的 ChatController:

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

    private final ChatClient chatClient;

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

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

    @PostMapping("/structured")
    public Map<String, Object> structuredChat(@RequestBody Map<String, String> request) {
        String message = request.get("message");
        String response = chatClient.prompt()
                .system("你是一个专业的技术助手,请用简洁明了的语言回答问题")
                .user(message)
                .call()
                .content();

        Map<String, Object> result = new HashMap<>();
        result.put("input", message);
        result.put("response", response);
        result.put("timestamp", System.currentTimeMillis());

        return result;
    }
}

运行测试

启动应用后,通过以下方式测试:

  1. 简单对话测试:
curl 'http://localhost:8080/chat?message=你好,Spring AI!'

## 对中文字符进行 URL 编码
curl 'http://localhost:8080/chat?message=%E4%BD%A0%E5%A5%BD%EF%BC%8CSpring%20AI%EF%BC%81'
  1. 结构化响应测试:
curl -X POST http://localhost:8080/chat/structured \
  -H "Content-Type: application/json" \
  -d '{"message": "Spring AI有什么优势?"}'

实际应用案例

智能客服场景

在实际项目中,我们可以构建一个智能客服系统:

@Service
public class CustomerSupportService {
    private final ChatClient chatClient;

    public CustomerSupportService(ChatClient.Builder builder) {
        this.chatClient = builder
                .defaultSystem("你是一个电商平台的客服助手,需要礼貌、专业地回答用户问题")
                .build();
    }

    public String handleInquiry(String customerQuestion) {
        return chatClient.prompt()
                .user(u -> u.text("客户咨询:{question}")
                        .param("question", customerQuestion))
                .call()
                .content();
    }
}

@PostMapping("/customer-support")
public Map<String, Object> customerSupport(@RequestBody Map<String, String> request) {
    String question = request.get("question");
    String response = customerSupportService.handleInquiry(question);

    Map<String, Object> result = new HashMap<>();
    result.put("input", question);
    result.put("response", response);
    result.put("timestamp", System.currentTimeMillis());

    return result;
}

curl -X POST http://localhost:8080/chat/customer-support \
  -H "Content-Type: application/json" \
  -d '{"question": "我要差评"}'

内容生成场景

用于自动生成产品描述:

@Service
public class ContentGenerationService {

    private final ChatClient chatClient;

    public ContentGenerationService(ChatClient.Builder builder) {
        this.chatClient = builder
                .defaultSystem("你是一个电商产品描述专家,擅长撰写吸引人的产品介绍")
                .build();
    }

    public String generateProductDescription(ProductInfo productInfo) {
        return chatClient.prompt()
                .user(u -> u.text("请为以下产品生成一段吸引人的描述:\n产品名称:{name}\n产品特点:{features}\n目标用户:{target}")
                        .param("name", productInfo.getName())
                        .param("features", String.join(",", productInfo.getFeatures()))
                        .param("target", productInfo.getTarget()))
                .call()
                .content();
    }

}

@PostMapping("/product-description")
public Map<String, Object> generateProductDescription(@RequestBody ProductInfo productInfo) {
    String response = contentGenerationService.generateProductDescription(productInfo);

    Map<String, Object> result = new HashMap<>();
    result.put("input", productInfo);
    result.put("response", response);
    result.put("timestamp", System.currentTimeMillis());

    return result;
}

curl -X POST http://localhost:8080/chat/product-description \
  -H "Content-Type: application/json" \
  -d '{"name": "逸安One","features": "采用6.3英寸1.5K柔性直屏,峰值亮度3500nits,搭载逸安龙晶玻璃面板和高强度一体航空铝金属中框。搭载第五代骁龙8至尊版处理器,配备立体环形冷泵散热系统。内置7000mAh硅碳电池,支持100W有线快充和50W无线快充 。影像系统包含5000万像素徕卡三摄,配备四重光学镀膜技术。","target": "青年白领,学生,科技"}'

总结

通过本篇文章,我们了解了 Spring AI 的基本概念,完成了环境搭建,并实现了一个简单的对话应用。这是学习 Spring AI 的第一步,后续我们将深入学习更多高级功能。

Spring AI的价值不仅在于简化了AI集成的复杂性,更在于它将AI能力与Spring生态无缝融合,让Java开发者能够以熟悉的方式构建AI应用。随着AI技术的不断发展,掌握Spring AI将成为Java开发者的重要技能。

后续学习建议

  1. 探索不同AI模型的接入方式(如通义千问、Anthropic Claude等)
  2. 学习Prompt工程技巧,提升AI交互质量
  3. 了解向量数据库集成,实现RAG(检索增强生成)应用
  4. 掌握输出解析器的使用,处理结构化响应
  5. 学习如何构建企业级AI应用,包括监控、日志和性能优化

参考资源


互动问题:
您在搭建Spring AI环境时遇到了哪些问题?欢迎在评论区分享您的经验和解决方案!您希望在后续文章中了解Spring AI的哪个特定功能?

Logo

更多推荐