它怎么"按意思找"?嵌入与向量
揭开 RAG 背后那张神奇的"意思地图"——不堆数学,只讲直觉
上一节有个神奇的细节:你问小雅"怎么上线?",它从你的资料里翻出了写着“部署流程”的那一段——两边一个相同的字都没有。
它显然不是在"对关键词"。那它是怎么知道"上线"和"部署"是一回事的?
这一节,我们揭开 RAG 背后那张奇妙的“意思地图”。看懂它,你就真正理解了现在 AI 检索的核心。放心,不堆任何数学,只给你直觉。
核心魔法:把"意思"变成"位置"
电脑不懂"意思",只懂数字。于是有了一个聪明的转换:
把每一段文字,变成一串数字(叫"向量")——而且,意思越接近的文字,这串数字就越接近。
这个"把文字变成数字串"的过程,叫 嵌入(embedding)。
想象一张巨大的“意思地图”:每句话、每个词,都被放到地图上的一个点。
- "上线""部署""发布" → 三个点挨在一起(意思接近)。
- "番茄"和"西红柿" → 几乎重合(同一个东西)。
- "猫""狗" → 靠得近;它们离"火箭"很远。
检索的时候,系统把你的问题也放上地图,然后找离它最近的那几个点——那几段,就是最相关的资料。
这就是为什么"上线"能找到"部署":在意思地图上,它俩本来就是邻居。
它比"关键词搜索"强在哪?
| 关键词搜索 | 按意思找(嵌入) | |
|---|---|---|
| 怎么匹配 | 字面要对上 | 含义接近就行 |
| "西红柿炒蛋"能搜到"番茄食谱"吗 | ❌ 字不同,搜不到 | ✅ 意思近,找得到 |
| 适合 | 精确查名字/编号 | 理解式问答、RAG |
串起来看:RAG 为什么能"现翻现答"
把上一节和这一节连起来,整张图就完整了:
资料切块 → 每块算出在意思地图上的位置(向量) → 存进向量库 → 你提问 → 问题也定位到地图上 → 找最近的几块 → 喂给小雅作答。
所谓"向量数据库",本质就是一个能极快地帮你"在意思地图上找最近邻居"的仓库。
你完全不需要会算向量——平台都封装好了。但有一点值得知道:这张"意思地图"是由一个叫"嵌入模型"的东西画出来的,它画得准不准,直接决定检索好不好。
比如:用一个只懂英文的嵌入模型去处理中文资料,地图就会"画歪",检索就不准。所以做中文 RAG,要选支持中文的嵌入模型(平台一般默认给好了,了解即可)。
🔧 上手:亲眼看"意思地图"上的远近
下面这段 复制即可运行(本地中文嵌入模型,免 API、免 VPN)。它把几个词变成向量,再算两两的"接近度"——你会亲眼看到"自行车 / 单车"几乎重合、离"香蕉"很远:
# pip install sentence-transformers
from sentence_transformers import SentenceTransformer, util
model = SentenceTransformer("BAAI/bge-small-zh-v1.5")
words = ["自行车", "单车", "香蕉", "股票"]
vecs = model.encode(words, normalize_embeddings=True) # 每个词 → 一串数字(地图坐标)
base = "自行车"
bv = model.encode(base, normalize_embeddings=True)
for w, v in zip(words, vecs):
score = util.cos_sim(bv, v).item() # 余弦相似度:越接近 1 = 意思越像(.item() 取出单个数)
print(f"{base} ↔ {w}: {score:.2f}")
运行结果大概是:
自行车 ↔ 自行车: 1.00
自行车 ↔ 单车: 0.88 ← 同义,挨得最近
自行车 ↔ 香蕉: 0.31 ← 风马牛不相及
自行车 ↔ 股票: 0.29
看,"接近度"这个数字,就是它们在意思地图上的距离。RAG 的"检索",就是拿这个分数找最高的几段——所谓"语义搜索""向量检索""RAG 的 R",说的都是这件事。
请你帮我用『意思地图 / 嵌入』的直觉,解释为什么 AI 能把『我心情不好』和『今天有点 emo』当成相近的意思,而把『苹果手机』和『苹果水果』区分开。用大白话,别上数学。
现在你彻底搞懂了 RAG 的"里子":文字变成意思地图上的坐标,检索就是找最近的邻居。 这是当下几乎所有 AI 搜索、问答的共同地基——你已经站在内行的视角了。
不过,"找得到相关资料"还只是一半。找到之后喂给小雅多少、怎么排、和记忆/历史怎么搭配,直接决定它答得好不好、快不快、贵不贵。
下一节,我们学一门特别实用的手艺——上下文工程:怎么给小雅"喂对料"。学完,你调出来的小雅会又准又省。
