为更直观理解多模态问答的落地过程,我们以 “电子产品智能客服” 为例,演示从数据采集到答案生成的完整链路。
目标:处理用户关于 “无线耳机” 的咨询,支持文字提问、图片上传、视频教程查询、语音输入四种形式。
- 来源:产品手册(PDF)、常见问题文档(FAQ)、用户评价
- 处理流程:
- 用 Python 的
PyPDF2
解析 PDF,提取文本并按章节分割(Chunk 大小 500 字);
- 通过 DeepSeek 的 NER 模型识别实体(如 “降噪功能”“续航时间”),添加模态标签
[TEXT]
。
- 来源:产品官网图片(外观图、接口细节图)、用户上传的故障图片
- 处理流程:
- 用 CLIP 的
preprocess
函数对图片标准化(Resize 至 224x224);
- 通过
clip.encode_image
生成 768 维视觉向量,添加标签[IMAGE:耳机外观]
[IMAGE:充电仓故障]
。
- 来源:使用教程视频(如 “如何连接蓝牙”“降噪模式切换”)
- 处理流程:
- 用
moviepy
按每秒 1 帧提取关键帧,过滤重复帧(相似度 > 90%);
- 对每个关键帧用 CLIP 生成视觉向量,同时用
librosa
提取音频特征(如讲解语音),最终生成带时序信息的视频向量组。
- 来源:用户语音提问(如 “耳机充不进去电怎么办”)
- 处理流程:
- 用 OpenAI Whisper 将语音转文字;
- 通过 DeepSeek 进行意图分类(如 “故障报修”),生成文本向量。
from transformers import AutoTokenizer, AutoModel
tokenizer = AutoTokenizer.from_pretrained("deepseek-ai/deepseek-llm-7b")
model = AutoModel.from_pretrained("deepseek-ai/deepseek-llm-7b")
text = "耳机降噪功能如何开启?"
inputs = tokenizer(text, return_tensors="pt")
text_embedding = model(**inputs, output_hidden_states=True).last_hidden_state.mean(dim=1)
import clip
import torch
model, preprocess = clip.load("ViT-B/32", device="cuda")
image = preprocess(Image.open("耳机故障图.jpg")).unsqueeze(0).to("cuda")
image_embedding = model.encode_image(image)
- 关键帧向量:按上述图片处理流程生成,存储为列表
[frame1_emb, frame2_emb, ...]
;
- 时序特征:用 LSTM 对关键帧向量序列编码,生成视频整体向量。
- 语音转文字后,按文字处理流程生成向量,同时保留音频时长、语调等副语言特征(可选)。
使用 Milvus(支持混合模态检索),创建四个集合:
text_collection
:存储文字向量,支持 BM25 + 向量近邻搜索;
image_collection
:存储图片向量,索引类型为 IVF_FLAT(适合快速检索);
video_collection
:存储视频向量,附加元数据(如视频标题、关键帧数量);
audio_collection
:存储音频文本向量,关联语音文件哈希值。
from pymilvus import Collection, utility
collection = Collection("image_collection")
entities = [image_embedding.tolist(), ["耳机故障图.jpg"]]
collection.insert(entities)
假设用户通过 App 提问:“耳机充不进去电” 并上传充电仓指示灯图片。
- 文字部分:DeepSeek 识别意图为 “故障报修”,提取关键词 “充电”“指示灯”;
- 图片部分:CLIP 生成视觉向量,识别为 “充电仓指示灯红色闪烁”。
- 文字检索:在
text_collection
中搜索包含 “充电故障”“指示灯” 的文本 Chunk,召回产品手册中 “充电仓故障排查” 章节;
- 图片检索:在
image_collection
中通过 FAISS 找到视觉向量最接近的图片(如历史故障图片库中的 “充电仓红灯闪烁” 图),关联对应的解决方案文本;
- 视频检索:在
video_collection
中搜索标签包含 “充电故障” 的视频片段,提取关键帧向量与用户图片对比,找到最匹配的教程视频(如 “充电仓重置步骤” 视频)。
将文字章节、图片匹配结果、视频片段的文本描述合并为上下文:
[文本] 若充电仓指示灯持续红色闪烁,请检查充电线连接是否松动(手册第5章第2节);
[图片] 您上传的指示灯状态对应故障代码E03(历史案例匹配度92%);
[视频] 解决步骤:1. 长按复位键5秒(详见视频00:15处操作)...
将整合后的上下文输入 DeepSeek 模型,添加生成控制指令:
请根据以下信息回答用户“耳机充不进去电”的问题,优先引用图片和视频中的具体信息,语言简洁明了:{上下文内容}
“您上传的充电仓指示灯红色闪烁(如图),属于故障代码 E03。解决步骤:① 检查充电线是否插紧;② 长按充电仓复位键 5 秒(操作细节见附件视频 00:15 处)。若问题未解决,可参考手册第 5 章第 2 节进一步排查。”
- 跨模态权重调整:通过用户反馈动态调整检索结果中文字、图片、视频的优先级(如故障场景优先信任图片匹配结果);
- 多模态摘要生成:对长视频片段,先用 CLIP 提取关键帧向量,再通过 DeepSeek 生成 100 字以内的步骤摘要,避免信息过载;
- 异常处理:若某模态数据缺失(如用户未上传图片),自动增强其他模态检索(如扩大文字关键词匹配范围)。
这个案例完整展示了多模态问答的 “数据采集→向量映射→混合检索→智能生成” 全流程。核心在于:让不同模态的数据在向量空间中 “对话”,让模型在生成回答时 “看得见” 具体细节。
对企业而言,这套方案无需依赖昂贵的闭源工具(DeepSeek 和 CLIP 均支持开源部署),通过合理选择向量数据库(如 Milvus)和轻量化模型(如 DeepSeek-7B),中小团队也能快速落地。随着多模态技术的普及,智能问答将不再局限于 “文字游戏”,而是成为连接用户与企业数据资产的智能桥梁 —— 这正是 DeepSeek 多模态方案的落地价值。
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
评论(0)