跳到主要内容 Spring Cloud Alibaba AI 初体验 | 极客日志
Java AI java
Spring Cloud Alibaba AI 初体验 本文介绍了 Spring Cloud Alibaba AI 的基本概念及其相对于原生 Spring AI 的优势,重点在于解决了国内大模型接入的问题。文章详细演示了如何在 Spring Boot 项目中引入依赖、配置阿里云通义千问 API Key,并通过 ChatClient、ImageClient 和 SpeechClient 实现了文本问答、文生图和语音合成功能。内容涵盖环境准备、代码实现、异常处理及常见问题排查,旨在帮助 Java 开发者快速上手基于通义大模型的 AI 应用开发。
嘘 发布于 2025/2/6 更新于 2026/4/21 1 浏览
Spring Cloud Alibaba AI 初体验
什么是 Spring AI Spring AI 是从著名的 Python 项目 LangChain 和 LlamaIndex 中汲取灵感,它不是这些项目的直接移植。它的成立信念是,下一波生成式人工智能应用程序将不仅适用于 Python 开发人员,而且将在许多编程语言中无处不在。
从 Spring AI 的官方描述中,我们可以总结出几个核心关键词:
提供抽象能力 :屏蔽底层大模型交互细节。
简化 AI 应用的开发 :降低集成门槛。
模型与向量支持 :统一接口访问不同模型及向量数据库。
AI 集成与自动配置 :基于 Spring Boot 的自动装配机制。
Spring AI 简化了我们构建大型复杂的 AI 应用的过程。当然,如果你的项目仅仅是需要调用一个 AI 接口,那其实直接调用官方 SDK 反而更方便。
支持所有主要的模型提供商,如 OpenAI、Microsoft、Amazon、Google 和 Huggingface。支持的模型类型包括聊天和文本到图像。
跨 AI 提供商的可移植 API,用于聊天和嵌入模型。支持同步和流 API 选项。
将 AI 模型输出映射到 POJO 。
支持所有主要的向量数据库,例如 Azure Vector Search、Chroma、Milvus、Neo4j、PostgreSQL/PGVector、PineCone、Qdrant、Redis 和 Weaviate。
跨 Vector Store 提供商的可移植 API,包括新颖的类似 SQL 的元数据过滤器 API。
AI 模型和矢量存储的 Spring Boot Starter 。
用于数据工程的 ETL 框架。
什么是 Spring Cloud Alibaba AI 原始的 Spring AI 并没有国内相关大模型的接入,对国内开发者不太友好。
总的来说,Spring Cloud Alibaba AI 目前基于 Spring AI 0.8.1 版本 API 完成通义系列大模型的接入。
在当前最新版本中,Spring Cloud Alibaba AI 主要完成了几种常见生成式模型的适配,包括对话、文生图、文生语音等。开发者可以使用 Spring Cloud Alibaba AI 开发基于通义的聊天、图片或语音生成 AI 应用。框架还提供 OutParser、Prompt Template、Stuff 等实用能力。
Spring Cloud Alibaba AI 官方还提供了包括聊天对话、文生图、文生语音等多种应用的开发示例。
环境准备与依赖引入 首先新建一个 Maven 项目,JDK 建议选择 17 版本,因为 Spring Boot 3.x 要求 JDK 17+。
Maven 文件需要引入 spring-cloud-alibaba-dependencies 和 spring-cloud-starter-alibaba-ai 两个依赖。注意版本号需与你的 Spring Cloud Alibaba 版本保持一致。
<dependencyManagement >
<dependencies >
<dependency >
<groupId > com.alibaba.cloud</groupId >
<artifactId > spring-cloud-alibaba-dependencies</artifactId >
<version > 2023.0.1.0</version >
<type > pom</type >
<scope > import</scope >
</dependency >
</dependencies >
</dependencyManagement >
<dependencies >
<dependency >
<groupId > com.alibaba.cloud</groupId >
<artifactId > spring-cloud-starter-alibaba-ai</artifactId >
</dependency >
<dependency >
<groupId > org.springframework.boot</groupId >
<artifactId > spring-boot-starter-web</artifactId >
</dependency >
<dependency >
<groupId > org.projectlombok</groupId >
<artifactId > lombok</artifactId >
<optional > true</optional >
</dependency >
</dependencies >
配置阿里云通义千问 配置阿里云通义千问的 Api-Key,没有的读者可以从阿里云官网申请。建议将 Key 保存在环境变量或配置中心中,避免硬编码在代码里。
server:
port: 8080
spring:
application:
name: alibaba-spring-ai-demo
cloud:
ai:
tongyi:
api-key: ${ALIYUN_TONGYI_API_KEY}
model-name: qwen-plus
新建 SpringBoot 启动类 @SpringBootApplication
public class MyAiApplication {
public static void main (String[] args) {
SpringApplication.run(MyAiApplication.class, args);
}
}
对接文本模型 新建一个控制器类,新建 /simple 接口,用来测试基本 QA。
@RestController
@RequestMapping("/ai")
@CrossOrigin
public class TongYiController {
@Autowired
@Qualifier("tongYiSimpleServiceImpl")
private TongYiService tongYiSimpleService;
@GetMapping("/simple")
public String completion (
@RequestParam(value = "message", defaultValue = "AI 时代下 Java 开发者该何去何从?")
String message
) {
return tongYiSimpleService.completion(message);
}
}
public interface TongYiService {
String completion (String message) ;
ImageResponse genImg (String imgPrompt) ;
String genAudio (String text) ;
}
具体的实现类如下:由 Spring AI 自动注入 ChatClient、StreamingChatClient。ChatClient 屏蔽底层通义大模型交互细节,后者用于流式调用。
对于 QA 而言,仅仅通过 client.call(prompt) 一行代码就可以完成对模型的调用。
@Service
@Slf4j
public class TongYiSimpleServiceImpl extends AbstractTongYiServiceImpl implements TongYiService {
private final ChatClient chatClient;
private final StreamingChatClient streamingChatClient;
@Autowired
public TongYiSimpleServiceImpl (ChatClient chatClient, StreamingChatClient streamingChatClient) {
this .chatClient = chatClient;
this .streamingChatClient = streamingChatClient;
}
@Override
public String completion (String message) {
try {
Prompt prompt = new Prompt (new UserMessage (message));
ChatResponse response = chatClient.call(prompt);
if (response != null && response.getResult() != null ) {
return response.getResult().getOutput().getContent();
}
return "Error: No response" ;
} catch (Exception e) {
log.error("Completion error" , e);
throw new RuntimeException (e.getMessage());
}
}
}
发送请求后,prompt 为 AI 时代下 Java 开发者该何去何从?,测试结果会返回相应的文本内容。
文生图模型 这里只给出 service 的代码,其它代码同上面的文本问答。
可以看到,只需要实例化一个 imagePrompt,再调用模型即可。
@Slf4j
@Service
public class TongYiImagesServiceImpl extends AbstractTongYiServiceImpl implements TongYiService {
private static final Logger logger = LoggerFactory.getLogger(TongYiImagesServiceImpl.class);
private final ImageClient imageClient;
@Autowired
public TongYiImagesServiceImpl (ImageClient client) {
this .imageClient = client;
}
@Override
public ImageResponse genImg (String imgPrompt) {
try {
var prompt = new ImagePrompt (imgPrompt);
return imageClient.call(prompt);
} catch (Exception e) {
logger.error("Image generation failed" , e);
throw e;
}
}
}
测试的 prompt 是:Painting a boy coding in front of the desk, with his dog.,效果通常很不错。
语音合成模型 @Slf4j
@Service
public class TongYiAudioSimpleServiceImpl extends AbstractTongYiServiceImpl implements TongYiService {
private static final Logger logger = LoggerFactory.getLogger(TongYiAudioSimpleServiceImpl.class);
private final SpeechClient speechClient;
@Autowired
public TongYiAudioSimpleServiceImpl (SpeechClient client) {
this .speechClient = client;
}
@Override
public String genAudio (String text) {
logger.info("gen audio prompt is: {}" , text);
try {
SpeechSynthesisResponse resWAV = speechClient.call(text);
return save(resWAV, SpeechSynthesisAudioFormat.WAV.getValue());
} catch (Exception e) {
logger.error("Audio synthesis failed" , e);
throw e;
}
}
}
常见问题与优化建议 在使用 Spring Cloud Alibaba AI 过程中,可能会遇到以下问题:
API Key 无效 :请确保 Key 在阿里云控制台已激活且未过期。
网络超时 :大模型推理耗时较长,建议设置合理的 HTTP 超时时间(如 60s)。
模型选择 :虽然框架屏蔽了部分细节,但在生产环境中,建议根据业务需求选择合适的模型规格(如 Qwen-Max, Qwen-Plus)以平衡成本与性能。
使用体验小结 阿里在 Java 开发领域一直是走在国内的前沿的,我也期待阿里继续完善 Spring Cloud Alibaba AI 的相关功能,为我们这些国内 Java 开发者提供更加方便的开发工具。
本文简单测试了文本问答、文生图以及语音合成三个功能。Spring Cloud Alibaba AI 还有很多丰富的功能,如流式调用、POJO 转换、AI Role 等功能,各位读者感兴趣可以自行前往官方 example 仓库查看。后续也打算利用 Spring Cloud Alibaba AI 尝试构建一个 RAG 问答应用。
简化开发 。个人开发者如果仅仅需要简单的问答接口,无需使用 Spring AI,然而,当项目中需要开发比较复杂的 AI 功能,如果仅仅使用官方的 SDK,写出的代码可能不太容易长期维护。
响应时间 。接口响应时间还有很大的优化空间,可以看到基本的文本问答的响应就耗费了 10s,不过这也取决于所处理任务的大小。可以通过异步调用或缓存策略来优化用户体验。
模型选择 。之前使用 SDK 可以自己选择通义提供的各种模型,而使用 Spring AI 框架,暂时不知道如何选择其它模型进行调用,有知道的掘友也可以在评论区说一下。
未来,Spring Cloud Alibaba AI 还将继续完成 VectorStore、Embedding、ETL Pipeline 等更多适配,简化 RAG 等更多 AI 应用开发场景。身为 Java 开发者,我也将继续关注 Spring Cloud Alibaba 社区的最新动态。
总结 Spring Cloud Alibaba AI 为 Java 开发者接入大模型提供了标准化的解决方案。通过统一的 API 和自动配置,大幅降低了集成成本。随着生态的完善,相信会有更多企业级应用基于此框架构建。建议在正式使用前仔细阅读官方文档,并根据实际业务场景进行适当的扩展和优化。
相关免费在线工具 Keycode 信息 查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
Escape 与 Native 编解码 JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
JavaScript / HTML 格式化 使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
JavaScript 压缩与混淆 Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
RSA密钥对生成器 生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
Mermaid 预览与可视化编辑 基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online