七
多模态:让 AI 看图、生成图、听语音
Multimodal
前面都是文字对话。现在大模型能干更多事:看一张图描述内容(Vision)、根据文字画图(文生图)、听语音转文字(STT)、文字转语音(TTS)。通义千问 VL 系列就是多模态模型。
Vision 图片理解 → 给 AI 看一张图,让它描述
上传一张发票图片,让 AI 提取金额、日期、抬头。
实用场景:报销 OCR、证件识别、截图问答。
文生图 → 文字描述生成图片
"画一只穿西装的猫坐在办公桌前写代码"。
实用场景:营销配图、设计草图。
TTS / STT → 文字语音互转
把回答念出来(TTS),或把用户语音转成文字再处理(STT)。
实用场景:智能客服语音、有声读物。
上传发票图片,让 AI 提取金额和日期(思路示例)
@PostMapping("/invoice")
public InvoiceInfo extractInvoice(@Param("file") MultipartFile file) {
// 把图片转成字节,用多模态模型(qwen-vl)问问题
return chatClient.prompt()
.user(u -> u.text("这张发票里金额多少?日期是哪天?")
.media(MimeTypeUtils.IMAGE_JPEG,
file.getResource()))
.call()
.entity(InvoiceInfo.class); // 结构化输出
}
// 前提:application.yml 里 model 配的是 qwen-vl 多模态模型
文生图与语音(了解即可)
文生图和 TTS/STT 在 Spring AI 里是另一套接口(ImageModel、SpeechModel),不是 ChatClient。学习阶段知道有这能力就行,真要用再查官方文档。
文生图思路(以官方 ImageModel 用法为准)
// 注入 ImageModel,给一段文字描述,拿回图片字节
// ImageResponse resp = imageModel.create(prompt);
// byte[] img = resp.getResult().getOutput();
// 具体 API 以 spring-ai-alibaba 官方文档最新为准
// TTS:把文字念成语音
// STT:把语音转成文字
// 智能客服里 STT + 对话 + TTS 串起来就是语音客服
多模态模型别选错
看图、文生图、语音必须用对应的多模态模型(qwen-vl 系列),用纯文本模型(qwen-plus)传图片直接报错。application.yml 里的 model 名要跟能力匹配,别拿聊天模型干看图的活。
完整案例:用户消息带图片 URL,AI 描述图片内容
比上传文件更轻量的玩法:直接给一个图片 URL,多模态模型(qwen-vl)看图说话。
application.yml 切到多模态模型
spring:
ai:
alibaba:
chat:
options:
model: qwen-vl-max # 必须是 VL 多模态模型,不是 qwen-plus
api-key: ${DASHSCOPE_API_KEY}
接口:user 消息里同时给文字和图片
@GetMapping("/describe")
public String describeImage(String imageUrl) {
return chatClient.prompt()
.user(u -> u
.text("描述这张图里有什么,如果是发票就提取金额和日期。")
// 把图片 URL 作为媒体塞进同一条 user 消息
.media(MimeTypeUtils.IMAGE_PNG, new URL(imageUrl)))
.call()
.content();
}
输出示例
GET /describe?imageUrl=https://example.com/invoice.png
# AI 看图后回答:
# "这是一张增值税电子普通发票。购买方:某某公司;
# 金额(价税合计):¥1,286.00;开票日期:2026-09-10。"