AACP / 大模型练习
系统讲义 / 3. 检索增强 RAG

3. 检索增强生成(RAG)

RAG 的目标是让模型在回答前读到当前、相关、可使用的资料。模型原有参数不会因此更新;知识来自本次请求附带的上下文。它适合制度问答、产品说明、内部知识查询等需要及时更新且能追溯出处的场景。把资料塞进提示词也不能自动保证正确:文件可能没有被解析、检索可能找错、模型也可能忽略证据。因此要把整条链路分段设计和检查。

先认术语:“索引”是提前整理好的可查询资料结构;“查询”是用户这次要找的信息;“片段”是从文档切出的检索单位;“元数据”是片段附带的标题、版本、权限等标签;“上下文”是本次回答前实际交给生成模型的文字。token 是模型处理文字的计量单位,不等于一个汉字;上下文容量有限,所以检索出的每段文字都占空间。“召回”指先找到可能有关的片段,“重排”指再把候选按相关性调整顺序。

3.1 两条链路:建索引与回答

离线建索引:取得获准使用的文档 → 解析 PDF、网页或表格 → 按含义切分 → 为片段记录标题、来源、版本、权限等元数据 → 计算片段的 Embedding 向量 → 写入索引。在线回答:识别用户身份和问题 → 必要时用对话历史改写查询 → 按权限与有效版本筛选 → 召回候选片段 → 重排序 → 将少量证据交给生成模型 → 检查回答并展示出处。索引像书的目录,检索像查目录,生成像阅读找到的段落后作答。索引建得再快,如果漏掉关键条款,在线生成无法凭空补回企业事实。

官方课程的 2.2 节把建索引拆为文档解析、文本分段、文本向量化和存储索引;2.5 节再讨论如何诊断与优化召回。这也说明优化顺序应从故障所在环节出发,而非一律更换大模型。

离线:建索引 原始文档解析文本切分片段计算向量索引+元数据 在线:回答查询 用户问题改写与鉴权检索候选重排证据生成并引用
资料先建索引;每次提问时才检索索引并生成答案。纵向箭头表示在线检索读取已建好的索引。

3.2 切分为何会影响答案

检索单位通常是片段,不是整本手册。假设制度写着:“试用期员工申请病假,须在两个工作日内提交医院证明。”如果按固定字数切成“试用期员工申请病假”和“须在两个工作日内提交医院证明”,第二段被召回时已经失去适用人群;模型可能把要求推广到所有员工。反过来,若整本手册当一个片段,文本中的年假、报销和福利会稀释病假语义,并挤占上下文长度。

优先利用标题、条款、段落和表格结构来切分,让“条件—规则—例外”尽量位于同一片段。必要时给相邻片段少量重叠,并在每段附带章节标题。重叠不是越多越好:重复内容会挤掉其他证据。扫描版 PDF 要先做文字识别并抽查顺序;表格要保留列名与单元格的对应关系。例如只抽出“3 天”却丢掉“正式员工”列名,后续向量检索再准也无法恢复语义。每次更换切分策略后,用真实问题检查“关键条件是否完整进入召回片段”。

3.3 Embedding、相似度与召回

Embedding 模型把问题和片段编码为同维向量,使表达不同但意思相近的文本有机会靠近。向量不是规则真值,也不是模型已经“理解”企业制度。常见的余弦相似度是 cos(q,d) = (q·d) / (||q|| × ||d||),比较方向而非文字重合数。可手算的二维示意:查询向量 q=(1,0),片段 A 为 (0.8,0.6),片段 B 为 (0,1);三个向量长度都是 1,所以 A 的余弦相似度为 0.8,B 为 0。真实向量维度和分布由模型决定,这个数字例子只用于说明计算,不代表产品阈值。

语义检索能处理“带薪休息”与“年假”这类词面差异;精确编号、姓名、日期却未必靠向量最稳妥。遇到“制度编号 HR-17 的第 6 条”,关键词或结构化字段过滤可能更可靠。实践中可以把关键词和向量召回的候选合并,再重排。召回追求别漏掉正确证据;重排对少量候选做更细的相关性判断,把最有用片段放到上下文前面。把 top-k 从 3 提高到 20 可能找回漏项,也会增加噪声、延迟和上下文成本,所以要看评测结果而非盲目放大。

还要区分“候选召回”和“最终入模”:向量库可先找出十几个候选,但受上下文预算限制,最终只送入几段。若正确片段在候选第 8 位,而系统只取前 5 位,则候选层已经找到、最终上下文却仍缺证据;重排或上下文选择才是直接修复点。检索相似度高只表示向量空间靠近,不等于段落事实正确、版本有效或用户有权阅读。

3.4 多轮问题、权限与版本

第一轮用户问“张三在哪个部门”,第二轮问“他的主管是谁”。直接用“他的主管是谁”检索,系统并不知道“他”指谁;把整段聊天原样当查询,又可能引入多余主题。较稳妥的做法是结合历史把当前检索查询改写为“张三的主管是谁”,同时保留原问题用于回答。改写只补全已知指代,不应擅自补出某位主管姓名。若历史里有两个人,先确认指代或同时保留候选,不能随便选一个。

