ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

LLM与Embedding的本质区别:RAG、Agent与知识库实战分工指南

LLM与Embedding的本质区别:RAG、Agent与知识库实战分工指南 看到这个标题很多人会下意识觉得这有什么好区分的一个会说话一个是词向量”。但真等到自己做RAG、做Agent、搭知识库的时候问题就全冒出来了。比如你会听到我把文档都Embedding了怎么效果还是不行或者直接用LLM做向量化是不是更聪明又或者Dify里又装embedding又装rerank到底哪个环节在起作用。这些问题背后其实都指向一件事没把LLM和Embedding的本质分工想清楚。我早期做企业知识库问答机器人时也在这个问题上绕了好大一弯。当时急于让机器人更懂业务花了大量精力找更聪明的LLM结果真正让效果翻倍的反而是把Embedding这块的召回精度抠细了。所以这篇内容我会尽量还原我自己的理解过程把这两个技术从原理、训练、使用到踩坑全部讲透。1. 本质定位LLM是生成者Embedding是转换者如果只记一句话那就是LLM承担的是文本生成和推理Embedding承担的是语义的数值化表达。这句话听起来简单但我看很多初级开发者在画系统架构图时经常把两者塞进同一个框里导致后面排查问题毫无头绪。1.1 LLM从一个Token开始预测未来大语言模型的核心本质是接龙游戏。你在对话框里输入一句话模型内部并不是先理解了整句话再去回答而是通过Transformer的注意力机制看着你给出的所有历史Token然后一步步预测下一个最合理的Token。这个预测过程不断循环最终拼出完整回复。不管你是用OpenAI的GPT系列还是开源的Qwen、Llama只要它们属于生成式语言模型底层都跑在这个逻辑上。这也是为什么LLM可以写诗、写代码、做概括因为它见过海量文本学到的不仅是语法还包括知识、推理模式、上下文关联规则。它擅长的是把已有的信息重新组合成新的文本。1.2 Embedding把人类语言翻译成空间坐标Embedding模型做的事情是另一条线。它不管怎么生成回答只管把一段文字变成一串固定长度的浮点数比如[0.128, -0.045, 0.793, ...]。这串数字就是该文本在高维空间里的一个坐标模型负责保证语义越接近的文本坐标距离越近。你可以把高维空间想象成一个大城市每段文本就是一栋楼Embedding就是楼的门牌坐标。比如今天天气如何和明天会下雨吗这两句话即便字面重合很少它们在语义空间里的坐标也应该离得很近。这就是Embedding最大的价值让计算机可以计算语义相似度。1.3 一张表快速划清边界维度LLMEmbedding核心任务文本生成、推理、摘要、对话语义向量化、相似度计算输入输出输入文本输出新文本输入文本输出固定维度向量典型代表ChatGPT、GPT-4、Qwen、Llamatext-embedding-3-small、bge-m3训练方式自回归下一个Token预测对比学习、向量空间拉近/拉远使用场景回答用户问题、写内容、分析知识检索、去重、聚类、推荐匹配是否理解语义能综合推理但无法廉价地做全库对比本身不做推理但忠实反映语义相似性这张表做完之后我发现很多架构问题一下就清楚了。比如为什么文档都放进数据库了LLM却答不上来十有八九是因为你让Embedding去承担了它不擅长的推理任务或者让LLM在没有检索结果的情况下硬答。2. 训练目标差异为什么会聊天不等于会判断相似很多人会问LLM这么强大直接让它告诉你两句话是否相关不就行了为什么非得单独训练Embedding模型这就牵扯到两个方向的技术差异。2.1 LLM的训练目标决定了它不擅长比较语言模型的预训练目标是最大化似然具体到实现上就是不断预测下一个Token。它学习的核心是语言的统计规律。训练过程中模型确实会隐含地学到一些语义信息但它的表征能力被生成好用这个目标带偏了——最后的隐藏层状态并非为了直接做相似度计算而优化。你可以把LLM理解成一个特别博学的朋友你问他鲁迅和周树人是什么关系他能滔滔不绝给你讲半天。但如果你给他一万篇文章让他快速挑出和某篇内容最相近的三篇他大概率会很慢而且判断标准未必稳定。LLM不是不会比较而是这种比较没有经过专门训练成本也远高于Embedding。2.2 Embedding通过对比学习拉近语义距离主流嵌入模型训练时常用对比学习框架。给你一个句子叫锚点和它意思相似的句子叫正样本意思无关的句子叫负样本。模型被要求把锚点和正样本拉近把锚点和负样本推远。常见损失函数是InfoNCE或Triplet Loss。这种范式非常功利它不关心模型能不能写出漂亮的句子只关心一件事语义空间中的几何距离是否精准匹配人类判断。经过足够多的正负样本训练后嵌入模型就被迫把语言重新组织成适合距离计算的结构化分布。这也是为什么嵌入模型体量通常比LLM小很多却依然能在检索任务上表现优秀。2.3 损失函数决定了底层表达的组织方式我整理资料时看到热词里有llm 预训练 损失函数说明这块确实是大家的困惑点。再做一个直白类比LLM的损失函数关心的是下一个词猜得准不准。它逼迫模型把上下文信息压缩进隐状态这些隐状态必须为生成服务。Embedding的损失函数关心的是两个点离得近不近。它逼迫模型把语义信息摊开在向量空间的各个方向上让不同维度承载不同语义因子。目标不同最终学出的特征分布形态也不同。所以不要期望直接把LLM的最后一层隐向量拿来当词向量用效果大概率不如专门训练的Embedding模型这点我后面还会专门讲。3. 在RAG、Agent、知识库项目中LLM和Embedding的真实分工理论讲再多不如拉到一个真实项目里看角色分配。现在热词里反复出现dify rerank text embedding 安装llm wiki知识库agent llm embedding 等名词区别说明大家都在实操阶段卡住了。那我就拿最典型的知识库问答场景来拆。3.1 经典RAG流程Embedding负责从大海里捞针一个标准的知识库问答系统用户会问一句我们公司的年假制度是什么。系统要做两件事首先把用户的问题转成向量然后用这个向量去向量数据库里匹配预先存好的所有文档片段找出最相关的TopK片段。这一步完全靠Embedding模型你可以理解为一位速度极快的图书管理员站在一排排书架前凭语义坐标立马锁定几本书。然后把检索到的片段和原始问题一起拼进Prompt扔给LLM让它基于这些片段生成通顺、准确的回答。这一步LLM是天生的写手负责把线索整理成漂亮的答案。这两个环节缺一不可。Embedding做不好LLM再强也是无米之炊LLM做不好检索再多片段也只能得到一段词不达意的拼接文本。3.2 热词里的Rerank是什么角色很多人在Dify这类平台上配置知识库时会看到安装Embedding之后还要再接一个Rerank模型第一次接触通常一脸懵。我当初也困惑过有Embedding检索还不够吗原因是Embedding向量检索虽然快但精度有限尤其在长篇文档、近似语义较多的场景里TopK结果可能夹着不少噪音。Rerank模型是另一种深度学习模型它会拿用户问题和每一条候选文档做精细的交叉编码打分把最相关的排到最前面。可以这样理解Embedding是海选从一万篇里挑出20篇Rerank是终审从20篇里选出最精准的5篇。热词里dify rerank text embedding 安装说明很多人正在配置这套链路。它们不是替代关系而是前后串联的上下游模块。3.3 Agent环境中LLM做规划Embedding做记忆到了Agent场景DLM与Embedding的分工更加明显。Agent经常要处理多轮复杂任务比如帮我查一下上个季度的销售数据再对比这个季度写个报告。Agent内部的Planning模块通常由LLM驱动它负责拆解任务、决定先调用什么工具、分析工具返回的结果。在这个过程中Agent需要记忆前几步做了什么、用户偏好是什么、历史知识储备在哪里。这些记忆被检索出来时靠的又是Embedding。比如AutoGPT这类项目任务中间会产生大量中间步骤。如果不做记忆筛选很快会超出上下文窗口。常见的做法是把历史步骤都转成向量存起来每当要决策时就检索最相关的几条。LLM是大脑在做推理Embedding是神经突触在快速调取记忆这个比喻我讲给团队新人听大家基本秒懂。4. 选型与集成从业务需求反推技术方案聊完分工实操问题来了我现在要做一个功能到底要不要引入Embedding模型该选哪个要不要微调下面结合我的实际经验梳理一条决策链路。4.1 先判断业务是否需要语义检索如果你的业务只是用户提问LLM凭自身知识回答不依赖任何外部私有数据你也无需对着几千篇文档做筛选那基本可以不用Embedding模型。但只要有下面任一情况Embedding就是刚需需要基于企业私域数据、最新文档回答问题需要对大量文本做聚类、去重、相似内容推荐需要给Agent长期记忆且记忆量超过上下文窗口需要做语义搜索、客服FAQ匹配、代码检索等我见过有人为了让LLM记住产品规格书想通过拼命扩大上下文窗口硬塞文档这个方案在文档量小的时候勉强能用但成本高得吓人而且LLM对超长上下文中部内容经常健忘。正确姿势就是把文档切片并Embedding只把检索到的相关片段送进LLM。4.2 模型和维度的选法选Embedding模型我一般看几个指标语言覆盖能力、最大输入长度、输出向量维度、在MTEB这类基准上的表现。中文场景推荐bge系列或m3e系列对中文语义支持到位英文场景可以用OpenAI的text-embedding-3-small性价比很高。维度这块要注意一点不是越大越越好。维度越高向量数据库占用的存储越大检索耗时越高而精度提升在达到一定程度后会放缓。像text-embedding-3就支持动态调整维度从3000多压到512、256都不影响太多效果。我的经验是几千条的文档库用256-512维足够百万级知识库再考虑更高维度。相似度算法一般选余弦相似度因为它对文本长度不那么敏感稳定好调。个别场景如果片段长度固定、内容比较结构化用内积或欧式距离也可以但新手我建议一律先用余弦。4.3 LoRA微调Embedding模型值不值得做热词里lora微调embedding模型热度不低。很多团队做垂域知识库时发现通用Embedding模型在专业术语上召回效果一般就想着微调。这里我的意见是先别急着微调先看看能不能靠数据预处理、改写查询语句、加Rerank解决。LoRA微调Embedding模型的思路是在保持原模型大部分权重不变的前提下用一批和你业务场景强相关的查询正样本负样本三元组训练低秩适配矩阵让模型对领域语义更敏感。这个方案我实测下来在这两类场景里效果明显专业术语强的领域比如医疗、法律、金融通用模型经常把相近术语混淆用户口语化查询和正式文档表述之间差距大的场景比如客户说老板不给结钱文档里写款项结算滞后LoRA微调最大的坑在于数据标注要求高三元组难凑。如果只有几百条我建议还是用Query改写或同义词扩展替代投入产出比更高。5. 实际项目中最容易踩的坑最后这部分就算前面都听明白了实操时照样容易翻车。我把这些年陆续踩过的坑和排查方法整理了一下每一条都对应过一个真实项目的血泪。5.1 坑一拿LLM输出的隐向量当Embedding用有些同学图省事或者模型接口用习惯了会直接调用LLM拿到它的embedding输出存进向量库当检索用。这在少数大型模型上确实可行但问题在于第一LLM接口通常不开放最终隐层状态你拿到的可能是特殊分隔符之后的向量语义偏移很大第二LLM的向量并非为相似度比较优化效果普遍不如专业嵌入模型高频调用还特别烧钱。我的建议检索这个环节老老实实用Embedding模型。LLM就留在生成端发挥它的优势不要做捞过界的事。5.2 坑二Embedding模型版本混用这个坑特别隐蔽。团队里有人升级了Embedding模型结果只把新文档向量化了旧数据还是旧版模型生成的向量。由于不同版本的向量分布根本不对齐检索效果急速下降但表面上看不出任何报错。我自己就被坑过一次。某天知识库问答准确率突然掉了十几个点排查了半天最后发现是同事更新了Embedding配置但历史向量库没有重灌。凡是线下调整Embedding模型必须整体重新构建向量索引千万别偷懒做增量。5.3 坑三以为Embedding能理解文档内容Embedding保证的是语义相似性不是推理能力。你存了一句话禁止在工作区吸烟用户问我能在工位抽电子烟吗Embedding可能会因为语义相近把它检索出来但它不会告诉你电子烟是否属于吸烟这件事。判断逻辑应该交给LLM去推理。所以做RAG时检索结果宁可多召回也不能漏掉关键片段。我通常在Prompt里加上一句如果检索内容无法完全回答用户问题请明确说明资料不足。这样即便Embedding召回不完美LLM也能兜底。5.4 排查检索问题的固定思路如果你现在正在跟一个LLM答不准知识库问题的案子别急着换大模型先按下面顺序排查先测试Embedding单独用向量检索看TopK结果里有没有用户问题的正确答案再测试切片粒度文档切片太粗一段里塞了多个主题检索命中率就会下降切片太细语义不完整同样糟糕再测试Rerank如果不加RerankTopK里的噪音是否过高最后看Prompt检索内容都给对了LLM还答错才是模型的表达或理解问题这套思路帮我定位过好几个神秘缺陷每次都能把问题缩小到单一模块避免无头苍蝇式乱调。5.5 补充一个细节Embedding模型最大输入长度很多嵌入模型有最大输入长度比如512 Token或1024 Token。切片时千万不能超过这个长度否则超出部分会被直接截断相当于丢信息。我之前处理一份超长合同因为切片策略没限制长度导致尾部条款怎么都检索不到。后来把切片按500 Token左右重切并保留一定重叠Overlap效果立刻正常了。写在最后我做这套组合的真实体会如果非要总结一句个人体会那就是LLM决定回答质量的上限Embedding决定回答质量的下限。在绝大多数知识库、Agent项目里你把Embedding和检索环节打磨到位哪怕LLM只用一个中等规模的模型整体体验也会非常能打反之Embedding稀烂就算换最强的LLM也一样漏洞百出。这几年深度学习技术迭代很快Embedding模型也有被多模态向量、统一表征模型覆盖的趋势但生成与检索这两个角色的分工逻辑短期内不会变。初学者与其焦虑要不要学Embedding不如亲手部署一个BGE模型串一个RAG流程亲自观察检索命中率和回答质量之间的关系。试过一次很多东西就通了。
返回列表