在这里插入图片描述

在这里插入图片描述

Pre

大模型开发 - 01 Spring AI 核心特性一览

大模型开发 - 02 Spring AI Concepts

大模型开发 - 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 的 ChatModelImageModel等标准接口。
  • 自动配置与环境变量支持:通过 application.yml 轻松配置 API Key。
  • 多模态支持:图像、语音、文本、视频均可统一处理。

准备工作:获取 API Key

  1. 登录 阿里云百炼控制台

  2. 开通模型服务(如 Qwen、Wanx 系列)
    在这里插入图片描述

  3. API Key 管理 页面创建并复制你的密钥

在这里插入图片描述

  1. 设置环境变量(推荐):

    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());
    }

💡 提示:文生视频属于高阶功能,建议在生产环境中异步处理并加入重试机制。


最佳实践建议

  1. API Key 安全:务必通过环境变量或配置中心管理,禁止硬编码。
  2. 模型选择
    • 对话:qwen-max / qwen-plus
    • 文生图:wanx2.1-t2i-turbo
    • 文生视频:wanx2.1-t2v-turbo
  3. 错误处理:捕获 ApiExceptionNoApiKeyException 等异常。
  4. 性能优化:对于高并发场景,考虑使用连接池或异步调用。
  5. 日志监控:记录请求/响应内容(脱敏后),便于调试与计费分析。

总结

通过 spring-ai-alibaba,我们可以以极低的成本接入阿里百炼平台,享受 Qwen 大模型、Wanx 多模态模型的强大能力。对于标准场景(对话、文生图、语音合成等),推荐优先使用 Spring AI 抽象;对于前沿功能(如文生视频),则可结合原生 dashscope-sdk-java 灵活扩展。

随着 Spring AI 生态的成熟,spring-ai-alibaba 将持续跟进新模型与新能力,让 Java 开发者也能轻松驾驭 AIGC 浪潮。


参考链接

在这里插入图片描述

Logo

更多推荐