10 Java项目里的多模态:图片理解、图片生成、语音
前面九篇一直聊的是纯文本场景。用户发文字模型回文字。但现在的业务需求早就超出了纯文本。用户可能会给你发一张图片、一段语音、一个截图。你能让模型理解这些非文本信息吗答案是能。这就靠多模态。多模态 模型不仅能处理文字还能处理图片、语音、视频。2026 年的今天GPT-4o、Claude 3.5、通义千问都支持多模态。你给模型一张发票的截图它能读出金额、日期、发票号。你给它一张食品的图片它能识别出是什么菜、多少卡路里。这些功能在 Java 项目里怎么落地这篇讲清楚。图片理解让大模型看懂图片这是最常见的多模态需求。用户上传一张图片你的系统要能理解图片里的内容。Spring AI 对图片理解的支持很直接。关键代码只有几行Service public class ImageAnalysisService { private final ChatClient chatClient; public ImageAnalysisService(ChatClient.Builder builder) { this.chatClient builder.build(); } public String analyzeImage(String base64Image, String question) { UserMessage userMessage new UserMessage(question, new Media(MediaType.IMAGE_PNG, base64Image) ); return chatClient.prompt() .messages(userMessage) .call() .content(); } }new Media(MediaType.IMAGE_PNG, base64Image)是关键。你把图片编码成 Base64 字符串封装成 Media 对象传给 UserMessage。模型就能看到这张图。实用场景一发票识别。public InvoiceInfo extractInvoice(String imageBase64) { String result analyzeImage(imageBase64, 请从这张发票图片中提取以下信息 发票号码、开票日期、总金额数字、销售方名称。 只输出JSON格式不要其他内容。 ); return objectMapper.readValue(result, InvoiceInfo.class); }你的报销系统可以直接上传发票图片自动填单。人工不用再手打发票号。实用场景二截图 Debug。用户遇到系统问题截个图发给你。你的 AI 客服能直接看懂截图内容。帮我看一下这个错误——大模型看到截图里写着NullPointerException at UserService.java:152——直接给出解决方案。不用用户复述一遍错误信息。实用场景三商品识别。电商后台运营人员上传一张商品图片问 这个商品是什么类目适合什么季节推——模型根据图片中的款式、材质、颜色给出建议。图片生成让模型画给你看不只是看图片还能画图片。Spring AI 的图片生成 API 支持 OpenAI DALL-E 和 Stability AI。Service public class ImageGenerationService { private final OpenAiImageModel imageModel; public ImageGenerationService(OpenAiImageModel imageModel) { this.imageModel imageModel; } public String generateImage(String description) { ImageOptions options ImageOptionsBuilder.builder() .withModel(dall-e-3) .withWidth(1024) .withHeight(1024) .withQuality(hd) .build(); ImageResponse response imageModel.call( new ImagePrompt(description, options) ); // 返回图片的URL return response.getResult().getOutput().getUrl(); } }返回的 URL 指向一张生成好的图片。你可以下载到本地或者直接展示给用户。实用场景一文章配图自动生成。你的运营系统需要为每一篇公众号文章生成封面图。以前需要设计师做现在让 AI 生成。public String generateArticleCover(String articleTitle, String articleSummary) { String prompt String.format( 为以下文章生成一张公众号封面图标题「%s」。风格简洁现代渐变色大气。, articleTitle ); return generateImage(prompt); }实用场景二产品图生成。商品图片不够用让模型生成不同场景下的商品图。生成一张高档商务场景下的黑色笔记本电脑图片书桌上有一杯咖啡窗外是城市夜景——秒出图。实用场景三数据可视化。请帮我生成一张柱状图展示 Q1-Q4 的 销售额变化背景是现代商务风格——模型直接生成一张包含图表内容的图片。不是代码画图是大模型自己想象出来的一张图。语音交互STT 和 TTS图片之后就是语音。现在的 AI 应用不做语音交互完全是浪费。语音交互分两个方向STT语音转文字和TTS文字转语音。STT用户说话 → 转成文本 → 大模型处理。Spring AI 没有原生的 STT API但可以整合第三方。Service public class SpeechToTextService { private final OpenAiAudioModel audioModel; public SpeechToTextService(OpenAiAudioModel audioModel) { this.audioModel audioModel; } public String transcribe(byte[] audioData) { AudioPrompt prompt new AudioPrompt(audioData, AudioOptionsBuilder.builder() .withModel(whisper-1) .withResponseFormat(text) .build() ); return audioModel.call(prompt).getResult().getOutput(); } }或者用 Azure Speech Service在中文场景下效果更好Service public class AzureSttService { private final SpeechRecognizer speechRecognizer; public String recognizeFromMicrophone() { SpeechRecognitionResult result speechRecognizer .recognizeOnceAsync().get(); return result.getText(); } }TTS大模型的文字回答 → 转成语音播报给用户。Service public class TextToSpeechService { private final OpenAiAudioModel audioModel; public byte[] synthesize(String text) { AudioPrompt prompt new AudioPrompt(text, AudioOptionsBuilder.builder() .withModel(tts-1) .withVoice(alloy) .build() ); // 返回音频数据的字节数组 return audioModel.call(prompt).getResult().getOutput(); } }实用场景智能客服 IVR。用户打电话进来 → STT 转文字 → 大模型理解意图 → 查询数据库 → 生成回答 → TTS 转语音播报给用户。全链路无人工。用户以为在跟真人对话实际上背后是 AI。另一个场景AI 面试官。你说一段话AI 评价你的表达。或者 AI 朗读文章、读书给你听。VAD语音活动检测很重要。不设 VAD 的话环境噪音会一直触发语音识别浪费 Token。设置静音 500ms 后才检测结束。TTS 选型建议中文场景 ElevenLabs 的效果最好但延迟稍高。Azure Speech 在中文场景里也够用且成本更低。需要实时播报的场景用 Azure需要高质量的录音场景用 ElevenLabs。文件大小和性能优化多模态最大的坑是图片太大。一张手机拍的照片动不动 4-5 MBBase64 编码后更大。直接传给 API既费 Token 又费时间。强制压缩public String compressAndEncode(byte[] imageBytes, int maxWidth) throws IOException { BufferedImage original ImageIO.read(new ByteArrayInputStream(imageBytes)); int width Math.min(original.getWidth(), maxWidth); int height (int) ((double) width / original.getWidth() * original.getHeight()); BufferedImage resized new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics2D g resized.createGraphics(); g.drawImage(original, 0, 0, width, height, null); g.dispose(); ByteArrayOutputStream baos new ByteArrayOutputStream(); ImageIO.write(resized, jpg, baos); return Base64.getEncoder().encodeToString(baos.toByteArray()); }经验值宽度压缩到 1024pxJPEG 质量 80%。图片缩小 10 倍但对大模型的理解效果几乎没有影响。建议在上传环节就压缩不要在每次调用时压缩。前端上传时就处理好后端直接存压缩版本。语音场景也要注意录音文件采样率 16kHz 就够了不需要 44.1kHz。MP3 比特率 64kbps 也能识别准确。多模态技术的局限性多模态虽然强大但也不是万能的。有一些场景效果还不够好复杂图表理解。模型能看懂简单的柱状图但带多轴、嵌套、标注的复杂图表经常出错。这种场景还是建议用传统的 ECharts 渲染不要依赖模型读懂。低质量图片。像素很低、过曝、角度奇怪的图片模型理解能力会大幅下降。需要在前端做质量控制模糊图片提醒用户重新拍摄。多语言混合。中英文混合的图片场景模型容易漏识别其中一种语言。比如菜单上的中英双语菜名模型可能只提取中文忽略了英文。了解这些局限性比你盲目相信多模态要好得多。选对场景用对技术效果才会有保障。综合案例智能工单系统把图片理解、图片生成、文本交互组合起来一个完整的智能工单系统Service public class SmartTicketService { private final ImageAnalysisService visionService; private final ImageGenerationService imageGenService; private final ChatClient chatClient; public TicketResponse handleTicket(TicketRequest request) { // Step 1: 如果有图片附件先分析图片 String imageContext ; if (request.getImageBase64() ! null) { imageContext visionService.analyzeImage( request.getImageBase64(), 请描述这张图片中的问题和相关信息 ); } // Step 2: 结合图片分析和文字描述生成解决方案 String solution chatClient.prompt() .user(u - u.text( 用户问题 request.getDescription() \n图片分析 imageContext )) .call() .content(); // Step 3: 如果需要配图说明生成示意图 String illustrationUrl null; if (solution.length() 200) { illustrationUrl imageGenService.generateImage( 一张展示 request.getIssueType() 解决方案的示意图 ); } return new TicketResponse(solution, illustrationUrl); } }用户发一个截图说这里报错了——系统自动识别截图中的错误信息生成解决方案如果有需要还自动配一张示意图——全自动完成。 面试官视角的标准回答如果面试官问你们项目里多模态是怎么落地的多模态我们分三个方向在做图片理解、图片生成、语音交互。图片理解最常用。用户上传截图或图片我们编码成 Base64通过 Spring AI 的 Media 对象传给多模态模型。用于自动识别发票信息、提取截图中的错误信息、OCR 文档处理。一天处理几百张图片。图片生成用于运营场景。自动生成公众号封面图、商品配图、数据可视化图。调用 DALL-E 3 的 API通过 Spring AI 的 ImageModel 抽象层代码零改动切换 provider。语音交互目前用于智能客服。用户语音通过 Azure STT 转文字大模型处理后再通过 OpenAI TTS 转语音播报给用户。全链路延迟控制在 3 秒以内。核心经验多模态的效果取决于清晰度。图片 Base64 编码时注意压缩到 1024px 宽JPEG 质量 80%对理解效果影响不大但传输快很多。语音场景要做好降噪和 VAD语音活动检测不然环境噪音会触发不必要的识别。建议优先做图片理解业务价值最高。语音场景适合智能客服和人机对话。下篇聊一个经典的二选一问题微调还是 RAG什么时候需要微调什么时候 RAG 就够用两个能一起用吗
上一篇/下一篇内容由系统自动关联
返回资讯列表 →