ARTICLE DETAIL

资讯详情

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

RAG 技术方案全解析:从基础架构到生产级优化

RAG 技术方案全解析:从基础架构到生产级优化 这里写自定义目录标题欢迎使用Markdown编辑器引言RAG 为什么成为大模型落地的主流范式一、RAG 的核心原理与设计目标1.1 从参数记忆到外部记忆1.2 RAG 解决的核心问题二、RAG 的完整架构从数据到服务的全链路2.1 数据层知识库的质量决定一切2.2 索引层稀疏检索与稠密检索2.3 混合检索兼顾精度与召回2.4 检索层与生成层三、RAG 实战一个完整的落地流程四、RAG 的核心挑战与优化手段4.1 检索质量差4.2 上下文窗口限制4.3 知识冲突新的改变功能快捷键合理的创建标题有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能丰富你的文章UML图表流程图FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好 这是你第一次使用# RAG 技术方案全解析从基础架构到生产级优化引言RAG 为什么成为大模型落地的主流范式大语言模型的知识全部固化在训练时的参数里这带来两个根深蒂固的问题知识时效性差训练截止之后的世界它一概不知幻觉频发在知识不足或不确定的场景下会自信地编造内容。为了让模型学会不知道的东西业界提出了两条路线一是微调把新知识灌进参数里但成本高、周期长、每次更新都要重新训练二是检索增强生成RAG在生成之前先从外部知识库检索相关内容把检索结果作为上下文注入提示词让模型基于证据作答。RAG 之所以成为当下大模型应用落地的主流范式是因为它天然具备三个优势知识可以随时更新换掉知识库就换掉了模型的记忆答案有据可查可以追溯到具体检索源增强可信度成本远低于微调不需要昂贵的训练算力。本文将从原理、架构、实战和优化四个层面系统拆解 RAG 技术方案。一、RAG 的核心原理与设计目标1.1 从参数记忆到外部记忆RAG 的哲学很简单让模型不依赖内部的参数记忆而是依赖外部可检索的记忆。整个系统由两个模块协同工作检索模块负责从外部知识库文档库、数据库、向量索引中精准提取与用户查询相关的上下文生成模块基于检索结果与用户输入生成更准确、更具时效性的回答。模型仍然负责组织语言但事实来源从参数转移到了检索结果。1.2 RAG 解决的核心问题具体来说RAG 解决了传统生成模型的三大痛点第一知识过时问题。模型参数固化后无法动态吸收新知识而 RAG 的检索模块可以连接数据库、文档库或 API随时获取最新信息特别适合新闻、产品参数、企业内部资料等时效性强的场景。第二幻觉问题。通过检索结果约束生成范围模型只能基于给定的上下文作答大幅降低编造不实信息的概率。当然这要求检索结果本身是准确的检索错了生成的答案也会跟着错。第三通用模型专业化问题。通用模型的权重分散在太多领域在垂直领域表现平平。搭配该领域的知识库后模型相当于在作答时临时翻开了专业资料垂直场景的专业性显著提升。二、RAG 的完整架构从数据到服务的全链路一个完整的 RAG 系统包含数据层、索引层、检索层和生成层四个部分。2.1 数据层知识库的质量决定一切知识库的质量直接决定 RAG 效果的上限这个环节值得投入最多精力。核心工作有三项数据清洗是最基础也是最容易被低估的环节。去除重复内容、低质量内容、广告和噪音统一格式如HTML转纯文本、Markdown 规范化修正错别字和乱码。脏数据进入索引后检索结果会被污染且问题会沿着链路层层放大。分块策略决定检索的最小单元。长文档需要切成合理粒度的片段既不能太粗导致语义混杂也不能太细导致上下文割裂。常见的做法是按段落、语义块或固定字数切分块与块之间保留重叠部分。不同文档类型应该采用不同的切分策略代码按函数切技术文档按标题层级切合同按条款切。元数据标注是很多团队忽略的一环。给每个文本块打上来源文档、章节、日期、作者等标签一方面可以在检索后做过滤和展示另一方面为后续的权限控制和引用溯源提供基础。2.2 索引层稀疏检索与稠密检索知识库的检索索引主要有两类各有适用场景稀疏检索基于关键词匹配最经典的算法是 BM25。它通过词频和逆文档频率计算文档与查询的相关性擅长处理精确匹配、专有名词、编号等场景对结构化文本效果好不需要 GPU速度快。缺点是理解不了语义换个说法就搜不到。稠密检索基于向量语义匹配。用嵌入模型如 BERT 系列、bge 系列把文本映射为高维向量查询时把问题也转成向量通过余弦相似度或向量内积计算最相似的文本块。它擅长语义相似匹配如何修电脑和计算机故障排查也能关联上但需要嵌入模型的算力开销且对专有名词的精确匹配可能不如 BM25。构建向量索引的示例代码如下importfaissimportnumpyasnpfromsentence_transformersimportSentenceTransformer modelSentenceTransformer(paraphrase-multilingual-MiniLM-L12-v2)docs[RAG 通过检索增强生成...,向量索引可加速语义搜索...]embeddingsmodel.encode(docs).astype(float32)indexfaiss.IndexFlatL2(embeddings.shape[1])index.add(embeddings)query_embmodel.encode([如何优化 RAG 检索效率])distances,indicesindex.search(query_emb,k3)2.3 混合检索兼顾精度与召回业界公认的最优实践是混合检索同时跑 BM25 稀疏检索和向量稠密检索再把两路结果融合。融合算法有多种最简单的 RRFReciprocal Rank Fusion把各路的排名倒数相加无需训练即可获得稳健的效果更高级的做法是用学习排序模型对融合后的候选做二次精排。混合检索的意义在于互补BM25 保证精确匹配不丢向量检索保证语义相关不漏。在很多真实项目中单纯换嵌入模型不如加一路 BM25 带来的提升明显。2.4 检索层与生成层检索层负责把用户的自然语言问题转换为可检索的查询并召回相关文档。这里有两个容易被忽略的细节一是查询改写用户的问题往往口语化、指代不明如那它的部署方式呢需要借助模型把问题改写得更完整、更适合检索二是重排序向量检索召回的 Top-K 结果相关性排序未必理想用重排序模型做二次精排后只保留最相关的几块能显著提升生成质量。生成层把检索结果与用户问题组装成提示词交给 LLM 生成最终答案。提示词需要明确告知模型只依据给定资料作答、资料不足时明确说不知道、以原始资料中的表述为准。有条件的情况下还可以要求模型在回答中标注引用来源便于用户核查。三、RAG 实战一个完整的落地流程以一个企业知识库问答系统为例完整流程如下第一步数据准备。收集产品文档、技术手册、FAQ、历史工单等资料清洗后统一格式按主题或文档结构分块标注元数据。第二步构建索引。使用嵌入模型将文本块向量化写入向量数据库如 Chroma、Milvus、FAISS同时构建 BM25 索引供混合检索使用。这一步通常在离线完成定期增量更新。第三步实现检索。用户提问后同时发起向量检索和关键词检索融合两路结果用重排序模型精排取最相关的 Top-K 块。第四步生成回答。把用户问题、检索块、系统指令组装成提示词调用 LLM 生成答案。回答中可以包含引用来源标识。第五步评估与迭代。建立评估集定期统计检索命中率和答案准确率根据失败案例调整切分策略、嵌入模型、检索参数和提示词。四、RAG 的核心挑战与优化手段4.1 检索质量差症状是答非所问或找不到答案。优化手段包括调整分块策略块大小、重叠度更换更强的嵌入模型引入混合检索加入查询改写用重排序模型精排。排查时建议先用检索调试工具单独查看检索结果确认问题出在检索还是生成。4.2 上下文窗口限制知识库文档量大检索结果可能超过模型上下文长度。解决思路有三一是收紧召回数量只保留最高相关性的块二是用map_reduce或refine模式分片处理三是在分块阶段就控制块大小让单块和召回总量落在上下文预算内。4.3 知识冲突知识库中的新旧文档可能互相矛盾检索结果同时包含冲突信息模型会无所适从。解决思路是在数据清洗阶段做去重和版本管理在提示词中要求模型以最新版本或高优先级来源为准必要时在元数据Markdown编辑器所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章了解一下Markdown的基本语法知识。新的改变我们对Markdown编辑器进行了一些功能拓展与语法支持除了标准的Markdown编辑器功能我们增加了如下几点新功能帮助你用它写博客全新的界面设计将会带来全新的写作体验在创作中心设置你喜爱的代码高亮样式Markdown将代码片显示选择的高亮样式进行展示增加了图片拖拽功能你可以将本地的图片直接拖拽到编辑区域直接展示全新的KaTeX数学公式语法增加了支持甘特图的mermaid语法1功能增加了多屏幕编辑Markdown文章功能增加了焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置等功能功能按钮位于编辑区域与预览区域中间增加了检查列表功能。功能快捷键撤销Ctrl/CommandZ重做Ctrl/CommandY加粗Ctrl/CommandB斜体Ctrl/CommandI标题Ctrl/CommandShiftH无序列表Ctrl/CommandShiftU有序列表Ctrl/CommandShiftO检查列表Ctrl/CommandShiftC插入代码Ctrl/CommandShiftK插入链接Ctrl/CommandShiftL插入图片Ctrl/CommandShiftG查找Ctrl/CommandF替换Ctrl/CommandG合理的创建标题有助于目录的生成直接输入1次#并按下space后将生成1级标题。输入2次#并按下space后将生成2级标题。以此类推我们支持6级标题。有助于使用TOC语法后生成一个完美的目录。如何改变文本的样式强调文本强调文本加粗文本加粗文本标记文本删除文本引用文本H2O is是液体。210运算结果是 1024.插入链接与图片链接: link.图片:带尺寸的图片:居中的图片:居中并且带尺寸的图片:当然我们为了让用户更加便捷我们增加了图片拖拽功能。如何插入一段漂亮的代码片去博客设置页面选择一款你喜欢的代码片高亮样式下面展示同样高亮的代码片.// An highlighted blockvarfoobar;生成一个适合你的列表项目项目项目项目1项目2项目3计划任务完成任务创建一个表格一个简单的表格是这么创建的项目Value电脑$1600手机$12导管$1设定内容居中、居左、居右使用:---------:居中使用:----------居左使用----------:居右第一列第二列第三列第一列文本居中第二列文本居右第三列文本居左SmartyPantsSmartyPants 是一个文本转换工具主要功能是将普通的 ASCII 标点符号自动转换为更美观的印刷体标点符号。例如原始符号转换后说明引号“引号”直引号变弯引号单引号‘单引号’直单引号变弯单引号--–两个连字符变短破折号---—三个连字符变长破折号...…三个点变省略号创建一个自定义列表MarkdownText-to-HTMLconversion toolAuthorsJohnLuke如何创建一个注脚一个具有注脚的文本。2注释也是必不可少的Markdown将文本转换为HTML。KaTeX数学公式您可以使用渲染LaTeX数学表达式 KaTeX:Gamma公式展示Γ ( n ) ( n − 1 ) ! ∀ n ∈ N \Gamma(n) (n-1)!\quad\forall n\in\mathbb NΓ(n)(n−1)!∀n∈N是通过欧拉积分Γ ( z ) ∫ 0 ∞ t z − 1 e − t d t . \Gamma(z) \int_0^\infty t^{z-1}e^{-t}dt\,.Γ(z)∫0∞​tz−1e−tdt.你可以找到更多关于的信息LaTeX数学表达式here.新的甘特图功能丰富你的文章2014-01-072014-01-092014-01-112014-01-132014-01-152014-01-172014-01-192014-01-21已完成进行中计划一计划二现有任务Adding GANTT diagram functionality to mermaid关于甘特图语法参考 这儿,UML图表可以使用UML图表进行渲染例如下面产生的一个序列图王五李四张三王五李四张三李四想了很长时间, 文字太长了不适合放在一行.你好李四, 最近怎么样?你最近怎么样王五我很好谢谢!我很好谢谢!打量着王五...很好... 王五, 你怎么样?关于UML图表语法参考 这儿,流程图链接长方形圆圆角长方形菱形关于Mermaid语法参考 这儿,FLowchart流程图我们依旧会支持flowchart.js的流程图语法Created with Raphaël 2.3.0开始我的操作确认结束yesno关于Flowchart流程图语法参考 这儿.导出与导入导出如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到文章导出生成一个.md文件或者.html文件进行本地保存。导入如果你想加载一篇你写过的.md文件在上方工具栏可以选择导入功能进行对应扩展名的文件导入继续你的创作。mermaid语法说明 ↩︎注脚的解释 ↩︎
返回列表