楼层: 首页/ 软件技术/ Spring AI/ 多模态:让 AI 看图、生成图、听语音
七

多模态:让 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。"