这是系列的第 16 篇。整个系列写给零基础、想入行 AI 的朋友,每天一篇,30 天后你会做出 3 个能写进简历的项目。
这篇解决什么问题
昨天说 RAG 的核心是“先去资料里查出相关的内容”。可这里有个问题:怎么查?
传统方法是搜关键词。你问“怎么报销差旅费”,它就去文档里找有没有“报销”这两个字。这招有个致命缺陷:换个说法就搜不到了。 文档里写的是“差旅支出申请流程”,你问“出差花的钱怎么报”,关键词一个都不对,搜出来一片空白。
但人看得出来这两句话是一个意思。怎么让机器也看得出来?答案是 Embedding。今天这篇可能有点抽象,但我保证用人话能讲明白。
一、先理解一件事:把意思变成坐标
思路是这样的:既然机器看不懂文字,那就把文字变成数字。
不是随便变,而是按“意思”来变。意思相近的句子,变出来的数字也相近;意思差很远的,数字就差很远。
最直观的理解方式是把它想成地图上的坐标。每个句子在“意思的地图”上有一个位置:
- “怎么报销差旅费”
- “出差花的钱怎么报”
- “差旅支出申请流程”
这三句话意思相近,在地图上挨得很近,聚成一小团。
- “今天中午吃什么”
离它们就很远,在另一片区域。
这个“坐标”就是向量,一长串数字。把文字转成向量的过程叫 Embedding。你不用管这串数字具体是多少,也不用管它是怎么算出来的,那是模型内部的事。你只需要知道:意思相近,坐标就相近。
二、查资料变成了量距离
有了坐标,检索这件事就变成了小学几何题:算出提问的坐标,去地图上找离它最近的那几个点,取出来。
举例说明。假设库里存了三段资料,提问是“出差怎么报销”:
| 差旅支出申请流程:先填单…… | 很近 | 命中 |
| 员工考勤管理规定…… | 很远 | 不相关 |
| 差旅费标准:高铁二等座…… | 较近 | 命中 |
机器算的就是距离,跟关键词一个字都对不上也没关系,因为比的是意思,不是字面。
记住这个比喻,整个 RAG 就通了:Embedding 给每句话发了个坐标,检索就是在地图上找最近的邻居。
三、动手感受一下:算两句话有多像
光看比喻还是虚,跑一遍代码就有感觉了。Embedding 也是调用 API 拿到的,写法你早就熟了:
from openai import OpenAI
client = OpenAI(api_key="你的密钥", base_url="https://api.deepseek.com")
def get_embedding(text):
"""把一句话变成一串数字(向量)"""
response = client.embeddings.create(
model="embedding-model-name", # 换成你所用平台的 embedding 模型名
input=text
)
return response.data[0].embedding
# 试三句话
a = get_embedding("怎么报销差旅费")
b = get_embedding("出差花的钱怎么报")
c = get_embedding("今天中午吃什么")
print("向量的长度:", len(a)) # 通常是一千多个数字
你会看到打印出来的长度是一千多,也就是说每句话被变成了一千多个坐标值。这是高维空间,我们画不出来,但距离的计算逻辑和平面上一模一样。
接下来算相似度。数学上一般用余弦相似度,你不用记公式,知道它输出 0 到 1,越接近 1 越像就行:
import numpy as np
def similarity(v1, v2):
"""算两个向量的相似度,结果越接近 1 越相似"""
return float(np.dot(v1, v2) / (np.linalg.norm(v1) * np.linalg.norm(v2)))
print("意思相近的两句:", similarity(a, b)) # 会比较高,比如 0.85
print("毫不相关的两句:", similarity(a, c)) # 会低很多,比如 0.3
跑完你会亲眼看到:意思相近的两句相似度明显更高,虽然它们一个字都不一样。这就是“机器理解意思”的实现方式,一点都不神秘。
(这段用到了 numpy,如果没装,执行 pip install numpy 就行。)
四、一个新手必知的坑
Embedding 的模型和对话的模型是两回事,别搞混。
对话模型负责说话(deepseek-chat 这类),Embedding 模型专门负责把文字变成向量,名字通常带 embedding 或 bge 之类。有些平台这两个是分开的,你需要单独看文档确认模型名,有的平台甚至要单独开通。
另外,生成向量和检索必须用同一个 Embedding 模型。如果存库时用的是 A 模型,查询时换了 B 模型,两边的坐标系都不一样,算出来的距离毫无意义。这个坑新手很容易踩,因为报错很不明显,只是搜索结果乱。
五、为什么这一篇值得花一天
因为“向量检索”是现代 AI 应用的基础技术之一,它不是 RAG 独有的:
- 搜图、搜视频,本质是把图片也变成向量
- 推荐系统,算的是用户和商品在向量空间里的距离
- 去重和聚类,也是靠算相似度
你今天搞懂的这个思路,以后遇到很多技术都能对号入座。面试时被问到“RAG 怎么检索的”,你能从“把意思变成坐标,再找最近的邻居”讲起,比背术语强得多。
今天的作业
跑一遍上面的代码,试试你自己想测的三句话,把两两的相似度数字贴到评论区。建议你测一组反例,比如“我要请假”和“我想请几天假”,看看相似度是多少,感受一下这个方法的靠谱程度。
明天预告
Day 17:《ChromaDB 上手:给本地文档建一个“外挂大脑”》。今天学会了怎么把文字变坐标,明天就有地方存它们了。ChromaDB 是最好上手的向量数据库,轻量、不用装服务、几行代码就能用。明天我们把一批文档真的塞进去,并且实现“提问就返回最相关的段落”。
————————————————
*系列目录:30天从零开始学AI应用 开发
网硕互联帮助中心



评论前必须登录!
注册