📌 这份文档的目标:不讲太多工程细节,先把多模态 AI 里最常见、最容易抽象的概念讲明白:向量、Embedding、相似度、向量数据库、索引、RAG、Blob、Lance/LanceDB 到底在干什么。读完之后,再看技术文档会顺很多。
你可以把多模态 AI 系统想象成一个“超级资料库”:
- ●原始资料:图片、视频、音频、PDF、文本、表格、网页截图。
- ●AI 看懂后的摘要:模型把这些资料变成一串数字,这串数字就叫 Embedding / 向量。
- ●搜索能力:用户输入一句话、一张图或一段音频,系统也把它变成一串数字,然后去资料库里找“数字上最接近”的内容。
- ●Lance / LanceDB:负责把原始资料、这串数字、标签、描述、版本等都管理起来,并且让搜索和训练更快。
✅ 一句话:多模态检索的核心就是“把不同形态的数据都翻译成机器能比较的数字坐标,然后按距离找相似”。
● ● ●
1.1 模态是什么
模态可以理解为信息的表现形式。
- ●文本是一种模态:文章、标题、评论、说明书。
- ●图片是一种模态:照片、截图、海报、医学影像。
- ●音频是一种模态:语音、音乐、环境声。
- ●视频是一种模态:画面 + 声音 + 时间序列。
- ●结构化数据也是一种模态:表格、字段、指标、日志。
● ● ●
1.2 多模态是什么
多模态就是一个系统同时理解和处理多种信息形式。
| 场景 | 涉及模态 | 例子 |
|---|---|---|
| 图文搜索 | 文本 + 图片 | 输入“红色跑鞋”,搜出对应图片 |
| 视频理解 | 视频 + 音频 + 文本 | 找出视频里“狗跳进泳池”的片段 |
| 文档问答 | PDF 图片 + OCR 文本 + 结构 | 问合同里付款条款在哪一页 |
| 机器人训练 | 摄像头画面 + 动作 + 传感器 | 根据视频和动作数据训练机械臂 |
2. 什么是向量?
● ● ●
2.1 先别想数学,先想“坐标”
向量可以先理解成“一个点在空间里的坐标”。
在二维地图上,一个地点可以用两个数字表示:经度、纬度。比如:
- ●公司 A:[116.3, 39.9]
- ●公司 B:[116.4, 39.9]
两个地点坐标越接近,说明它们地理上越近。
AI 里的向量也是类似,只不过不是二维,而可能是 512 维、768 维、1024 维、甚至更多维。
💡 直觉理解:向量就是 AI 世界里的“坐标”。一段文本、一张图片、一段音频,都可以被模型映射到一个很高维的坐标空间里。
● ● ●
2.2 为什么需要很多维
二维坐标只能表达地理位置。但一张图片或一句话包含的信息太丰富了,需要很多维度一起表达。
比如一张“猫坐在沙发上”的图片,模型可能在隐含地表达这些特征:
- ●是不是动物?
- ●是不是猫?
- ●有没有沙发?
- ●画面风格是照片还是插画?
- ●颜色偏暖还是偏冷?
- ●主体在画面中央还是边缘?
真实模型不会用人类可读的字段逐个写出来,而是把这些语义压缩进一串数字里。
3. 什么是 Embedding?
● ● ●
3.1 Embedding 的大白话
Embedding就是“模型把原始内容翻译成向量”的结果。
- ●文本 Embedding:把一句话变成一串数字。
- ●图片 Embedding:把一张图变成一串数字。
- ●音频 Embedding:把一段声音变成一串数字。
- ●视频 Embedding:把一个视频或视频片段变成一串数字。
✅ Embedding = 内容的语义指纹。它不是给人看的,而是给机器比较相似度用的。
● ● ●
3.2 举个文本例子
下面这些句子字面不同,但意思接近:
- ●“一只猫坐在沙发上”
- ●“沙发上趴着一只小猫”
- ●“a cat is sitting on a couch”
好的 Embedding 模型会把它们映射到比较接近的位置。这样搜索时,即使用户用不同表达,也能找到相关内容。
● ● ●
3.3 举个图文例子
CLIP / OpenCLIP 这类模型能把图片和文本放到同一个语义空间里:
- ●一张猫的图片 → 图片向量
- ●“一只猫坐在沙发上” → 文本向量
如果模型训练得好,这两个向量会很接近。所以我们就能用文字搜图片,或者用图片搜相似图片。
4. 什么是“相似度”?什么是“距离”?
有了向量之后,我们需要判断两个向量像不像。这就涉及 相似度 或 距离。
| 概念 | 直觉 | 越大/越小代表什么 |
|---|---|---|
| 相似度 | 两个东西有多像 | 越大越像 |
| 距离 | 两个点隔多远 | 越小越像 |
● ● ●
4.1 Cosine Similarity / 余弦相似度
这是文本和图片 Embedding 里非常常见的比较方式。
它关心的是“方向像不像”,不太关心向量长度。
- ●方向接近:语义接近。
- ●方向差很远:语义不接近。
● ● ●
4.2 Top-K 是什么
Top-K就是“找最相似的前 K 个”。
比如用户搜索“红色跑鞋”,系统返回最相似的 10 张图片,这就是 Top-10。
📌 检索的核心过程:query → 生成 query 向量 → 和库里的向量比较距离 → 返回 Top-K。
5. 什么是向量数据库?
● ● ●
5.1 普通数据库擅长什么
普通数据库擅长精确查询:
- ●id = 123
- ●name = “张三”
- ●price > 100
- ●created_at 在某个时间范围
● ● ●
5.2 向量数据库擅长什么
向量数据库擅长相似搜索:
- ●找意思接近的文章。
- ●找和这张图相似的图片。
- ●找和这段音频类似的声音。
- ●找和用户问题最相关的知识片段。
● ● ●
5.3 为什么不用普通数据库直接查
因为向量通常有几百到几千维,数据量大时,逐条比较会非常慢。
向量数据库会建立专门的 向量索引,让相似搜索更快。
6. 什么是索引?
● ● ●
6.1 先从书的目录理解
没有目录时,你要找一本书里的某个知识点,只能从第一页翻到最后一页。
有目录和索引后,你可以快速跳到相关章节。
数据库索引也是类似:提前组织好数据,让查询时少走弯路。
● ● ●
6.2 向量索引是什么
向量索引就是为了快速找到相似向量而建立的数据结构。
常见思路是:把海量向量分组、聚类、压缩或建图。查询时不用全量比较,而是先找到可能相关的小范围。
❗ 注意:很多向量索引是近似搜索,不一定 100% 找到理论上最相似的结果,但速度快很多。这就是“速度”和“召回率”的权衡。
● ● ●
6.3 常见索引名词
| 名词 | 简单解释 |
|---|---|
| Flat / Brute Force | 暴力逐个比较,最准确,但大数据量慢 |
| IVF | 先把向量分到不同桶里,查询时只查相关桶 |
| PQ | 把向量压缩,省内存、提速度,但会有精度损失 |
| HNSW | 把向量组织成图,通过图搜索快速找到近邻 |
| Scalar Index | 普通字段索引,比如 category、tenant_id、时间 |
| FTS Index | 全文检索索引,用来搜关键词和文本相关性 |
7. 什么是全文检索 FTS?它和向量检索有什么不同?
FTS 是 Full-Text Search,全文检索。它更像传统搜索引擎,擅长关键词匹配。
| 能力 | 擅长 | 不擅长 |
|---|---|---|
| 向量检索 | 语义相似,比如“猫咪”和“小猫” | 精确词、型号、代码、数字约束 |
| 全文检索 | 关键词、品牌、型号、人名、OCR 文字 | 换一种说法但含义相近的语义泛化 |
● ● ●
7.1 为什么需要混合检索
真实业务 query 往往既有语义,也有精确条件。
例如:“找 2024 年发布的红色 Nike 跑鞋海报”。
- ●“红色跑鞋海报”适合向量检索。
- ●“Nike”适合关键词检索。
- ●“2024 年”适合 metadata filter。
✅ 混合检索就是把向量检索、全文检索、结构化过滤组合起来,再统一排序。
8. 什么是 RAG?
● ● ●
8.1 RAG 的全称
RAG = Retrieval-Augmented Generation,检索增强生成。
● ● ●
8.2 大白话解释
让大模型回答问题前,先从资料库里找相关资料,再把资料塞给大模型,让它基于资料回答。

