Spring AI Alibaba 入门教程:快速集成大模型到Spring Boot应用

Spring AI Alibaba 入门教程:快速集成大模型到Spring Boot应用

本文将带你从零开始学习如何使用 Spring AI Alibaba,将强大的大模型能力集成到你的Spring Boot应用中。无论你是想开发智能客服、内容生成工具还是数据分析应用,本文都会提供完整的代码示例和详细步骤。

一、什么是 Spring AI Alibaba?

Spring AI Alibaba 是阿里巴巴开源的一个Spring Boot Starter模块,它让Java开发者可以轻松地在Spring应用中集成阿里云的通义千问等大模型。该项目封装了调用大模型API的复杂逻辑,开发者只需关注业务逻辑,而无需深入了解底层AI技术细节。

主要特性

  • 支持多种阿里大模型(如Qwen系列)
  • 提供简洁易用的API接口
  • 自动化配置与依赖注入
  • 支持同步/异步调用
  • 可扩展性强,支持自定义模型接入

二、环境准备

在开始编码前,确保你的开发环境满足以下要求:

1. 技术栈要求

  • JDK 17+(Spring Boot 3.x要求)
  • Spring Boot 3.xSpring Boot 2.7+
  • MavenGradle
  • 阿里云账号(用于获取API Key)

2. 获取API Key

  1. 访问https://bailian.console.aliyun.com/
  2. 注册账号并登录
  3. 开通"百炼大模型推理"服务
  4. 创建API Key并保存备用

三、项目集成步骤

下面我们一步步创建集成Spring AI Alibaba的Spring Boot应用。

1. 创建项目并添加依赖

Maven配置

<?xml version="1.0" encoding="UTF-8"?> <project xmlns=" http://maven.apache.org/POM/4.0.0 " xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance " xsi:schemaLocation=" http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd "> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.2.0</version> <relativePath/> </parent> <groupId>com.example</groupId> <artifactId>spring-ai-demo</artifactId> <version>1.0.0</version> <properties> <java.version>17</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- Spring AI Alibaba 核心依赖 --> <dependency> <groupId>com.alibaba.cloud.ai</groupId> <artifactId>spring-ai-alibaba-starter</artifactId> <version>1.0.0-M2</version> </dependency> </dependencies> <!-- 添加仓库配置 --> <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> </project> 

Gradle配置

implementation 'com.alibaba:spring-ai-alibaba-spring-boot-starter:0.8.0' 

2. 应用配置

application.yml 中添加以下配置

spring: ai: dashscope: api-key: your_api_key_here # 替换为你的实际API Key chat: options: model: qwen-max # 可选值: qwen-plus, qwen-turbo等 

或者在 application.properties 中配置

spring.ai.dashscope.api-key=${AI_DASHSCOPE_API_KEY} 

3. 创建聊天控制器

以下是完整的控制器实现,支持同步和流式响应

package com.example.ai.controller; import org.springframework.ai.chat.ChatClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import reactor.core.publisher.Flux; @RestController @RequestMapping("/api/ai") public class AIChatController { private final ChatClient chatClient; @Autowired public AIChatController(ChatClient chatClient) { this.chatClient = chatClient; } /** * 同步聊天接口 - 等待完整响应后返回 */ @GetMapping("/chat") public String chat(@RequestParam String message) { return chatClient.prompt() .user(message) .call() .content(); } /** * 流式聊天接口 - 实时返回响应片段 * 适用于长文本生成,实现打字机效果 */ @GetMapping("/chat/stream") public Flux<String> streamChat(@RequestParam String message) { return chatClient.prompt() .user(message) .stream() .content(); } } 

4. 创建服务类(可选)

对于更复杂的业务逻辑,建议使用服务层封装

package com.example.ai.service; import com.alibaba.spring.ai.alibaba.qwen.QwenChatClient; import org.springframework.stereotype.Service; @Service public class AIChatService { private final QwenChatClient chatClient; public AIChatService(QwenChatClient chatClient) { this.chatClient = chatClient; } public String generateResponse(String prompt) { return chatClient.call(prompt); } } 

四、进阶功能示例

1. 函数调用(Function Calling)

函数调用允许大模型动态触发业务逻辑,以下是天气查询工具示例

