RAG的基本流程分片主要用于把一篇文档切分为多个部分可以按字数分段落分章节分页数分等等。向量数据库1.通过Embedding的方式把分片出来的各段文本转换为向量2.把片段文本对应的向量存入向量数据库中Embedding方式1.使用本地部署的Embedding模型来实现中文入门可以选择BAAI/bge-small-zh-v1.5轻量适合 CPU 入门BAAI/bge-large-zh-v1.5中文效果更好但资源消耗更高BAAI/bge-m3支持多语言和较长文本适合后续深入moka-ai/m3e-base常见中文 Embedding 模型2.使用第三方api来实现调用一些API来实现分片比如国内厂商 阿里云百炼、智谱、火山引擎两种方式主要是为了把分片后的文档都转换为数字向量同时让语义相近的向量在空间上也相近向量数据库主要用于存储和查询向量的数据库同时能够快速的查找到“”语义最相近内容“”使用场景主要有两个一个是知识库入库阶段一个是用户使用阶段同时生成文档和查询时需要使用同一个embedding模型向量相似计算余弦相似度点积欧式距离索引在分片后进行embedding然后进行写入向量数据库然后建立向量索引。类似于正常的数据库中的索引那样为了加快检索的速度需要建立索引不用逐条比较也能快速知道相似内容Embedding是 把文本转换成向量索引就是 把向量组织起来加快查找常见的索引方式1.flat逐个比较计算方式就是首先和每个向量计算距离然后按距离排序这样结果最准确但是如果数据量大了就会速度特别慢.2.HNSW图索引把相似·的·向量连成一个图每次查找时先找到大概的区域然后再沿着相似向量之间的连接逐步逼近目标。3.分区索引把向量聚类为多个区域比如区域1大模型、RAG、Embedding 区域2Java、Spring、MySQL 区域3美食、旅游、电影查询的时候先判断查询的向量可能属于哪些区域然后搜索这些区域查找结果特点适合大量向量搜索区域越多查找的结果越准确但越慢搜索区域越少查找的速度越快但可能漏掉结果召回用于在知识库中找出可能与用户问题相关的文档分片的。当用户先问一个问题首先在知识库检索然后召回候选的分片然后进行重新排序把最相关的分片交给大模型大模型随后生成答案。相当于把有可能的答案的资料发给了大模型。重排重拍用于对召回返回的分片进行重新排序需要对每个内容进行计算计算时会把用户的问题和每个候选分片放在一块进行理解最后得到一个更加准确的分数。召回负责“尽量别漏掉”重排负责把最有用的内容放在前面。常见的重排方法1.Cross-Encoder把问题和分片一起输入模型是最常见的重排方式。2.LLM 重排直接交给大模型让大模型来判断哪些分片最相关了这样可以处理复杂的逻辑但是成本较高延迟增大而且结果会出现不太稳定的情况。3.制定规则重排比如最新版的优选官方文档游戏标题命中加分等等规则总的流程预训练相关总的来说预训练是让大模型可以获取到通用的能力和通用的知识。预训练过程中需要使用海量的文本来训练模型做“猜词游戏”预测下一个字例如在训练的时候把周一的下一天是周二作为训练数据喂给大模型然后模型在经过了大量的训练过会把这些语言规律和知识压缩进模型参数中当训练好了之后直接问大模型周一结束后是周几大模型不需要查询RAG数据直接就能在参数中的知识进行回答。预训练的优点预训练后模型有了通用的语言和生成能力模型有了大量的常识和公开的知识不需要每次都查询外部数据库可以直接完成一下总结翻译推理等等常见的任务缺点训练的知识有时间问题不知道一些非公开的数据和信息一些比较私有的数据无法获取很难说明知识来自哪里不知道怎么回答时可能会编造答案RAG 的优势可以使用私有文档知识更新方便修改知识库即可可以提供文件名、页码等引用不需要重新训练模型比较适合事实型问答可以降低因缺少知识导致的幻觉不足检索可能找不到正确分片错误资料可能排在前面文档切分会影响效果增加向量数据库和检索系统查询延迟和系统复杂度增加检索正确不代表模型一定正确使用资料微调相关微调是在已有预训练模型的基础上继续用一批特定数据训练模型以增强模型在某方面的能力微调适合让模型掌握特定任务、输出格式、表达风格、行业术语和工作流程从而更稳定地遵循指令可以让模型以较短的提示词稳定模型行为、提升专项任务表现并可能让较小模型胜任特定工作。不足微调依赖高质量数据和计算资源知识更新需要重新训练而且可能出现幻觉、过拟合和灾难性遗忘