RAG 的基本流程:先检索,再生成
● ● ●
8.3 RAG 和 LanceDB 的关系
- ●LanceDB 可以作为 RAG 的检索层。
- ●文本 RAG 存文档 chunk 和 text embedding。
- ●多模态 RAG 可以存图片、PDF 页面、视频片段、OCR、caption、各种 embedding。
9. 什么是 Chunk?
Chunk就是把大内容切成小块。
● ● ●
9.1 为什么要切块
- ●一篇长文太长,大模型上下文放不下。
- ●整篇文章做一个向量太粗,检索不精准。
- ●用户通常只需要某一小段,而不是整篇。
● ● ●
9.2 多模态里的 Chunk
| 数据类型 | 常见切块方式 |
|---|---|
| 长文档 | 按段落、标题、页、固定 token 数切 |
| 按页、版面区域、表格、图片切 | |
| 视频 | 按时间片段、镜头、关键帧切 |
| 音频 | 按时间窗口、说话人、语义段落切 |
| 图片 | 按整图、检测框、区域、patch 切 |
10. 什么是 Metadata?
Metadata就是“描述数据的数据”。
比如一张图片本身是数据,它的这些信息就是 metadata:
- ●文件名
- ●来源
- ●上传时间
- ●所属用户/租户
- ●图片宽高
- ●标签
- ●权限
- ●质量分
📌 在真实系统里,metadata 非常重要。只靠向量检索会搜出“语义相似但业务不合法”的结果,比如权限不对、时间不对、类目不对。
11. 什么是 Blob?
● ● ●
11.1 Blob 的意思
Blob可以理解为“大块二进制数据”。
图片、视频、音频、PDF 文件,在计算机里本质上都是一堆 bytes。
● ● ●
11.2 为什么多模态里经常提 Blob
因为多模态系统不仅要存向量,还要存或访问原始内容:
- ●检索到图片后,需要展示图片。
- ●训练时,需要读取原始图片或视频帧。
- ●调试时,需要查看模型到底看到了什么。
● ● ●
11.3 URI 和 Blob 的区别
| 方式 | 是什么 | 优点 | 缺点 |
|---|---|---|---|
| URI | 文件路径或对象存储地址 | 轻量,容易和外部系统集成 | 路径可能失效,读取依赖外部存储 |
| Blob | 直接把文件 bytes 存到表里 | 数据和特征在一起,训练/检索闭环更完整 | 表可能变大,需要懒加载和存储策略 |
12. Lance 是什么?
Lance是一个面向多模态 AI 的开放数据格式。
你可以把它理解成:比通用 Parquet 更适合 AI 多模态数据的表格式。
● ● ●
12.1 Lance 重点解决什么
- ●能同时存图片、视频、音频、文本、向量、标注和 metadata。
- ●能快速随机读取,适合训练时 shuffle 和采样。
- ●能添加新特征列,不必总是重写大媒体文件。
- ●能做版本管理,方便复现实验。
- ●能支持向量、全文、标量索引。
💡 类比:如果 Parquet 更像传统数仓里的列式文件,Lance 更像为 AI 数据湖定制的列式文件 + 多模态 Blob + 向量索引 + 版本管理。
13. LanceDB 是什么?
LanceDB是建立在 Lance 格式上的数据库/检索系统。
它帮你做这些事情:
- ●创建表。
- ●写入文本、图片、向量、metadata。
- ●创建向量索引、全文索引、标量索引。
- ●做向量检索、全文检索、混合检索。
- ●管理版本、更新列、追加数据。
- ●作为训练数据和 RAG 检索的数据层。
● ● ●
13.1 Lance 和 LanceDB 的区别
| 问题 | 答案 |
|---|---|
| Lance 是数据库吗? | 更准确地说,Lance 是底层开放数据格式和表格式。 |
| LanceDB 是数据库吗? | 是,LanceDB 提供数据库 API、检索、索引、表操作。 |
| 只用 Lance 可以吗? | 可以,如果你只关心数据格式和读写。 |
| 做应用更常用哪个? | 通常直接用 LanceDB,因为它封装了 Lance 并提供查询能力。 |
14. 一个完整多模态检索系统怎么跑起来

