向量数据库实战:选型、调优与落地~系列文章15:多模态向量搜索:图片、音频、视频统一检索的工程实现
多模态向量搜索图片、音频、视频统一检索的工程实现 ️本文是《向量数据库实战选型、调优与落地》专栏第 15 篇⏱️阅读时间约 13 分钟 开篇不只是文本2025 年AI 应用早已不局限于文本——淘宝拍照搜同款拍一张照片找到相似商品 抖音内容推荐根据视频内容推荐相似视频 Spotify 歌曲推荐根据音频特征推荐相似音乐 这些背后的核心技术就是多模态向量搜索 多模态 Embedding 模型核心思想多模态模型能把不同类型的媒体文本、图片、音频映射到同一个向量空间中。┌─────────────────────────────────────────────────────────┐ │ 多模态向量空间 │ ├─────────────────────────────────────────────────────────┤ │ │ │ 文本: 一只猫在草地上玩耍 │ │ → [0.12, -0.34, 0.56, ...] │ │ ↕ 距离很近 │ │ 图片: 猫在草地上的照片 │ │ → [0.13, -0.33, 0.55, ...] │ │ ↕ 距离较远 │ │ 图片: ️城市汽车照片 │ │ → [0.89, 0.12, -0.45, ...] │ │ │ │ 文本和图片在同一个向量空间中 │ │ → 可以用文本搜图片也可以用图片搜文本 │ │ │ └─────────────────────────────────────────────────────────┘主流多模态模型模型类型维度支持模态开源CLIP图文512/768文本图片✅SigLIP图文1024文本图片✅ImageBind多模态1024文本图片音频视频深度热成像✅Chinese-CLIP图文中文768中文文本图片✅Jina CLIP v2图文768文本图片✅ 实战图文混合搜索Step 1使用 CLIP 生成多模态向量importtorchfromtransformersimportCLIPModel,CLIPProcessor# 加载中文 CLIP 模型modelCLIPModel.from_pretrained(OFA-Sys/chinese-clip-vit-large-patch14)processorCLIPProcessor.from_pretrained(OFA-Sys/chinese-clip-vit-large-patch14)# 文本向量化defencode_text(text):inputsprocessor(text[text],return_tensorspt,paddingTrue)withtorch.no_grad():text_featuresmodel.get_text_features(**inputs)returntext_features[0].numpy()# 图片向量化defencode_image(image_path):fromPILimportImage imageImage.open(image_path)inputsprocessor(imagesimage,return_tensorspt)withtorch.no_grad():image_featuresmodel.get_image_features(**inputs)returnimage_features[0].numpy()# 测试text_vecencode_text(一只可爱的猫咪)image_vecencode_image(cat_photo.jpg)# 计算相似度fromnumpy.linalgimportnorm similaritynp.dot(text_vec,image_vec)/(norm(text_vec)*norm(image_vec))print(f文本和图片的相似度:{similarity:.4f})Step 2存入向量数据库frompymilvusimportCollection,FieldSchema,DataType# 创建多模态集合fields[FieldSchema(nameid,dtypeDataType.INT64,is_primaryTrue,auto_idTrue),FieldSchema(namecontent_type,dtypeDataType.VARCHAR,max_length20),# text/image/videoFieldSchema(nameoriginal_text,dtypeDataType.VARCHAR,max_length65535),FieldSchema(nameimage_url,dtypeDataType.VARCHAR,max_length1024),FieldSchema(nameembedding,dtypeDataType.FLOAT_VECTOR,dim768),# CLIP 维度]schemaCollectionSchema(fieldsfields)collectionCollection(multimodal,schema)# 插入文本数据text_embeddingencode_text(向量数据库入门教程)collection.insert([[text],# content_type[向量数据库入门教程],# original_text[],# image_url[text_embedding.tolist()]])# 插入图片数据image_embeddingencode_image(tutorial_cover.jpg)collection.insert([[image],[],[tutorial_cover.jpg],[image_embedding.tolist()]])Step 3跨模态搜索# 用文本搜索图片collection.load()query_text教程封面图片query_embeddingencode_text(query_text)resultscollection.search(data[query_embedding.tolist()],anns_fieldembedding,param{metric_type:COSINE,params:{ef:128}},limit5,exprcontent_type image,# 只搜图片output_fields[content_type,original_text,image_url])# 用图片搜索文本query_imageencode_image(some_photo.jpg)resultscollection.search(data[query_image.tolist()],anns_fieldembedding,param{metric_type:COSINE,params:{ef:128}},limit5,exprcontent_type text,# 只搜文本output_fields[content_type,original_text]) 多模态搜索应用场景应用场景查询方式检索目标典型案例以图搜图图片 → 图片相似图片淘宝拍照搜同款以文搜图文本 → 图片匹配的图片素材网站搜索以图搜文图片 → 文本图片描述/相关文档图片内容理解跨模态推荐文本 → 图文混合图文内容小红书推荐视频检索文本/图片 → 视频帧视频关键帧视频内容搜索️ 视频搜索架构┌─────────────────────────────────────────────────────────┐ │ 视频向量搜索架构 │ ├─────────────────────────────────────────────────────────┤ │ │ │ 输入视频 │ │ │ │ │ ▼ │ │ ┌──────────────┐ │ │ │ 视频抽帧 │ 每秒抽 1 帧 / 关键帧检测 │ │ └──────┬───────┘ │ │ │ │ │ ▼ │ │ ┌──────────────┐ │ │ │ 帧向量化 │ CLIP 对每帧生成向量 │ │ └──────┬───────┘ │ │ │ │ │ ▼ │ │ ┌──────────────┐ │ │ │ 视频向量聚合 │ 平均池化 / 最大池化 │ │ │ │ 将 N 帧向量 → 1 个视频向量 │ │ └──────┬───────┘ │ │ │ │ │ ▼ │ │ ┌──────────────┐ │ │ │ 向量数据库 │ 存储视频向量 元数据 │ │ │ │ (视频URL、时间戳、标签) │ │ └──────────────┘ │ │ │ │ 查询: 找一段日落的海边视频 │ │ → 文本向量化 → 向量搜索 → 返回匹配视频 │ │ │ └─────────────────────────────────────────────────────────┘⚠️ 多模态搜索的坑坑说明解决方案模型选择不同模型的向量空间不兼容同一集合必须用同一模型中文支持原版 CLIP 中文效果差用 Chinese-CLIP图片预处理尺寸、格式不统一统一 resize 到模型要求向量维度不同模态维度可能不同确认模型输出维度一致存储成本图片/视频占空间只存向量URL原始文件存 OSS 本篇核心要点回顾要点说明多模态模型CLIP/Chinese-CLIP 将文本和图片映射到同一空间跨模态搜索可以用文本搜图片也可以用图片搜文本视频搜索抽帧 → 向量化 → 聚合 → 存储中文场景推荐 Chinese-CLIP 或 Jina CLIP v2存储策略向量存数据库原始文件存 OSS下篇预告《Milvus 分布式部署实战从单机到集群的完整踩坑记录 ️》有问题欢迎评论区讨论觉得有用请点赞收藏 作者高炉炼铁智能化技术研究者专注钢铁冶金与人工智能 交叉领域。 如果觉得有帮助请点赞、收藏、转发版权归作者所有未经许可请勿抄袭套用商用(或其它具有利益性行为)。 关注专栏不错过后续精彩内容

