让 AI 不仅能“读文字”,还能“看图片”
01 引子
经过十四篇实战,我们构建了一个完整的智能助手应用,它能够:
多轮对话
流式输出
知识库检索(RAG)
工具调用(Agent)
循环推理
但所有这些能力都基于文字。AI 只能处理我们输入的文字,却无法“看见”我们上传的图片。
试想一下这些场景:
用户上传一张系统架构图,问“这个系统有哪些模块?”
用户拍了一张产品照片,问“这个产品有什么特点?”
用户上传一份手写文档,问“这上面写了什么?”
如果 AI 只能处理文字,这些需求都无法满足。而这就是多模态 AI要解决的问题——让 AI 能够同时处理文字、图片、音频等多种模态的信息。
这一篇的目标:让我们的智能助手具备图片理解能力。
02 什么是多模态 AI?
2.1 单模态 vs 多模态
| 对比 | 单模态 AI | 多模态 AI |
|---|---|---|
| 输入类型 | 仅文字 | 文字 + 图片 + 音频 + 视频 |
| 能力范围 | 文本理解、文本生成 | 图像识别、视觉问答、语音合成 |
| 典型模型 | GPT、通义千问 | qwen-vl-plus、GPT-4V |
2.2 图片理解的应用场景
| 场景 | 说明 | 实际用途 |
|---|---|---|
| 图像描述 | AI 描述图片内容 | 无障碍辅助、内容审核 |
| 视觉问答 | 根据图片回答问题 | 产品识别、故障诊断 |
| OCR | 从图片中提取文字 | 证件识别、文档扫描 |
| 图表分析 | 解析图表数据 | 数据分析、报告解读 |
2.3 技术选型
我们使用阿里云的qwen-vl-plus模型,原因如下:
与现有阿里百炼生态无缝集成
支持图像理解、视觉问答、OCR 等多种能力
与已使用的通义千问模型共享 API Key
03 代码实现
3.1 添加依赖
在pom.xml中添加 DashScope SDK:
3.2 创建图片理解服务
ImageUnderstandingService.java
3.3 创建 Controller
ImageController.java
04 测试验证
测试场景一:描述图片内容
请求:
测试场景二:图片问答
请求:
05 踩坑记录
坑一:包名错误
现象:导入com.alibaba.dashscope.multimodal.MultiModal时报错。
原因:不同版本的 DashScope SDK 包名不同。
解决:2.19.x 版本使用:
java
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation; import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam; import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
坑二:类型转换错误
现象:不兼容的类型: List<Map<String, Object>> 无法转换为 List<Object>
解决:使用Arrays.asList(Map.of(...))并显式声明返回类型,同时用@SuppressWarnings("unchecked")忽略类型转换警告。
坑三:缺少异常捕获
现象:未报告的异常错误 UploadFileException
解决:在 catch 子句中添加UploadFileException:
java
} catch (ApiException | NoApiKeyException | UploadFileException e) {06 成果总结
经过这一篇,你的智能助手新增了图片理解能力:
| 能力 | 状态 |
|---|---|
| 图片内容描述 | ✅ |
| 视觉问答 | ✅ |
| 结构化信息提取 | ✅ |
| 布局与关系分析 | ✅ |
07 下期预告
图片理解只是多模态 AI 的起点。接下来可以继续深入的方向:
| 方向 | 内容 |
|---|---|
| 语音合成(TTS) | 文字转语音,让 AI“说话” |
| OCR 增强 | 从图片中提取文字,用于证件识别、文档扫描 |
| 多轮图文对话 | 围绕图片进行多轮对话 |
| 本地图片上传 | 支持 MultipartFile 上传,方便测试 |
下一篇,我们探索语音合成——让 AI 不仅能“看”,还能“说”。
📌 我是超超不吵吵,10年Java全栈,正在转型AI应用开发。
每周一篇实战笔记,不贩卖焦虑,只分享能落地的技术。
全网同名,欢迎关注。