乐于分享
好东西不私藏

多模态 AI 基础概念扫盲:从向量、Embedding 到 Lance

多模态 AI 基础概念扫盲:从向量、Embedding 到 Lance
📌 这份文档的目标:不讲太多工程细节,先把多模态 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 数切
PDF按页、版面区域、表格、图片切
视频按时间片段、镜头、关键帧切
音频按时间窗口、说话人、语义段落切
图片按整图、检测框、区域、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 常见变量名

变量名通常含义大白话
dbdatabase connection数据库连接
tbl / tabletable handle一张表的操作对象
datarows to insert准备写入的数据行
vectorembedding vector内容的数字坐标
queryuser input用户输入的问题、文字或图片
query_vectorembedding of query用户输入转换成的向量
metadataextra fields标签、来源、时间、权限等描述信息
schematable structure表结构:有哪些列,每列什么类型
indexquery acceleration structure查询加速结构
blobbinary 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. 1.打开数据库。
  2. 2.准备两条动物数据。
  3. 3.每条数据都有一个向量,代表它的语义位置。
  4. 4.把这些数据写入表。
  5. 5.把用户输入也变成向量。
  6. 6.在表里找和用户向量最接近的那条。

17. 你现在应该怎么建立理解

先不要陷入 IVF、PQ、HNSW、ColPali 这些细节。先牢牢记住主线:原始内容 → 模型 → Embedding 向量 → LanceDB 存储 → 相似度检索 → 返回结果 / 给大模型生成答案

● ● ●

17.1 学习顺序建议

  1. 1.先理解向量和 Embedding:它们是“语义坐标”。
  2. 2.再理解相似度搜索:找坐标接近的数据。
  3. 3.再理解向量数据库:高效存储和查找这些坐标。
  4. 4.再理解多模态:图片、文本、音频、视频都能变成坐标。
  5. 5.最后理解 Lance:它把原始内容、坐标、标签、版本和训练读取放到同一套数据层。

● ● ●

17.2 面试/汇报时可以这样说

多模态检索系统的核心是把不同形态的数据通过模型编码成向量,让文本、图片、音频等内容进入同一个或可比较的语义空间。查询时也编码成向量,再通过向量数据库做近邻搜索,并结合关键词检索和 metadata 过滤提升准确性。Lance/LanceDB 的价值在于把原始多模态数据、Embedding、元数据、索引和版本管理统一在一个面向 AI 工作负载优化的数据层里。

18. 最后用一个生活类比收尾

假设你有一个巨大的素材仓库:

  • 原始图片/视频/文档 = 仓库里的实物。
  • Embedding = 每个实物的“特征标签卡”,但这张卡是数字形式。
  • 向量空间 = 所有标签卡摆放的地图。
  • 向量检索 = 在地图上找离用户需求最近的物品。
  • 全文检索 = 按名字、品牌、文字关键词找。
  • Metadata filter = 只看某个仓库、某个时间、某个权限范围内的东西。
  • Lance = 设计这个仓库的货架和存储格式。
  • LanceDB = 仓库管理系统 + 搜索系统。
✅ 理解到这一步,你再回头看 Lance 的技术文档,里面的 vector、embedding、blob、schema、index、hybrid search 就不再是孤立名词了,而是一条完整数据链路里的不同环节。