简介:本文面向刚进入大模型方向的开发者,系统解析Embedding与RAG的核心概念、工作原理与适用场景。读者将理解Embedding如何充当语义“翻译官”,RAG如何借助外部知识提升生成质量,并掌握两者的协作流程、常见误区与选型注意事项,为后续工程实践打下清晰的概念基础。
刚进入大模型方向的开发者,常常会先接触到两个高频词:Embedding 和 RAG。前者听起来像一个数学术语,后者像一串缩写,二者却共同构成了当前大模型应用落地的关键基础设施。本文从定义出发,逐层拆解这两个概念是什么、为什么重要、如何协作,以及在实际使用中需要注意什么。
Embedding,中文常译为“嵌入”或“向量化表示”,指的是把离散的、非结构化的信息(如一段文本、一张图片、一条用户 query)映射到一个连续的稠密向量空间中的过程。映射的结果是一个固定维度的数值向量,例如一个长度为 768 或 1024 的浮点数数组。
它的核心价值在于:让机器能够以“距离”来衡量语义相似性。在向量空间中,语义相近的内容在几何位置上彼此靠近,语义差异大的内容则距离较远。这使得“查找相似内容”从一个依赖关键词字面匹配的问题,转变为一个可计算的向量距离问题。
从使用视角看,Embedding 可以理解为 RAG 背后的“翻译官”:它把人类语言翻译成机器可比较的数值表示,让检索系统能够在语义层面而非字面层面理解用户意图。
大模型本身具备强大的语言理解与生成能力,但存在两个固有局限:
一种朴素的做法是把相关资料直接拼进提示词(Prompt)中,但上下文长度有限,且无关内容会稀释模型注意力。于是需要一种机制:先在海量资料中精准找到与问题最相关的片段,再把这些片段作为上下文交给模型。这正是 RAG 要解决的问题,而 Embedding 是其中实现“精准找到”的技术基础。
RAG(Retrieval-Augmented Generation,检索增强生成)是一种将“信息检索”与“文本生成”结合的技术架构。其基本思想是:在模型生成答案之前,先从外部知识库中检索出相关内容,将其作为上下文注入提示词,从而让生成结果建立在可追溯的外部知识之上。
RAG 通常包含三个核心模块:
以一个典型流程为例:
# 伪代码示意chunks = split_document(raw_text) # 文档切分vectors = embed(chunks) # 批量向量化index.write(vectors, chunks) # 写入向量索引query_vec = embed(user_question) # 问题向量化top_k = index.search(query_vec, k=5) # 相似度检索answer = llm.generate(prompt(user_question, top_k))
其中关键在于相似度度量,常见方式包括余弦相似度、内积等。余弦相似度关注向量方向的一致性,对向量长度不敏感,是文本语义检索中广泛使用的度量方式。
需要强调的是,Embedding 模型的质量直接决定检索效果。一个优秀的 Embedding 模型应具备:语义区分能力强、对同义改写鲁棒、支持目标语言、向量维度与性能开销平衡等特性。
Embedding 是把非结构化信息转化为可比较向量的技术,是语义检索的“翻译官”;RAG 则是以检索为前置、以生成为后端的架构范式,让大模型能够基于外部知识作答。二者结合,使大模型应用在知识时效性、私有化与可追溯性方面获得实质性提升。理解它们的定义边界与协作方式,是进入大模型工程实践的第一块基石。