Spring AI Alibaba 多模态实战:文本对话、文生图、语音合成、语音转文字完整教程
目录
Spring AI Alibaba 是基于 Spring 生态封装的 AI 开发框架,完美适配阿里百炼 DashScope 大模型,屏蔽了底层复杂的 API 对接逻辑,让开发者可以快速实现文本对话、图片生成、语音合成、语音转文字四大核心多模态能力。
本文将从零讲解四大模型的核心原理、完整可运行代码,同时补充实战踩坑解决方案,适合新手快速上手 Spring AI 多模态开发。
一、核心模型整体介绍
Spring AI Alibaba 对不同 AI 能力做了高度抽象,提供四类核心模型,各司其职,接口统一、极简易用:
-
ChatModel(文本对话模型):基础文本交互,接收纯文本输入,返回格式化文本回复,是最基础的大模型能力。
-
ImageModel(文生图模型):以文生图,接收用户文本描述,AI 生成对应图片并返回图片公网地址。
-
Audio 语音合成模型:文本转语音,输入文字,模型生成音频流,可直接下载保存为 MP3 文件。
-
Audio 语音转文字模型:音频解析转写,上传音频文件,自动识别音频内容并输出文本,适配会议记录、语音笔记等场景。
二、ChatModel 文本对话模型(基础核心)
1. 工作原理
ChatModel 是 Spring AI 顶层统一对话接口,底层适配阿里通义千问系列大模型。接收前端传入的文本 Prompt,将请求转发至 DashScope 大模型,模型基于训练数据理解语义、生成回复,最终返回格式化文本结果。
package org.example.ai_demo.controller;
import com.alibaba.cloud.ai.memory.redis.RedisChatMemoryRepository;
import org.springframework.ai.chat.model.ChatModel;
import org.springframework.ai.chat.model.ChatResponse;
import org.springframework.ai.chat.prompt.Prompt;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ChatModelController {
// 自动注入底层 DashScope 对话模型实现
private final ChatModel chatModel;
public ChatModelController(ChatModel chatModel){
this.chatModel = chatModel;
}
@RequestMapping("/chat2")
public String chat2(String input){
// 封装Prompt并调用大模型
ChatResponse response = chatModel.call(new Prompt(input));
// 提取模型返回的文本内容
return response.getResult().getOutput().getText();
}
}
三、ImageModel 文生图模型
1. 工作原理
ImageModel 专门用于图文生成,底层适配阿里万相大模型。接收用户图片描述文本,调用 DashScope 图像生成接口,异步生成图片后返回公网可访问的图片 URL,支持自定义图片尺寸、模型规格。
package org.example.ai_demo.controller;
import org.springframework.ai.image.*;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ImageModelControler {
// 注入文生图模型
private final ImageModel imageModel;
public ImageModelControler(ImageModel imageModel) {
this.imageModel = imageModel;
}
@RequestMapping("/image")
public String image(String input){
// 配置图像生成参数:模型、宽高
ImageOptions imageOptions = ImageOptionsBuilder
.builder()
.model("wanx2.1-t2i-turbo")
.height(1024)
.width(1024)
.build();
// 封装绘图请求
ImagePrompt imagePrompt = new ImagePrompt(input, imageOptions);
ImageResponse response = imageModel.call(imagePrompt);
// 返回图片公网URL
String url = response.getResult().getOutput().getUrl();
return url;
}
}
四、AudioModel 语音合成(文本转语音)
1. 工作原理
通过 SpeechSynthesisModel 实现文本转语音能力,输入任意中文/英文文本,模型自动合成标准人声语音,返回音频字节流,前端可直接下载为 MP3 格式文件。、
package org.example.ai_demo.controller;
import com.alibaba.cloud.ai.dashscope.audio.synthesis.SpeechSynthesisModel;
import com.alibaba.cloud.ai.dashscope.audio.synthesis.SpeechSynthesisPrompt;
import com.alibaba.cloud.ai.dashscope.audio.synthesis.SpeechSynthesisResponse;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.nio.ByteBuffer;
@RestController
public class AudioModelController {
// 注入语音合成模型
private final SpeechSynthesisModel speechSynthesisModel;
public AudioModelController(SpeechSynthesisModel speechSynthesisModel) {
this.speechSynthesisModel = speechSynthesisModel;
}
@GetMapping("/synthesize")
public ResponseEntity<byte[]> synthesize(@RequestParam("text") String text){
// 封装文本转语音请求
SpeechSynthesisPrompt prompt = new SpeechSynthesisPrompt(text);
SpeechSynthesisResponse response = speechSynthesisModel.call(prompt);
// 获取音频字节流
ByteBuffer audio = response.getResult().getOutput().getAudio();
byte[] audioBytes = new byte[audio.remaining()];
audio.get(audioBytes);
// 响应MP3音频文件,支持浏览器直接下载
return ResponseEntity.ok()
.contentType(MediaType.APPLICATION_OCTET_STREAM)
.header("Content-Disposition", "attachment; filename=output.mp3")
.body(audioBytes);
}
}
五、语音转文字模型(音频转文本,重点避坑)
1. 工作原理
基于 sensevoice-v1 模型,读取音频文件并智能识别语音内容,输出结构化文本。该模型为异步任务模型,也是实战踩坑最多的模块。
2. 核心踩坑总结(必看)
很多新手直接使用本地磁盘文件(FileSystemResource)调用接口,会直接报错 spec is null 空指针异常,根源:
-
旧版本 Spring AI Alibaba SDK 不支持本地文件直传
-
DashScope 语音转写接口仅支持公网可访问的 HTTPS 音频链接
-
临时签名 OSS 链接、私有权限 OSS 文件均无法识别,会提示「不支持该文件类型」
3. 前置准备(必须操作)
1. 打开阿里云 OSS 控制台,创建 Bucket;
2. 将 Bucket 读写权限设置为 公共读;
3. 上传本地 MP3 文件,复制无签名永久公网 HTTPS 链接;
4. 链接可在浏览器直接播放/下载即为有效。
package org.example.ai_demo.controller;
import com.alibaba.cloud.ai.dashscope.audio.DashScopeAudioTranscriptionModel;
import com.alibaba.cloud.ai.dashscope.audio.DashScopeAudioTranscriptionOptions;
import org.springframework.ai.audio.transcription.AudioTranscriptionPrompt;
import org.springframework.core.io.UrlResource;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.net.MalformedURLException;
@RestController
public class AudioModelController2 {
// 替换为你的OSS公共读MP3公网链接
private static final String AUDIO_URL_PATH = (你的公网地址)
private final DashScopeAudioTranscriptionModel dashScopeAudioTranscriptionModel;
public AudioModelController2(DashScopeAudioTranscriptionModel dashScopeAudioTranscriptionModel){
this.dashScopeAudioTranscriptionModel = dashScopeAudioTranscriptionModel;
}
@GetMapping("/audio")
public String audio() throws MalformedURLException {
// 加载公网音频资源
UrlResource resource = new UrlResource(AUDIO_URL_PATH);
// 指定语音转写模型
AudioTranscriptionPrompt prompt = new AudioTranscriptionPrompt(resource,
DashScopeAudioTranscriptionOptions.builder()
.withModel("sensevoice-v1")
.build());
// 返回转写后的文本
return dashScopeAudioTranscriptionModel.call(prompt).getResult().getOutput();
}
}
六、总结
1. ChatModel:基础文本对话,开箱即用,无特殊环境要求;
2. ImageModel:文生图异步任务,需配置重试策略规避排队报错;
3. Audio 语音合成:文本转音频,直接返回文件流,无需第三方存储;
4. Audio 语音转文字:核心难点,必须使用OSS公共读公网链接,禁止本地文件、私有链接、临时签名链接。
Spring AI Alibaba 极大简化了多模态 AI 开发,掌握以上四大模型,即可快速实现聊天、绘图、语音合成、语音转写全场景 AI 应用。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)