一个完整多模态检索系统的主链路
15. 最容易混淆的一组概念
| 概念 | 不是 | 它是 |
|---|---|---|
| 向量 | 不是玄学,也不是人类可读标签 | 模型输出的一串数字坐标 |
| Embedding | 不是数据库,也不是索引 | 内容被模型转换成向量后的结果 |
| 向量数据库 | 不是大模型 | 存向量并快速做相似搜索的系统 |
| 索引 | 不是数据本身 | 为了加速查询额外建立的结构 |
| RAG | 不是单纯向量搜索 | 先检索资料,再让大模型基于资料回答 |
| Blob | 不是向量 | 图片/视频/音频/PDF 的原始 bytes |
| Lance | 不是模型 | 多模态 AI 数据格式和表格式 |
| LanceDB | 不是 embedding 模型 | 管理 Lance 表并提供检索能力的数据库 |
16. 代码里的变量名怎么理解
● ● ●
16.1 常见变量名
| 变量名 | 通常含义 | 大白话 |
|---|---|---|
| db | database connection | 数据库连接 |
| tbl / table | table handle | 一张表的操作对象 |
| data | rows to insert | 准备写入的数据行 |
| vector | embedding vector | 内容的数字坐标 |
| query | user input | 用户输入的问题、文字或图片 |
| query_vector | embedding of query | 用户输入转换成的向量 |
| metadata | extra fields | 标签、来源、时间、权限等描述信息 |
| schema | table structure | 表结构:有哪些列,每列什么类型 |
| index | query acceleration structure | 查询加速结构 |
| blob | binary large object | 图片/视频等文件 bytes |
● ● ●
16.2 一段代码逐句翻译
import lancedb
# 连接一个本地数据库目录
db = lancedb.connect("./my_db")
# 准备两条数据,每条都有文本和向量
data = [
{"id": 1, "text": "一只猫", "vector": [0.1, 0.2, 0.3]},
{"id": 2, "text": "一只狗", "vector": [0.2, 0.1, 0.4]},
]
# 创建一张表,把数据写进去
tbl = db.create_table("animals", data=data, mode="overwrite")
# 用户 query 也会被转成一个向量;这里用假向量示例
query_vector = [0.1, 0.2, 0.31]
# 找最相似的 1 条
result = tbl.search(query_vector).limit(1).to_list()
翻译成人话:
- 1.打开数据库。
- 2.准备两条动物数据。
- 3.每条数据都有一个向量,代表它的语义位置。
- 4.把这些数据写入表。
- 5.把用户输入也变成向量。
- 6.在表里找和用户向量最接近的那条。
17. 你现在应该怎么建立理解
先不要陷入 IVF、PQ、HNSW、ColPali 这些细节。先牢牢记住主线:原始内容 → 模型 → Embedding 向量 → LanceDB 存储 → 相似度检索 → 返回结果 / 给大模型生成答案。
● ● ●
17.1 学习顺序建议
- 1.先理解向量和 Embedding:它们是“语义坐标”。
- 2.再理解相似度搜索:找坐标接近的数据。
- 3.再理解向量数据库:高效存储和查找这些坐标。
- 4.再理解多模态:图片、文本、音频、视频都能变成坐标。
- 5.最后理解 Lance:它把原始内容、坐标、标签、版本和训练读取放到同一套数据层。
● ● ●
17.2 面试/汇报时可以这样说
多模态检索系统的核心是把不同形态的数据通过模型编码成向量,让文本、图片、音频等内容进入同一个或可比较的语义空间。查询时也编码成向量,再通过向量数据库做近邻搜索,并结合关键词检索和 metadata 过滤提升准确性。Lance/LanceDB 的价值在于把原始多模态数据、Embedding、元数据、索引和版本管理统一在一个面向 AI 工作负载优化的数据层里。
18. 最后用一个生活类比收尾
假设你有一个巨大的素材仓库:
- ●原始图片/视频/文档 = 仓库里的实物。
- ●Embedding = 每个实物的“特征标签卡”,但这张卡是数字形式。
- ●向量空间 = 所有标签卡摆放的地图。
- ●向量检索 = 在地图上找离用户需求最近的物品。
- ●全文检索 = 按名字、品牌、文字关键词找。
- ●Metadata filter = 只看某个仓库、某个时间、某个权限范围内的东西。
- ●Lance = 设计这个仓库的货架和存储格式。
- ●LanceDB = 仓库管理系统 + 搜索系统。
✅ 理解到这一步,你再回头看 Lance 的技术文档,里面的 vector、embedding、blob、schema、index、hybrid search 就不再是孤立名词了,而是一条完整数据链路里的不同环节。
夜雨聆风