权限与版本是检索的输入条件。某员工只能阅读公开制度,就应先限制可检索集合,再做召回与重排;无权片段即使最终答案没有引用,也不应进入模型上下文。制度更新时,要把新版本入库并使旧版本失效,且引用要带版本和生效日期。否则“检索分数最高”的旧条款可能给出形式流畅但事实过期的答案。权限过滤、版本选择和“不知道时明确说明”都属于可靠性设计,不是提示词修辞。

实际知识库还会有“同名不同版”“同一规则被通知临时修改”等冲突。此时不应让模型凭措辞自行判断哪份更权威;索引元数据要记录文件负责人、生效时间、废止状态与适用人群,并规定冲突处理顺序。更新文档后,要确认旧片段已从在线索引撤下,而非只把新片段追加进去。回答中的引用应能定位到具体文件或条款,便于人工复核。若证据互相矛盾且无明确优先级,系统应报告冲突并请求业务负责人确认。

3.5 从提问到回答:完整工作实例

场景:新人问“我还在试用期,明天病假,需要什么材料?”。知识库有《2026 员工请假办法》有效版、《2024 员工手册》旧版,以及仅人事可见的内部审批备注。系统先确认提问者权限,排除人事备注和失效旧版;解析后的有效条款写着“试用期员工病假,在返岗后两个工作日内提交医院诊断证明”。

处理:查询中保留“试用期、病假、材料”等条件;召回多个候选,重排后把包含适用人群和证明材料的完整片段置顶。生成时只依据该条款回答:“按现行办法,返岗后两个工作日内提交医院诊断证明”,并引用文件标题和版本。如果文档没有说明“明天是否须先联系主管”,就明确这部分未查到依据,不自行补充常识。

可核验点:召回片段是否同时包含“试用期”和“证明”;答案中的时间和材料能否逐项在片段中找到;有没有引用旧版或越权资料。任何一项失败,都能定位到对应环节。

3.6 四类评测指标分别在测什么

Context Recall(上下文召回)看作答所需的事实是否被检索资料覆盖。参考答案需要“材料”和“时限”两项,检索片段只含材料,则事实覆盖不足。Context Precision(上下文精度)看检索结果中相关片段是否集中、是否排在前面:相关片段排第 4,前 3 都无关,说明排序质量差,即使最终找到了答案。Faithfulness(忠实度)看生成答案里的断言是否能被给定片段支持;文档只说提交证明,回答却说“必须由三甲医院开具”,这项可能失败。Answer Correctness(答案正确性)比较最终答案与参考事实,属于端到端结果。不同框架的具体计算方法不同;做选择题时先辨识指标关注的阶段,不要把它们都理解成“答案好不好”。

一个可核验的小例子:金标准事实为“医院证明、返岗后两个工作日内提交”。检索到片段 A(医院证明)、片段 B(食堂营业时间),却漏掉时限:召回不足,且 B 带来噪声。若片段 C(完整条款)已排首位,而模型仍回答“返岗后三天内”,检索已具备证据,主要应查生成指令或模型遵循情况。自动评分也会误判,评测集应含真实问法、正确证据和人工复核。

评测样本最好保留“问题、有效参考文件、标准事实、允许的回答方式”四类信息,并覆盖同义改写、跨文档条件、过期制度、无权限请求和确实无答案的问题。否则系统可能只学会处理某一种提问模板。对于无答案问题,正确行为可能是说明未找到依据并转人工;自动评分若只奖励“写出一个答案”,反而会鼓励编造。改进一次切分或模型后,对同一组样本回归比较,才能判断整体收益是否超过新增的延迟和成本。

3.7 故障诊断与选择题判断

观察现象优先检查对应动作
正确文档未进入知识库来源、解析、更新流程补齐文档并重建索引,抽查关键字段
文档存在,正确片段未召回切分、查询改写、权限过滤、检索方式修复片段和查询,比较向量与关键词召回
正确片段在后面候选排序与上下文截断重排并衡量前列相关性
正确片段已送入模型,答案仍编造提示约束、生成模型、证据引用要求逐项有据可查,评测忠实度
回答引用旧版或越权材料版本和访问控制元数据检索前按身份和生效状态过滤

单选题:先找“第一处失败”。题干说召回列表已经有完整正确条款却答错,通常应选生成阶段的措施;题干说正确条款根本没入库,优先补知识库。多选题:逐项核查选项是否作用于真实故障点。切分和查询改写都可能改善召回;重排通常改善候选顺序;权限过滤能防越权,但不能直接修复模型对已给证据的曲解。出现“必然”“只要把全部文档塞入上下文”之类绝对说法,要用成本、噪声和权限约束反查。

遇到“提高召回率”与“提高精度”同时出现的选项,应先看题干到底是漏了正确片段,还是无关片段排在前面。前者关注覆盖,后者关注排序与噪声。一个措施也可能同时影响两者,但不能因为指标名称相似就混为一谈。

迁移到新场景:若题目把“病假制度”换成“每天变动的商品库存”“新发布的软件手册”或“用户可见范围不同的合同”,先不要背具体行业答案。按四步推导:① 所需事实是否在外部资料且会更新;② 正确资料有没有被解析、切分和建索引;③ 本次用户能否在权限与版本约束下检索到它;④ 模型的每条结论是否由实际送入的证据支持。步骤②失败修数据,③失败修查询或检索,④失败修生成与校验。这套因果顺序比记“RAG 适合问答”更能处理陌生选项。

官方依据:课程与考纲;2.2 RAG 流程与多轮检索;2.4 指标与诊断;2.5 检索优化。