**嵌入(embedding)**是把一段内容——一句话、一篇文档、一张图——转换成一个向量:几百到几千个数字组成的列表。关键在于内容落在数字空间的什么位置:嵌入模型经过训练,让语义相近的内容获得相近的向量。「怎么重置密码?」和「我登录不了账号了」几乎没有共同词,但它们的嵌入彼此紧挨——关键词搜索漏掉的,语义搜索恰好接住。
「彼此靠近」能换来什么
语义一旦变成几何,搜索就变成了数学。把文档全部嵌入一次、存下向量;提问时嵌入查询、找最近邻——这就是语义搜索,也是所有正经 RAG 系统里的检索步骤。同样的机制驱动着推荐(「喜欢这个向量的用户也喜欢……」)、去重、聚类和分类。向量数据库(Pinecone、pgvector、Qdrant 等)本质上就是为大规模最近邻查询优化的存储。
嵌入从哪来
嵌入模型用「本应匹配」的成对数据训练——问题和它的答案、图片说明和它的图片——把匹配的对子在向量空间里拉近,不匹配的推远。它们是独立于聊天 LLM 的小得多的模型,价格也相应便宜(每百万 token 几厘钱)。CLIP 一脉的多模态嵌入模型把文本和图像映射进同一个空间——「一辆红色自行车的照片」能检索出真的照片,原理就在这里。
要注意什么
嵌入是有损压缩。长文档挤进一个向量,细节会糊掉——RAG 管线先切块(chunk)再嵌入,正是为此。不同模型的向量不通用:换嵌入模型意味着全量重嵌。而「相似」的定义来自训练数据——在网页文本上训练的嵌入模型可能把爪哇岛和 Java 语言当邻居,领域微调后才分得开。当检索质量到了瓶颈,团队通常会加一个重排器(reranker)——用一个二次模型对 top 结果做全注意力重打分——而不是继续寻找魔法嵌入。