30天从零开始学AI应用开发(Day 16):Embedding 是什么?用人话讲明白“向量检索”

这是系列的第 16 篇。整个系列写给零基础、想入行 AI 的朋友,每天一篇,30 天后你会做出 3 个能写进简历的项目。

这篇解决什么问题

昨天说 RAG 的核心是"先去资料里查出相关的内容"。可这里有个问题:怎么查?

传统方法是搜关键词。你问"怎么报销差旅费",它就去文档里找有没有"报销"这两个字。这招有个致命缺陷:换个说法就搜不到了。 文档里写的是"差旅支出申请流程",你问"出差花的钱怎么报",关键词一个都不对,搜出来一片空白。

但人看得出来这两句话是一个意思。怎么让机器也看得出来?答案是 Embedding。今天这篇可能有点抽象,但我保证用人话能讲明白。

一、先理解一件事:把意思变成坐标

思路是这样的:既然机器看不懂文字,那就把文字变成数字。

不是随便变,而是按"意思"来变。意思相近的句子,变出来的数字也相近;意思差很远的,数字就差很远。

最直观的理解方式是把它想成地图上的坐标。每个句子在"意思的地图"上有一个位置:

  • "怎么报销差旅费"
  • "出差花的钱怎么报"
  • "差旅支出申请流程"

这三句话意思相近,在地图上挨得很近,聚成一小团。

  • "今天中午吃什么"

离它们就很远,在另一片区域。

这个"坐标"就是向量,一长串数字。把文字转成向量的过程叫 Embedding。你不用管这串数字具体是多少,也不用管它是怎么算出来的,那是模型内部的事。你只需要知道:意思相近,坐标就相近。

二、查资料变成了量距离

有了坐标,检索这件事就变成了小学几何题:算出提问的坐标,去地图上找离它最近的那几个点,取出来。

举例说明。假设库里存了三段资料,提问是"出差怎么报销":

资料内容 和提问的"距离" 结果
差旅支出申请流程:先填单...... 很近 命中
员工考勤管理规定...... 很远 不相关
差旅费标准:高铁二等座...... 较近 命中

机器算的就是距离,跟关键词一个字都对不上也没关系,因为比的是意思,不是字面。

记住这个比喻,整个 RAG 就通了:Embedding 给每句话发了个坐标,检索就是在地图上找最近的邻居。

三、动手感受一下:算两句话有多像

光看比喻还是虚,跑一遍代码就有感觉了。Embedding 也是调用 API 拿到的,写法你早就熟了:

python 复制代码
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 越像就行:

python 复制代码
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应用 开发

相关推荐
倔强的石头1061 小时前
【Transformer】上下文长度扩展技术综述
人工智能·深度学习·transformer
Rocky Ding*1 小时前
MaskGIT技术深度解析:图像生成如何从逐Token排队走向掩码并行预测
论文阅读·人工智能·深度学习·机器学习·aigc·ai-native·maskgit
笨笨饿2 小时前
#141_ Codex 本地 AI 代理工具链工作流重构:Headroom、Scrapling、Archify 统一接入
开发语言·人工智能·stm32·单片机·嵌入式硬件·ui·重构
Rocky Ding*3 小时前
Muse技术深度解析:用掩码并行生成图像,速度、语义与编辑能力如何同时成立
论文阅读·人工智能·深度学习·机器学习·aigc·ai-native·muse
HIT_Weston3 小时前
15、【数学】【基础】欧拉公式是怎么来的:从级数、微分方程到旋转
人工智能·模型部署
数智前线4 小时前
AI Coding,正在把存储推向前台
人工智能
唠点键盘之外的9 小时前
15 微调 vs RAG:到底怎么选
人工智能·机器学习·面试·aigc
具身AGI10 小时前
人机协同预训练:三条路线,一条拉开差距
人工智能
东风破_10 小时前
LangSmith:从链路追踪到 RAG 自动化评估
人工智能