package com.example.ai.tools; import com.alibaba.spring.ai.tools.Tool; import org.springframework.stereotype.Component; @Component public class WeatherTool { @Tool("get_weather") public String getWeather(String location) { // 这里可以集成真实的天气API return "当前" + location + "的天气是晴天,温度25°C"; } } 

注册工具到Qwen客户端:

@Service public class QwenService { private final QwenChatClient chatClient; public QwenService(QwenChatClient chatClient, WeatherTool weatherTool) { this.chatClient = chatClient; this.chatClient.setToolProviders(weatherTool); } } 

当用户询问"明天上海天气如何?"时,Qwen会自动调用getWeather工具并返回整合后的信息。

2. 提示词模板(Prompt Template)

使用提示词模板可以构建更结构化的提示

@GetMapping("/professional") public String professionalReply(@RequestParam String topic) { String systemPrompt = "你是一个专业的技术博客作者,请用通俗易懂的方式解释以下技术概念:"; return chatClient.prompt() .system(systemPrompt) .user(topic) .call() .content(); } 

3. 图像生成示例

除了文本聊天,Spring AI Alibaba还支持图像生成

@RestController @RequestMapping("/api/image") public class ImageController { @Autowired private TongYiImagesModel imageClient; @GetMapping("/generate") public ResponseEntity<byte[]> generateImage(@RequestParam String prompt) { ImagePrompt imagePrompt = new ImagePrompt(prompt); ImageResponse response = imageClient.call(imagePrompt); String imageUrl = response.getResult().getOutput().getUrl(); // 返回图像URL或直接返回图像数据 return ResponseEntity.ok() .contentType(MediaType.IMAGE_PNG) .body(fetchImageData(imageUrl)); } } 

五、运行和测试

  1. 启动Spring Boot应用

测试流式接口(使用HTTP客户端支持流式响应):

http://localhost:8080/api/ai/chat/stream?message=讲一个有趣的故事 

访问同步聊天接口:

http://localhost:8080/api/ai/chat?message=你好,请介绍一下Spring AI Alibaba 

六、常见问题与解决方案

问题解决方案
报错 SignatureDoesNotMatch检查API Key是否正确,或重新生成
请求超时增加超时时间或检查网络连接
返回空结果检查输入内容是否合规,避免敏感词
依赖解析失败检查仓库配置,确保使用正确的Maven仓库

七、实际应用场景

Spring AI Alibaba可以应用于多种业务场景

  1. 智能客服系统 - 自动回答用户问题
  2. 内容生成工具 - 自动生成文章、产品描述等
  3. 代码助手 - 帮助开发者编写和优化代码
  4. 数据分析与总结 - 分析数据并生成自然语言报告

总结

通过本文的学习,你已经掌握了使用Spring AI Alibaba集成大模型的基本方法。这个框架大大降低了在Java应用中集成AI能力的门槛,让开发者可以专注于业务逻辑而不是底层技术细节。

进一步学习资源

希望本教程对你有所帮助!如果有任何问题,欢迎在评论区留言讨论。

注意:本文基于Spring AI Alibaba当前版本编写,随着框架更新,部分API可能会有变化,建议查阅最新官方文档。

Read more

OpenClaw启动后,web控制面板无法登录,返回信息:Not Found

OpenClaw启动后,web控制面板无法登录,返回信息:Not Found

在1.19这台服务器安装了OpenClaw,不管用浏览器,还是直接使用curl,都是返回信息:Not Found 但是1.12这台服务器就没有问题... curl http://localhost:18789 Not Found 查看绑定情况 openclaw config get gateway.bind 🦞 OpenClaw 2026.3.2 (85377a2) — I'm not saying your workflow is chaotic... I'm just bringing a linter and a helmet. loopback 绑定到lan 打开网络连通 openclaw config

前端虚拟列表实现:别再渲染10000个DOM节点了

前端虚拟列表实现:别再渲染10000个DOM节点了

前端虚拟列表实现:别再渲染10000个DOM节点了 毒舌时刻 这代码写得跟网红滤镜似的——仅供参考。 各位前端同行,咱们今天聊聊前端虚拟列表。别告诉我你还在一次性渲染10000个列表项,那感觉就像把10000本书全部摆在桌面上——既占地方又难找。 为什么你需要虚拟列表 最近看到一个项目,一个下拉列表有5000个选项,全部渲染导致页面卡死,我差点当场去世。我就想问:你是在做列表还是在做性能杀手? 反面教材 // 反面教材:一次性渲染所有数据 function BigList({ items }) { return ( <ul style={{ height: '400px', overflow: 'auto' }}> {items.map(item => ( <li key={item.id} style={{ height: '50px'

【Java Web学习 | 第三篇】CSS(2) - 元素显示模式

【Java Web学习 | 第三篇】CSS(2) - 元素显示模式

🌈个人主页: Hygge_Code🔥热门专栏:从0开始学习Java | Linux学习| 计算机网络💫个人格言: “既然选择了远方,便不顾风雨兼程” 文章目录 * CSS元素显示模式 * 2.1 什么是元素显示模式? * 2.2 三大核心显示模式详解 * 1. 块级元素(Block Level Elements) * 2. 行内元素(Inline Elements) * 3. 行内块元素(Inline-Block Elements) * 2.3元素显示模式的转换语法 * 1. 转为块级元素:`display: block` * 2. 转为行内元素:`display: inline` * 3. 转为行内块元素:`display: inline-block` * 2.4 实战案例:小米侧边栏实现 * 2.