微信扫码
添加专属顾问
我要投稿
RAG技术实战指南,聚焦知识库构建、检索优化与量化评测三大核心挑战,助你打造低幻觉、高确定性的Agent应用。核心内容: 1. 从文档加载到索引构建的全链路技术详解 2. 检索优化与生成调优的核心策略与方法 3. Graph RAG进阶应用与Ragas自动化评估体系
在Agent的开发过程中,RAG技术的应用水平直接决定了Agent的业务上限。在跟进品牌行业AI运营战役时,架构组发现部分团队在RAG落地中面临共性挑战:知识库构建缺乏标准、检索召回精度达不到预期,以及缺乏量化评测体系。因此,我们梳理了这篇技术指南,期望从实战角度拆解RAG的全链路核心能力:从底层原理出发,深入探讨如何构建索引、如何通过技术手段优化召回,以及如何建立科学的评测闭环。希望通过这篇文章,大家能看清RAG背后的技术细节。不仅能把Agent做出来,更能通过调优和评测,构建出低幻觉、具备业务确定性的Agent应用。
大型语言模型(LLMs)已经取得了显著的成就,尽管它们仍然面临着很大的局限性,尤其是在特定领域或知识密集型任务中,特别是在处理超出其训练数据或需要当前信息的查询时,会产生 "幻觉"。为了克服这些挑战,检索增强生成(RAG)通过语义相似性计算从外部知识库中检索相关文档块,从而增强了 LLM。通过引用外部知识,RAG 可有效减少生成与事实不符内容的问题。
RAG,全称Retrieval Augmented Generation(检索增强生成),其工作原理为:当用户提问时,系统先从海量知识库中检索出与问题相关的实时或私有信息,并将这些信息作为参考背景与问题一起提供给大模型,让模型像做开卷考试一样,基于提供的可靠证据生成更准确、实时且可溯源的回答。
文档加载是RAG的“入口”,它的质量直接决定了后续检索的准确性。简单来说,它的工作就是将各种格式的非结构化数据转化为系统可处理的统一文本格式。
文档加载的主要工作如下:
多格式适配: 兼容各种文件格式,如 PDF、Word、Markdown、HTML、JSON、TXT 甚至 Excel。
内容提取: 从原始文件中剥离出“净文本”。
元数据(Metadata)提取: 在提取文本的同时,记录文档的属性,如:文件名、页码、标题、作者、创建时间、章节层级等。
初步清洗: 去除文档中的冗余信息,如乱码、过多的空格、特殊的非打印字符等。
文档切分的主要方式如下:
按语义切块的实现(Meta-Chunking)
Meta-Chunking: Learning Text Segmentation and Semantic Completion via Logical Perception:该论文给出了一个基于逻辑和语义的chunking的方法,有完整的效果评测,可参考。
原理
PPL(Perplexity,困惑度)源于信息论,是衡量语言模型预测序列好坏的核心指标。在该论文中,PPL 被巧妙地用作一种感知语义边界和逻辑完整性的度量工具。
直观理解: PPL 反映了语言模型在看到一段文本时有多“困惑”。低 PPL: 模型觉得这段话很通顺、逻辑连贯、符合语言规律;高 PPL: 模型觉得这段话很突兀、逻辑断层或不符合语境。
实现步骤
对文档进行切分:
将原始长文档按照标点符号切分成一个个句子(Sentences)。切分好的句子表示为,(x1, x2, ..., xn)。
使用一个轻量化的大模型(论文中常用 Qwen2)“计算”每个句子与他前面句子的PPL(困惑度)。其中,K表示xi中的token数。tik表示xi中的第k个token,t< i表示所有位于xi之前的token。通过这种方式,得到一条随文本流动的 PPL 曲线。
寻找 PPL 曲线上的局部极大值(Local Maximum)。当模型处理到某一句时,如果 PPL 突然大幅升高,说明这一句与前面的内容在逻辑上“脱节”了。这个 PPL 飙升的点就被标记为潜在的切分边界。
对每个切块(trunk)进行语义补全:解决因文本分块导致上下文信息丢失而引发的语义鸿沟问题。
全局增强的文本块重写(Globally Augmented Text Chunk Rewriting):for生成质量
预处理(可选):针对 LLM 难以一次性完全处理的极长文档,采用embedding模型对每个trunk进行向量化,识别出与当前trunk相近的trunk。
推理是否丢失信息: 利用 LLM 并结合预处理阶段识别出的潜在相关信息,对每个文本块判断是否丢失信息。核心任务是明确识别当前文本块中缺失的前提、背景信息、相关事实或结论性陈述。LLL 应全面列出信息缺失的领域,并具体说明需要补充的信息。
丢失信息提炼:对上一阶段检测到的潜在丢失信息进行打分和筛选。我们旨在防止引入无关或错误的补充内容,从而确保增强过程的精确性。
丢失信息补全:基于前一阶段确认的必要信息,引导 LLM 生成这些信息片段并与当前文本块进行整合。目标是生成一个在上下文中无缝衔接、语义自然且能有效实现跨块信息融合的新文本块。
摘要生成(Context-Aware Summary Generation):每个文本块生成一个富含全局信息的简明摘要,从而进一步增强该文本块的语境感知能力。for检索
全局补充:模型利用全局信息为目标文本块生成一份补充摘要。这一过程旨在补偿由于切分(Segmentation)而可能缺失的话语背景(Discourse Background)和外部关联信息。
局部融合:针对文本块本身的内容,模型会独立生成一个局部摘要(Local Summary),以概括其核心观点。随后,将前述的“补充摘要”与“局部摘要”进行融合与精炼,最终形成一句话的增强摘要(Enhanced Summary Sentence)。该句子能够从全局视角清晰地表达该文本块的内容。
索引构建是为了将一段文档根据其语义去生成向量。与传统embedding通过“预测”任务把文档转换成向量不同,现代embedding模型(千问 text-embedding-v4等)基于Transformer架构,将文档通过深度学习模型映射到连续的向量空间。下面以“苹果手机很好用”为例来详细看下映射过程:
分词与编号(Tokenization):
将“苹果手机很好用”切分为:[苹果, 手机, 很好用]。
在头尾增加特殊字符:[CLS]:放在句首,代表“分类/全句汇总”信息;[SEP]:放在句尾,代表句子结束。
将token转换为id:根据embedding模型中预设好的词表,将token转换为数字索引。[CLS, 苹果, 手机, 很, 好用, SEP] -> [101, 512, 678, 321, 102]。
映射初始向量:在进入复杂的计算层之前,将数字索引变成一个基础向量。
查表: 查阅embedding模型中预定义的表格,每个ID拿到一个例如1536维的初始向量。
转换:模型有三个权重矩阵(WQ,WK,WV)。这三个矩阵是模型训练好后固定不变的参数。每个token都会通过数学变换变成三个角色(向量),我们称之为 Q、K、V。其中,Query (Q) —— “提问者”:我想找什么样的主体?Key (K) —— “被索引者”:我能提供什么样的特征?Value (V) —— “内容本身”:我实际代表的含义。
注入位置信息(Positional Encoding):给每个向量额外加上一组代表位置的数字。这样模型就知道“苹果”在第1位,“很好用”在第3位。其中,X是与位置相关的矩阵。
自注意机制(Self-Attention):
计算每个token与其他token的相关性:
“苹果”的 Q × “苹果”的 K = 分数很高(自关联)
“苹果”的 Q × “苹果”的 K = 分数很高(语义强相关)
“苹果”的 Q × “很好用”的 K = 分数一般
“苹果”的 Q × “苹果”的 K = 100%
“苹果”的 Q × “苹果”的 K = 50%
“苹果”的 Q × “很好用”的 K = 10%
“苹果”的新向量 = 100% * “苹果”的V + 50% * “手机”的V + 10% * “很好用”的V。
“苹果”的向量会吸收“手机”的特征。“苹果”向量里的“水果/红色”特征被抑制,而“电子产品/科技”特征被放大。
备注:部分数据来自大模型,仅供参考。
检索阶段会召回与问题最相关的文本段。通过embedding模型对问题进行文本向量化,并与向量数据库的段落进行语义相似度的比较,找出最相关的段落。为大模型提供高质量、强相关的参考证据,直接决定了生成答案的准确性、相关性以及消除幻觉的上限。
Query优化
指代消解(Coreference Resolution): 处理多轮对话。例如用户问“它的价格是多少?”,改写器会根据上下文将其改写为“华为 Mate 60 Pro 的价格是多少?”。
纠错与去噪: 修正错别字,剔除无意义的口语助词(如“那个...我想问一下...”)。
术语对齐: 将口语化的表达转化为专业术语。例如将“肚子疼怎么办”改写为“腹痛的治疗建议”。
结构转换: 将复杂的长难句拆解或简化,提取出核心语义特征。
多查询生成
HyDE:用假设文档增强检索
原始文本: “根据公司差旅管理办法第四条,员工在非一线城市出差时,每日住宿补贴上限为 350 元人民币。申请人需在差旅结束后 15 个工作日内,通过 ERP 系统提交正规增值税专用发票进行报销,逾期将不予受理。”
真实提问: “我想报销上周去西安出差的房费,该怎么办?”
AI 回答: “您去西安(非一线城市)出差,每日房费报销上限是 350 元。请记得在出差结束后 15 个工作日内,通过公司 ERP 系统提交增值税专用发票进行申请哦。”
是一种将“非结构化数据”向“半结构化数据”转化的过程。它通过在语义向量检索的基础上引入标签过滤来提升检索精度。
例子:
from dataclasses import dataclassfrom ragas.testset.synthesizers.base_query import QuerySynthesizerclass EntityQuerySynthesizer(QuerySynthesizer):async def _generate_scenarios( self, n, knowledge_graph, callbacks):"""这个方法不调用大模型去写问题,它只是在查地图(KG)。1. 输入:你想要几道题(n),以及知识图谱(KG)。2. 它做的事:在 KG 中寻找有关系的节点。决定这n道题分别用哪些节点作为素材。给每道题贴上标签(如:这道题用“正式”风格,由“经理”身份提问)。3. 输出:一组 Scenario(方案列表)。"""return scenariosasync def _generate_sample(self, scenario, callbacks):"""1. 输入:一个 Scenario(包含节点文本、人设、风格等)。2. 它做的事:把文本和要求塞进 Prompt。调用 LLM。让 LLM 返回:问题是什么?标准答案是什么?。3. 输出:一个 TestsetSample(一道完整的题目)。"""return SingleTurnSample(user_input=query, reference_contexs=contexts, reference=reference)
本文作者驰海,来自淘天集团–天猫品牌行业架构团队。团队聚焦构建面向品牌行业的定制化AI Agent架构能力。我们致力于构建面向行业的AI Agent全链路架构基础设施,涵盖选型、复用、评测与自进化闭环。围绕品牌经营核心场景,团队深度赋能商品运营全链路智能托管、数字员工驱动的智能客服体系升级以及AIGC素材生成与内容生产等方向,通过提供可规模化、高质量的Agent架构解决方案,持续驱动AI技术在品牌行业的深度应用与价值释放。
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费POC验证,效果达标后再合作。零风险落地应用大模型,已交付160+中大型企业
2026-05-18
别再错过啦,AI Agent记忆革命:95.2%检索率的持久记忆系统深度解析
2026-05-18
有多少人把Agent与RAG的检索策略,简化成了 if-else?
2026-05-18
捅破个人AI天花板!YC总裁开源GBrain:8层架构打造AI第二大脑,解决记忆难题,狂揽 1.6w Star!网友:第六层才是护城河!
2026-05-16
RAG 在企业的落地,从来不是一个“大模型问题”
2026-05-14
2026年知识库幻觉根治指南:从 Naive RAG 到 Agentic RAG
2026-05-11
到底是谁会相信RAG已死啊?
2026-05-11
RAG又进化了!微软整了个企业级AgenticRAG
2026-05-11
AI Agent 如何重构 App 稳定性治理流程
2026-03-23
2026-04-06
2026-02-22
2026-03-18
2026-03-20
2026-02-27
2026-02-21
2026-03-21
2026-03-31
2026-03-17
2026-05-18
2026-05-11
2026-05-07
2026-05-06
2026-04-27
2026-04-21
2026-03-17
2026-03-11