RAG优化:文档塞得越多,RAG回答为什么反而越差? 召回阶段解决的是“资料有没有找到”上下文组装解决的是“模型最终看到了什么”。很多团队把前一个问题优化得很好却在最后一步把几十段互相重复、版本冲突的内容一起塞进 Prompt。很多 RAG 系统都有过这样的升级过程TopK3担心漏资料TopK10看起来更保险TopK30反正模型上下文够长结果却很奇怪Token 用得更多响应更慢答案反而开始漏条件、引用旧版本甚至把两个不同产品的规则拼在一起。问题不是大模型“装不下”。能塞进去与能稳定利用是两回事。上下文窗口是容量上限不是有效注意力的保证。一、更多上下文为什么会伤害答案假设用户问“企业版 4.2 如何关闭自动续费”检索结果里有企业版 4.2 自动续费关闭步骤个人版取消订阅流程企业版 3.8 续费规则退款政策支付失败排查自动续费功能介绍海外版订阅条款。这七段都与“续费”相关但真正回答问题的可能只有第一段。其余内容会带来几类噪声主题噪声同领域但不回答当前问题版本冲突旧规则与新规则同时出现实体冲突个人版、企业版、海外版混在一起重复信息相邻 Chunk 反复出现同一句话指令干扰文档中包含看起来像 Prompt 的文本位置问题关键证据埋在长上下文中间。生成模型不仅要找到正确句子还要判断哪些条件适用、哪些已经过期。上下文越杂这项工作越难。二、Lost in the Middle 到底是什么Lost in the Middle 常被翻译成“中间信息丢失”。它描述的是一种常见现象在很长的输入中模型对开头和结尾的信息利用得更稳定而对中间位置的重要信息可能不够敏感。它不是说模型完全看不到中间内容也不是所有模型、所有任务都呈现相同曲线。更准确的理解是信息位置会影响被使用的概率超长且充满噪声的上下文尤其明显。Lost in the Middle 位置效应RAG 中最危险的情况是正确证据虽然被召回却被十几段相似内容夹在中间。模型最后根据更靠前的旧规则或更靠后的通用总结作答。所以“正确文档在上下文里”只是必要条件不是充分条件。我们还要关心它放在哪里周围是否有冲突内容它是否包含完整条件模型是否能快速识别来源和边界。三、上下文压缩不是简单做摘要Contextual Compression 的目标是保留回答当前问题所需的证据删除无关和重复内容。它至少有四种层次。1. 文档级过滤先判断整个 Chunk 是否值得进入上下文。Rerank 后取 TopN 就属于这一层。优点是快、结构稳定缺点是一个 Chunk 可能只有两句话有用其余仍然占 Token。2. 句子级抽取从 Chunk 中抽取与问题直接相关的原句同时保留来源。原 Chunk共 600 字包含功能介绍、适用范围、操作步骤和注意事项压缩后保留“适用于企业版 4.2”及三条关闭步骤共 120 字抽取比自由摘要更适合需要引用和审计的场景因为证据仍是原文。3. 查询相关摘要对较长文档生成围绕当前问题的摘要。它能显著缩短上下文但可能遗漏限定条件或引入改写偏差。高风险业务中不建议只保留摘要而丢掉原文定位。至少保留document_id、页码、段落和被摘要的原始片段。4. 结构化压缩对表格、合同、API 文档等内容与其生成自然语言摘要不如抽取与问题相关的字段、行或章节。例如用户问某个型号的最大功率就从表格中保留表头、目标型号行和单位而不是把整张表转成一段散文。四、一条实用的上下文组装流水线推荐按下面顺序处理多路召回 ↓权限与版本过滤 ↓Rerank ↓按来源去重、合并相邻 Chunk ↓句子抽取或查询相关压缩 ↓冲突检测与顺序调整 ↓Token 预算内组装上下文第一步合并相邻 Chunk如果 Top 结果来自同一文档相邻位置可以先还原成更完整的段落避免重复标题和半句话。def merge_adjacent(chunks): chunks sorted( chunks, keylambda x: (x.metadata[document_id], x.metadata[start_offset]), ) merged [] for chunk in chunks: if not merged: merged.append(chunk) continue previous merged[-1] same_doc ( previous.metadata[document_id] chunk.metadata[document_id] ) close_enough ( chunk.metadata[start_offset] previous.metadata[end_offset] 100 ) if same_doc and close_enough: previous.page_content \n chunk.page_content previous.metadata[end_offset] chunk.metadata[end_offset] else: merged.append(chunk) return merged真实项目中不要原地修改缓存里的 Document可以复制后再合并。这里为了突出逻辑做了简化。第二步抽取证据而不是让模型重写答案给压缩模型的指令要非常克制根据用户问题从候选片段中原样抽取能够支持答案的句子。必须保留条件、否定、版本、单位和例外。不要回答问题不要补充片段中不存在的信息。如果片段不包含有效证据返回 EMPTY。输出最好结构化{ chunk_id: billing-guide-4.2#7, evidence: [ 企业版 4.2 管理员可在账单设置中关闭自动续费。, 关闭操作必须在下个计费周期开始前 24 小时完成。 ] }第三步按 Token 预算组装上下文不应该把模型窗口全部用满。还要给系统指令、历史对话、用户问题和答案预留空间。def select_with_budget(items, max_tokens, count_tokens): selected [] used 0 for item in items: size count_tokens(item[text]) if used size max_tokens: continue selected.append(item) used size return selected这里按 Rerank 后的优先级选取但还可以增加来源多样性和每篇文档上限避免一份资料独占整个上下文。五、证据应该按什么顺序放没有适用于所有模型的万能顺序但可以从三个原则出发。最强证据优先把最直接、版本最匹配、能完整回答问题的证据放在前面。不要让通用背景压过操作结论。冲突内容相邻如果必须保留新旧规则放在一起并清楚标注适用版本不要让它们散落在上下文两端。重要证据不要只放中间对特别关键的规则可以在上下文开头放证据摘要后面附原始片段和来源。注意摘要仍不能代替原文证据。一个清晰的上下文格式比单纯调位置更可靠[证据 1]来源企业版账单手册版本4.2状态当前有效内容……[证据 2]来源自动续费常见问题版本2026-06状态当前有效内容……六、压缩会不会把关键内容压没会而且这是上下文压缩最需要防的风险。尤其容易丢失“不”“禁止”“除非”等否定和例外数值、币种、单位、日期版本和地区限制表格的表头与脚注操作步骤之间的顺序引用来源。因此评测不能只看 Token 减少比例还要看“证据保真”。可以把压缩前的必需事实标出来计算压缩后保留了多少。Evidence Recall 压缩后保留的必需事实数 / 全部必需事实数同时观察上下文 Token 数Context Precision 与 Context Recall答案正确率和 Faithfulness引用正确率压缩模型增加的延迟和成本。一个方案把上下文从 8000 Token 压到 1500 Token却丢了有效期条件不能算优化成功。七、什么时候不要用 LLM 压缩候选本来就短且准确需要逐字引用的法规、合同条款表格结构比自然语言更重要延迟预算极紧压缩模型无法在本地合规部署还没有解决召回和权限问题。这时可以优先用确定性方法Metadata Filter、Rerank、相邻片段合并、按标题截取、正则抽取错误码、按表格行过滤。上下文压缩不是必选组件而是一种用额外计算换取更少噪声的手段。八、别凭感觉上线做一组上下文 A/B 实验准备同一批困难问题同时运行三组链路原始 TopK、只做确定性去重、去重后再做 LLM 压缩。三组使用相同生成模型和 Prompt避免把模型波动误认为压缩收益。实验需要回答四个问题证据是否还完整否定、条件、版本、数值、单位和原文定位有没有丢失答案是否真的变好不仅看简洁程度还要比较正确率、Faithfulness 和引用准确率资源是否值得记录上下文 Token、压缩延迟和单次请求成本哪些问题应该绕过压缩短问题、结构化查询和逐字引用场景是否直接走短链路更稳。只有当质量收益在固定评测集上持续存在并且超过新增延迟与成本压缩组件才值得进入默认链路。少给模型一点反而需要更多工程判断RAG 的目标不是把更多文字交给模型而是把更少、更准、更完整的证据交给模型。TopK 决定候选规模Rerank 调整优先级上下文压缩负责把噪声真正拿掉。学AI大模型的正确顺序千万不要搞错了2026年AI风口已来各行各业的AI渗透肉眼可见超多公司要么转型做AI相关产品要么高薪挖AI技术人才机遇直接摆在眼前有往AI方向发展或者本身有后端编程基础的朋友直接冲AI大模型应用开发转岗超合适就算暂时不打算转岗了解大模型、RAG、Prompt、Agent这些热门概念能上手做简单项目也绝对是求职加分王给大家整理了超全最新的AI大模型应用开发学习清单和资料手把手帮你快速入门学习路线:✅大模型基础认知—大模型核心原理、发展历程、主流模型GPT、文心一言等特点解析✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑✅开发基础能力—Python进阶、API接口调用、大模型开发框架LangChain等实操✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经以上6大模块看似清晰好上手实则每个部分都有扎实的核心内容需要吃透我把大模型的学习全流程已经整理好了抓住AI时代风口轻松解锁职业新可能希望大家都能把握机遇实现薪资/职业跃迁这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】