相关新闻

麒麟信安亮相2021中国石油石化企业信息技术交流大会 暨油气产业数字化转型高峰论坛

麒麟信安亮相2021中国石油石化企业信息技术交流大会 暨油气产业数字化转型高峰论坛

由中国石油、中国石化、中国海油、中国中化等主办的“2021中国石油石化企业信息技术交流大会暨展示会”于5月12-14日在北京召开。本次会会议主题为“以新发展理念推动数字化转型,助力油气产业高质量发展”,深度探讨企业在数字化转型中面临的共性问题、在…

2026/9/24 16:51:26 阅读更多 →
GLM-5.2 低价冲击:企业开始认真给 Token 算账

GLM-5.2 低价冲击:企业开始认真给 Token 算账

GLM-5.2 把模型竞争拉回成本账,企业将用路由重新分配智能。企业用 AI 的第一阶段,大家关心的是「能不能用」。第二阶段,问题变成「用一次多少钱」。 最近围绕 智谱 GLM-5.2 的讨论,正好踩中了这个切换点。 讨论里最吸引人的不是又…

2026/10/15 0:49:48 阅读更多 →
ARM Cortex-M4低功耗机制:WFI/WFE唤醒原理与PRIMASK中断延迟实战

ARM Cortex-M4低功耗机制:WFI/WFE唤醒原理与PRIMASK中断延迟实战

