保姆级Spring AI 注解式开发教程,你肯定想不到还能这么玩!

简介: 这是一份详尽的 Spring AI 注解式开发教程,涵盖从环境配置到高级功能的全流程。Spring AI 是 Spring 框架中的一个模块,支持 NLP、CV 等 AI 任务。通过注解(如自定义 `@AiPrompt`)与 AOP 切面技术,简化了 AI 服务集成,实现业务逻辑与 AI 基础设施解耦。教程包含创建项目、配置文件、流式响应处理、缓存优化及多任务并行执行等内容,助你快速构建高效、可维护的 AI 应用。

保姆级Spring AI 注解式开发教程,你肯定想不到还能这么玩!

一、Spring AI 简介

Spring AI 是 Spring 项目中一个面向 AI 应用的模块,旨在通过集成开源框架、提供标准化的工具和便捷的开发体验,加速 AI 驱动应用程序的构建和部署。它支持多种 AI 任务,包括自然语言处理(NLP)、计算机视觉(CV)和推荐系统等。

二、环境配置

1. 前置条件

  • JDK 版本:11 或更高。
  • Spring Boot:推荐使用 3.x 版本。
  • 依赖工具:Maven 或 Gradle。

2. 添加依赖

pom.xml 中添加以下依赖:

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

或者在 build.gradle 中:

implementation 'org.springframework.ai:spring-ai-openai-spring-boot-starter:1.0.0-M5'
implementation 'org.springframework.boot:spring-boot-starter-web'

三、Spring AI 注解式开发

Spring AI 提供了注解式开发的支持,通过注解简化 AI 服务的集成和调用。以下是一个完整的示例,展示如何使用 Spring AI 的注解式开发。

1. 创建 Spring Boot 项目

使用 Spring Initializr 或手动创建一个 Spring Boot 项目,添加上述依赖。

2. 配置文件

application.yml 中配置 OpenAI 的 API Key 和模型:

spring:
  ai:
    openai:
      api-key: your_openai_api_key
      base-url: https://api.openai.com/v1
      chat:
        options:
          model: gpt-3.5-turbo

3. 创建自定义注解

创建一个自定义注解 @AiPrompt,用于标记需要 AI 处理的方法:

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface AiPrompt {
   
    String systemMessage() default "";
}

4. 实现 AOP 切面

创建一个 AOP 切面类,拦截带有 @AiPrompt 注解的方法调用:

@Aspect
@Component
@RequiredArgsConstructor
public class AiPromptAspect {
   

    private final ChatClient chatClient;

    @Around("@annotation(aiPrompt)")
    public Object processAiPrompt(ProceedingJoinPoint joinPoint, AiPrompt aiPrompt) throws Throwable {
   
        Object[] args = joinPoint.getArgs();
        if (args.length == 0) {
   
            return joinPoint.proceed();
        }

        String userMessage = args[0].toString();
        ChatClient.ChatClientRequestSpec requestSpec = chatClient.prompt();

        if (!aiPrompt.systemMessage().isEmpty()) {
   
            requestSpec = requestSpec.system(aiPrompt.systemMessage());
        }

        return requestSpec
                .user(userMessage)
                .call()
                .content();
    }
}

5. 使用注解

在服务类中使用 @AiPrompt 注解:

@Service
@RequiredArgsConstructor
public class ChatService {
   

    @AiPrompt(systemMessage = "你是一个专业的Java开发顾问,擅长解答Spring框架相关问题。")
    public String getJavaAdvice(String question) {
   
        return null; // 这个返回值会被AOP切面中的返回值覆盖
    }
}

6. 创建控制器

创建一个控制器类,调用服务类中的方法:

@RestController
@RequestMapping("/api")
@RequiredArgsConstructor
public class ChatController {
   

    private final ChatService chatService;

    @PostMapping("/chat")
    public String getJavaAdvice(@RequestBody String question) {
   
        return chatService.getJavaAdvice(question);
    }
}

四、运行与测试

启动 Spring Boot 应用程序后,可以通过以下方式测试:

curl -X POST http://localhost:8080/api/chat -H "Content-Type: application/json" -d "列出Spring中的重点概念"

如果配置正确,你将收到类似以下的响应:

Spring 是一个开源的 Java 平台,提供了丰富的功能支持,包括依赖注入、AOP、事务管理等。

五、高级功能

1. 流式响应处理

Spring AI 支持流式响应处理,适合处理长文本或分段返回结果的场景。可以通过以下方式实现:

@GetMapping(value = "/stream", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<ChatResponse> stream(@RequestParam String message) {
   
    return chatClient.prompt()
            .user(message)
            .stream()
            .chatResponse();
}

2. 请求缓存与优化

通过缓存减少重复请求,提高性能。可以使用 Spring Cache 实现:

@Cacheable("chatResponses")
public String getChatResponse(String message) {
   
    return chatClient.prompt()
            .user(message)
            .call()
            .content();
}

3. 多任务并行执行

适用于批量处理场景。可以使用 Spring 的 @Async 注解实现:

@Async
public CompletableFuture<String> getAsyncChatResponse(String message) {
   
    return CompletableFuture.supplyAsync(() -> chatClient.prompt()
            .user(message)
            .call()
            .content());
}

六、总结

Spring AI 提供了强大的注解式开发支持,通过注解简化了 AI 服务的集成和调用。通过 AOP 切面,可以自动处理 AI 接口的调用逻辑,显著提升开发效率。这种模式不仅降低了与 AI 服务交互的代码复杂度,还通过标准化注解配置实现了以下优势:

  • 提示词工程的可维护性提升;
  • 业务代码与 AI 基础设施解耦;
  • 无缝集成 Spring 生态的其他能力,如 Spring Cache 实现 AI 注解式缓存。

通过以上示例和说明,开发者可以快速上手 Spring AI 的注解式开发,构建高效、可维护的 AI 应用程序。

相关文章
|
6月前
|
人工智能 Java Nacos
基于 Spring AI Alibaba + Nacos 的分布式 Multi-Agent 构建指南
本文将针对 Spring AI Alibaba + Nacos 的分布式多智能体构建方案展开介绍,同时结合 Demo 说明快速开发方法与实际效果。
4766 92
|
6月前
|
人工智能 运维 Java
Spring AI Alibaba Admin 开源!以数据为中心的 Agent 开发平台
Spring AI Alibaba Admin 正式发布!一站式实现 Prompt 管理、动态热更新、评测集构建、自动化评估与全链路可观测,助力企业高效构建可信赖的 AI Agent 应用。开源共建,现已上线!
7249 96
|
6月前
|
人工智能 监控 Java
零代码改造 + 全链路追踪!Spring AI 最新可观测性详细解读
Spring AI Alibaba 通过集成 OpenTelemetry 实现可观测性,支持框架原生和无侵入探针两种方式。原生方案依赖 Micrometer 自动埋点,适用于快速接入;无侵入探针基于 LoongSuite 商业版,无需修改代码即可采集标准 OTLP 数据,解决了原生方案扩展性差、调用链易断链等问题。未来将开源无侵入探针方案,整合至 AgentScope Studio,并进一步增强多 Agent 场景下的观测能力。
2687 82
|
7月前
|
缓存 监控 Java
SpringBoot @Scheduled 注解详解
使用`@Scheduled`注解实现方法周期性执行,支持固定间隔、延迟或Cron表达式触发,基于Spring Task,适用于日志清理、数据同步等定时任务场景。需启用`@EnableScheduling`,注意线程阻塞与分布式重复问题,推荐结合`@Async`异步处理,提升任务调度效率。
1156 128
|
6月前
|
安全 前端开发 Java
《深入理解Spring》:现代Java开发的核心框架
Spring自2003年诞生以来,已成为Java企业级开发的基石,凭借IoC、AOP、声明式编程等核心特性,极大简化了开发复杂度。本系列将深入解析Spring框架核心原理及Spring Boot、Cloud、Security等生态组件,助力开发者构建高效、可扩展的应用体系。(238字)
|
7月前
|
人工智能 Java API
构建基于Java的AI智能体:使用LangChain4j与Spring AI实现RAG应用
当大模型需要处理私有、实时的数据时,检索增强生成(RAG)技术成为了核心解决方案。本文深入探讨如何在Java生态中构建具备RAG能力的AI智能体。我们将介绍新兴的Spring AI项目与成熟的LangChain4j框架,详细演示如何从零开始构建一个能够查询私有知识库的智能问答系统。内容涵盖文档加载与分块、向量数据库集成、语义检索以及与大模型的最终合成,并提供完整的代码实现,为Java开发者开启构建复杂AI智能体的大门。
4339 58
|
6月前
|
人工智能 监控 Java
Spring AI Alibaba实践|后台定时Agent
基于Spring AI Alibaba框架,可构建自主运行的AI Agent,突破传统Chat模式限制,支持定时任务、事件响应与人工协同,实现数据采集、分析到决策的自动化闭环,提升企业智能化效率。
Spring AI Alibaba实践|后台定时Agent
|
6月前
|
XML Java 应用服务中间件
【SpringBoot(一)】Spring的认知、容器功能讲解与自动装配原理的入门,带你熟悉Springboot中基本的注解使用
SpringBoot专栏开篇第一章,讲述认识SpringBoot、Bean容器功能的讲解、自动装配原理的入门,还有其他常用的Springboot注解!如果想要了解SpringBoot,那么就进来看看吧!
684 2
|
7月前
|
XML Java 数据格式
常用SpringBoot注解汇总与用法说明
这些注解的使用和组合是Spring Boot快速开发和微服务实现的基础,通过它们,可以有效地指导Spring容器进行类发现、自动装配、配置、代理和管理等核心功能。开发者应当根据项目实际需求,运用这些注解来优化代码结构和服务逻辑。
504 12
|
6月前
|
消息中间件 人工智能 安全
云原生进化论:加速构建 AI 应用
本文将和大家分享过去一年在支持企业构建 AI 应用过程的一些实践和思考。
1634 65

热门文章

最新文章