当前位置: 首页 > news >正文

SpringBoot+SpringAI实战:30分钟搭建你的第一个智能应用

SpringAI是Spring生态下的一个全新项目,核心目标是为Java开发者提供一套简单、统一的API,快速集成各类AI大模型能力,无需关注不同厂商API的差异。

核心优势:
统一API:对接不同大模型无需修改核心代码,切换模型像切换数据源一样简单
开箱即用:内置请求重试、超时控制、响应缓存等常用功能,减少重复编码
无缝集成Spring生态:完美兼容SpringBoot、Spring Cloud等,符合Java开发者的使用习惯
支持多场景:涵盖文本对话、图片生成、语音转文字、embedding向量生成等主流AI场景

本次实战我们以“对接OpenAI的ChatGPT模型”为例,开发一个简单的智能对话接口。后续会补充如何切换到国内大模型(如通义千问)。前置准备
JDK 17+(SpringAI部分特性依赖JDK 17)
Maven 3.6+
一个OpenAI API Key(从OpenAI官网申请,注意保存好,后续配置用)
开发工具:IDEA(推荐)

项目创建与依赖配置

使用Spring Initializr创建项目,选择Spring Boot 3.2.5版本,添加spring-boot-starter-web和Lombok依赖。手动在pom.xml中添加SpringAI OpenAI Starter:

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

配置文件设置

application.yml中配置OpenAI参数,建议将API Key存储在环境变量中:

spring:ai:openai:api-key:${OPENAI_API_KEY}chat:model:gpt-3.5-turbotemperature:0.7

核心代码实现

DTO层设计
@DatapublicclassChatRequest{@NotBlankprivateStringmessage;}@Data@BuilderpublicclassChatResponse{privateIntegercode;privateStringmsg;privateStringcontent;}
服务层实现
@Service@RequiredArgsConstructorpublicclassChatServiceImplimplementsChatService{privatefinalChatClientchatClient;@OverridepublicChatResponsechat(ChatRequestrequest){try{Stringresponse=chatClient.call(request.getMessage());returnChatResponse.builder().code(200).msg("Success").content(response).build();}catch(Exceptione){returnChatResponse.builder().code(500).msg(e.getMessage()).content("").build();}}}
控制层优化
@RestController@RequestMapping("/api/ai")@RequiredArgsConstructorpublicclassChatController{privatefinalChatServicechatService;@PostMapping("/chat")publicResponseEntity<ChatResponse>chat(@Valid@RequestBodyChatRequestrequest){returnResponseEntity.ok(chatService.chat(request));}}

异常处理增强

添加全局异常处理器:

@ControllerAdvicepublicclassGlobalExceptionHandler{@ExceptionHandler(Exception.class)publicResponseEntity<ChatResponse>handleException(Exceptione){returnResponseEntity.status(500).body(ChatResponse.builder().code(500).msg(e.getMessage()).build());}}

测试验证

创建测试类验证功能:

@SpringBootTest@AutoConfigureMockMvcclassChatControllerTest{@AutowiredprivateMockMvcmockMvc;@TestvoidtestChatEndpoint()throwsException{Stringrequest="{\"message\":\"Java有哪些特性?\"}";mockMvc.perform(post("/api/ai/chat").contentType(MediaType.APPLICATION_JSON).content(request)).andExpect(status().isOk()).andExpect(jsonPath("$.code").value(200));}}

性能优化建议

添加连接池配置提升性能:

spring:ai:openai:client:connect-timeout:5000read-timeout:30000

安全增强

建议在Controller添加速率限制:

@RateLimiter(value=10)// 每秒10次请求@PostMapping("/chat")publicResponseEntity<ChatResponse>chat(@Valid@RequestBodyChatRequestrequest){// ...}

国内模型切换示例

若要切换至通义千问,只需修改依赖和配置:

<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-qwen-spring-boot-starter</artifactId><version>0.8.1</version></dependency>

对应配置调整为:

spring:ai:qwen:api-key:${QWEN_API_KEY}chat:model:qwen-turbo
http://www.jsqmd.com/news/222973/

相关文章:

  • 项目应用示例:Reflect API在ES6中的作用
  • ECU实现UDS 27服务时的RAM资源优化建议
  • Qwen2.5-7B推理加速:SwiGLU激活函数优化实战
  • 银行业一体化智能可观测平台选型指南——聚焦业务价值,保障核心业务稳定运行
  • OpenMV机器视觉项目开发流程:实战案例分享经验总结
  • Qwen2.5-7B推理速度优化:降低延迟的5个关键步骤
  • Qwen2.5-7B免费部署方案:利用社区资源运行大模型实战
  • Qwen2.5-7B中文诗歌创作:文学生成应用
  • Qwen2.5-7B文本摘要生成:长文档处理技巧
  • 如何高效部署Qwen2.5-7B?网页服务接入实战步骤详解
  • Qwen2.5-7B部署教程:基于transformers架构的环境配置详解
  • Qwen2.5-7B多模型协作:与其他AI服务集成方案
  • Qwen2.5-7B实时推理:低延迟应用场景实现
  • 一文说清MISRA C++与普通C++的关键差异
  • Qwen2.5-7B语音助手:与TTS/ASR集成方案
  • 招聘流程越复杂越好吗?HR的效率真相
  • Qwen2.5-7B视频摘要:长视频内容浓缩技术
  • DNS负载均衡能自动避开故障服务器吗?
  • 抱脸(huggingface)的使用姿势
  • Qwen2.5-7B能否处理复杂逻辑?结构化输出实战验证
  • Qwen2.5-7B推理成本优化:降低GPU消耗的7种方法
  • 基于大数据的心脏病数据分析系统【附源码+文档】
  • Qwen2.5-7B镜像测评:多场景推理稳定性实操评估
  • Packet Tracer汉化系统学习:全面讲解每一步骤
  • 基于协同过滤算法的特产销售系统【附源码+文档】
  • Qwen2.5-7B部署手册:高可用推理服务架构设计
  • Qwen2.5-7B自动摘要:长文档精简技巧
  • Qwen2.5-7B开源部署完整指南:支持8K生成长度配置
  • 诺亚财富汪静波:在通胀的现实里守住现金流,在通缩的未来里捕获红利
  • PCIe高速通道布局布线思路详解