大模型开发 - 05 QuickStart_接入阿里百炼平台:Spring AI Alibaba 与 DashScope SDK
Spring AI Alibaba是基于Spring AI框架深度集成阿里百炼平台的AI开发框架,支持ChatBot、工作流和多智能体应用开发。核心功能包括Graph多智能体框架、企业级AI生态集成和自主规划智能体探索。与Spring AI相比,它专为阿里云百炼平台优化,提供开箱即用的模型客户端、统一接口和多模态支持。使用前需获取API Key并配置依赖,支持文本对话、文生图等功能。该框架适用于从
文章目录
文章目录
Pre
大模型开发 - 03 QuickStart_借助DeepSeekChatModel实现Spring AI 集成 DeepSeek
大模型开发 - 04 QuickStart_DeepSeek 模型调用流程源码解析:从 Prompt 到远程请求
Spring AI Alibaba 概览
Spring AI Alibaba(SAA) 是一款以 Spring AI 为基础,深度集成百炼平台,支持 ChatBot、工作流、多智能体应用开发模式的 AI 框架。
在 1.0 版本中,Spring AI Alibaba 提供以下核心能力,让开发者可以快速构建自己的 Agent、Workflow 或 Multi-agent 应用。
- Graph 多智能体框架。基于 Spring AI Alibaba Graph 开发者可快速构建工作流、多智能体应用,无需关心流程编排、上下文记忆管理等底层实现。通过 Graph 与低代码、自规划智能体结合,为开发者提供从低代码、高代码到零代码构建智能体的更灵活选择。
- 通过 AI 生态集成,解决企业智能体落地过程中关心的痛点问题。Spring AI Alibaba 支持与百炼平台深度集成,提供模型接入、RAG知识库解决方案;支持 ARMS、Langfuse 等可观测产品无缝接入;支持企业级的 MCP 集成,包括 Nacos MCP Registry 分布式注册与发现、自动 Router 路由等。
- 探索具备自主规划能力的通用智能体产品与平台。社区发布了基于 Spring AI Alibaba 框架实现的 JManus 智能体,除了对标 OpenManus 的通用智能体能力外,我们的目标是基于 JManus 探索自主规划在智能体开发方向的应用,为开发者提供从低代码、高代码到零代码构建智能体的更灵活选择。
与 Spring AI 的联系和区别
Spring AI 是 Spring 官方社区维护的开源框架,最初于 2024 年 5 月发布首个 Milestone 版本,在 2025 年 5 月正式发布首个 1.0 GA 版本。Spring AI 侧重 AI 能力构建的底层原子能力抽象以及与 Spring Boot 生态的无缝集成,如模型通信(ChatModel)、提示词(Prompt)、检索增强生成(RAG)、记忆(ChatMemory)、工具(Tool)、模型上下文协议(MCP)等,帮助 Java 开发者快速构建 AI 应用。
自 2024 年 9 月正式开源以来,Spring AI Alibaba 一直与 Spring AI 社区有深度沟通合作,期间发布了多个 Milestone 版本并与很多企业客户建立的深度合作关系。在交流过程中,我们看到了低代码开发模式的优势与限制,随着业务复杂度提升客户从聊天机器人、单智能体到对多智能体架构方案的诉求,也看到了智能体开发从简单 Demo 走向生产上线过程中遇到的困难。
⚠️ 注意:spring-ai-alibaba 依赖于 Spring AI 官方版本,因此新功能通常会比 DashScope 原生 SDK 延迟几天发布。如果需要接入阿里的百炼平台, 就必须用该组件
为什么选择 spring-ai-alibaba?
阿里团队维护的 spring-ai-alibaba
是对 Spring AI 的官方扩展,专为阿里云百炼(DashScope)平台设计。其核心优势包括:
- 与 Spring Boot 无缝集成:开箱即用的
@Autowired
模型客户端。 - 统一抽象接口:兼容 Spring AI 的
ChatModel
、ImageModel
等标准接口。 - 自动配置与环境变量支持:通过
application.yml
轻松配置 API Key。 - 多模态支持:图像、语音、文本、视频均可统一处理。
准备工作:获取 API Key
-
登录 阿里云百炼控制台
-
开通模型服务(如 Qwen、Wanx 系列)
-
在 API Key 管理 页面创建并复制你的密钥
-
设置环境变量(推荐):
IDEA设置如下
项目依赖配置
1.引入 BOM(推荐)
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud.ai</groupId>
<artifactId>spring-ai-alibaba-bom</artifactId>
<version>1.0.0.2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
2. 添加 Starter
<dependencies>
<!-- DashScope 核心支持 -->
<dependency>
<groupId>com.alibaba.cloud.ai</groupId>
<artifactId>spring-ai-alibaba-starter-dashscope</artifactId>
</dependency>
<!-- 如需文生视频等高级功能,额外引入原生 SDK -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dashscope-sdk-java</artifactId>
<version>2.21.11</version> <!-- 使用最新版 -->
</dependency>
</dependencies>
当前最新版 DashScope SDK 为 2.21.11(截至 2025 年 10 月 7 日),查看版本
基础配置
在 application.yml
中配置 API Key:
spring:
ai:
dashscope:
api-key: ${AI_DASHSCOPE_API_KEY}
功能实战示例
1. 文本对话(Qwen 大模型)
/**
* 测试DashScopeChatModel的调用功能
*
* @param dashScopeChatModel 自动注入的DashScopeChatModel实例,用于执行聊天模型调用
*/
@Test
public void testQwen(@Autowired DashScopeChatModel dashScopeChatModel){
// 调用聊天模型并获取响应内容
String content = dashScopeChatModel.call("你好,请介绍你自己");
System.out.println(content);
}
/**
* 测试DashScope聊天模型的流式响应功能
*
* @param dashScopeChatModel 自动注入的DashScope聊天模型实例,用于发起聊天请求
*/
@Test
public void testQwenStream(@Autowired DashScopeChatModel dashScopeChatModel){
// 发起流式聊天请求,向模型发送"你好,请介绍你自己"消息
Flux<String> stream = dashScopeChatModel.stream("你好,请介绍你自己");
// 遍历流式响应结果并打印到控制台
stream.toIterable().forEach(System.out::println);
}
2. 文生图(Text-to-Image)
/**
* 测试文本转图片功能
* @param imageModel DashScope图片模型,用于调用图片生成接口
*/
@Test
public void text2Img(
@Autowired DashScopeImageModel imageModel) {
// 构建图片生成选项,指定使用的模型为wanx2.1-t2i-turbo
DashScopeImageOptions imageOptions = DashScopeImageOptions.builder()
//.withN()
//.withWidth()
//.withHeight()
.withModel("wanx2.1-t2i-turbo").build();
// 调用图片模型生成图片,输入提示文本为"小工匠深夜写代码"
ImageResponse imageResponse = imageModel.call(
new ImagePrompt("小工匠深夜写代码", imageOptions));
// 从响应结果中提取生成的图片URL
String imageUrl = imageResponse.getResult().getOutput().getUrl();
// 图片url
System.out.println(imageUrl);
// 图片base64
// imageResponse.getResult().getOutput().getB64Json();
/*
按文件流相应
InputStream in = url.openStream();
response.setHeader("Content-Type", MediaType.IMAGE_PNG_VALUE);
response.getOutputStream().write(in.readAllBytes());
response.getOutputStream().flush();*/
}
3. 文生语音(Text-to-Speech)
@Test
public void testText2Audio(@Autowired DashScopeSpeechSynthesisModel model) throws IOException {
DashScopeSpeechSynthesisOptions options = DashScopeSpeechSynthesisOptions.builder()
.responseFormat(DashScopeSpeechSynthesisApi.ResponseFormat.MP3)
.build();
SpeechSynthesisResponse response = model.call(
new SpeechSynthesisPrompt("大家好,我是人帅活好的徐庶。", options)
);
// 保存为 MP3 文件
File file = new File(System.getProperty("user.dir") + "/output.mp3");
try (FileOutputStream fos = new FileOutputStream(file)) {
ByteBuffer audio = response.getResult().getOutput().getAudio();
fos.write(audio.array());
}
}
4. 语音转文本(Audio-to-Text)
/**
* 测试音频转文本功能
*
* @param transcriptionModel 音频转录模型实例,用于执行音频转文本操作
* @throws MalformedURLException 当音频资源URL格式不正确时抛出此异常
*/
@Test
public void testAudio2Text( @Autowired DashScopeAudioTranscriptionModel transcriptionModel) throws MalformedURLException {
// 构建语音识别请求参数
TranscriptionParam param =
TranscriptionParam.builder()
// 若未配置环境变量,取消下一行的注释并将your-api-key替换成您自己的API Key
// .apiKey("your-api-key")
.model("sensevoice-v1")
.fileUrls(
Arrays.asList(
"https://dashscope.oss-cn-beijing.aliyuncs.com/samples/audio/sensevoice/rich_text_example_1.wav"))
.parameter("language_hints", new String[] {"en"})
.build();
try {
Transcription transcription = new Transcription();
// 提交语音识别任务
TranscriptionResult result = transcription.asyncCall(param);
System.out.println("RequestId: " + result.getRequestId());
// 循环获取任务执行结果,直到任务结束
while (true) {
result = transcription.fetch(TranscriptionQueryParam.FromTranscriptionParam(param, result.getTaskId()));
if (result.getTaskStatus() == TaskStatus.SUCCEEDED || result.getTaskStatus() == TaskStatus.FAILED) {
break;
}
Thread.sleep(1000);
}
// 获取语音识别结果列表
List<TranscriptionTaskResult> taskResultList = result.getResults();
if (taskResultList != null && taskResultList.size() > 0) {
TranscriptionTaskResult taskResult = taskResultList.get(0);
// 获取识别结果的下载地址
String transcriptionUrl = taskResult.getTranscriptionUrl();
// 建立HTTP连接并读取识别结果内容
HttpURLConnection connection =
(HttpURLConnection) new URL(transcriptionUrl).openConnection();
connection.setRequestMethod("GET");
connection.connect();
BufferedReader reader =
new BufferedReader(new InputStreamReader(connection.getInputStream()));
// 使用Gson将结果格式化为美观的JSON格式并打印
Gson gson = new GsonBuilder().setPrettyPrinting().create();
System.out.println(gson.toJson(gson.fromJson(reader, JsonObject.class)));
}
} catch (Exception e) {
System.out.println("error: " + e);
}
// 强制退出程序
System.exit(0);
}
5. 文生视频(需原生 SDK)
spring-ai-alibaba
暂未封装视频生成,需直接使用 dashscope-sdk-java
:
/**
* 测试文本转视频功能
* 该方法演示了如何使用VideoSynthesis类将文本描述转换为视频
*
* @throws ApiException 当API调用出现异常时抛出
* @throws NoApiKeyException 当缺少API密钥时抛出
* @throws InputRequiredException 当必需的输入参数缺失时抛出
*/
@Test
public void text2Video() throws ApiException, NoApiKeyException, InputRequiredException {
// 创建视频合成实例
VideoSynthesis vs = new VideoSynthesis();
// 构建视频合成参数
VideoSynthesisParam param =
VideoSynthesisParam.builder()
.model("wanx2.1-t2v-turbo")
.prompt("小工匠深夜敲代码,火花四溅")
.size("1280*720")
//.apiKey(System.getenv("ALI_AI_KEY"))
.build();
System.out.println("please wait...");
// 调用视频合成接口
VideoSynthesisResult result = vs.call(param);
// 输出生成的视频URL
System.out.println(result.getOutput().getVideoUrl());
}
💡 提示:文生视频属于高阶功能,建议在生产环境中异步处理并加入重试机制。
最佳实践建议
- API Key 安全:务必通过环境变量或配置中心管理,禁止硬编码。
- 模型选择:
- 对话:
qwen-max
/qwen-plus
- 文生图:
wanx2.1-t2i-turbo
- 文生视频:
wanx2.1-t2v-turbo
- 对话:
- 错误处理:捕获
ApiException
、NoApiKeyException
等异常。 - 性能优化:对于高并发场景,考虑使用连接池或异步调用。
- 日志监控:记录请求/响应内容(脱敏后),便于调试与计费分析。
总结
通过 spring-ai-alibaba
,我们可以以极低的成本接入阿里百炼平台,享受 Qwen 大模型、Wanx 多模态模型的强大能力。对于标准场景(对话、文生图、语音合成等),推荐优先使用 Spring AI 抽象;对于前沿功能(如文生视频),则可结合原生 dashscope-sdk-java
灵活扩展。
随着 Spring AI 生态的成熟,spring-ai-alibaba
将持续跟进新模型与新能力,让 Java 开发者也能轻松驾驭 AIGC 浪潮。
参考链接:
更多推荐
所有评论(0)