1. 项目概述:深入ARM Cortex-M4的睡眠与唤醒机制 在嵌入式系统开发,尤其是电池供电或对功耗敏感的设备中,如何让处理器在无事可做时“聪明地”休眠,并在需要时被精准唤醒,是每个开发者必须掌握的核心技能。ARM Cortex-…

2026/10/12 20:27:34 阅读更多 →

最新新闻

当AI原生公司开始“吃掉”制片厂:影视工业的边界正在溶解

当AI原生公司开始“吃掉”制片厂:影视工业的边界正在溶解

🌊 专注 AI 大模型与前沿科技深度解析,习惯从工程师视角拆解技术热点,让我们一起在技术浪潮中保持清醒与好奇 🚀当AI原生公司开始“吃掉”制片厂:影视工业的边界正在溶解30 秒结论 本文判断:AI原生影视公司…

2026/10/15 0:49:41 阅读更多 →
从柯西-施瓦兹不等式到匹配滤波:工程直觉与实战避坑指南

从柯西-施瓦兹不等式到匹配滤波:工程直觉与实战避坑指南

简介:这份资料围绕雷达信号处理中的匹配滤波技术展开,从柯西施瓦兹不等式这一数学基础切入,帮助读者理解匹配滤波器的理论来源与工程实现。内容适合具备一定信号处理与线性代数基础的高校学生、科研人员及雷达工程从业者,用于解决…

2026/10/15 0:48:41 阅读更多 →
手写C++ OBJ文件解析器:从格式到百万顶点优化与避坑指南

手写C++ OBJ文件解析器:从格式到百万顶点优化与避坑指南

简介:面向需要处理Wavefront OBJ三维模型格式的开发者和图形学入门者,这份资源提供一套基于Visual Studio 2013的obj解析C源码。源码实现完整的读取流程,覆盖顶点、纹理坐标、法线及多边形面这几类核心指令的解析,通过文件流逐行读…

2026/10/15 0:48:41 阅读更多 →
superpowers:用SKILL.md让Claude Code变身高效率AI开发助手

superpowers:用SKILL.md让Claude Code变身高效率AI开发助手

1. 先搞清楚:superpowers 到底是什么如果你平时用 Claude Code 比较多,可能早就遇到了一个让我当初很头疼的问题:底层模型确实聪明,但你在对话里让它"做个深度调研""写一套完整的单测""把这次的改动整理…

2026/10/15 0:48:41 阅读更多 →
用repomap给Claude Code一张代码地图,工具调用从52次降到3次

用repomap给Claude Code一张代码地图,工具调用从52次降到3次

1. 52 次工具调用到底是怎么花掉的我一直觉得 Claude Code 这类 CLI 编程助手最让人上头的点是“它真的会自己去翻代码库”,但最让人血压升高的点也是“它真的会自己去翻代码库”。刚上手那会儿,我在一个两万行左右的项目里让它排查登录流程的 token 过期…

2026/10/15 0:48:41 阅读更多 →
C#调用MATLAB绘图实战:COM自动化、句柄管理与嵌入式集成

C#调用MATLAB绘图实战:COM自动化、句柄管理与嵌入式集成

简介:本资源面向C#开发者与MATLAB混合编程实践者,解决在Windows平台下利用MATLAB强大图形引擎(尤其三维可视化)弥补C#原生绘图能力不足的核心问题。适用于科学计算、工程仿真、教学演示等需高质量数学图形的中高级开发场景。压缩包…

2026/10/15 0:48:41 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →