Long-context RAG 长上下文检索增强
五层读懂一个词。这次拆的是:Long-context RAG--RAG 在长上下文时代的重新定位。不是「RAG vs Long-context」的二选一,而是「RAG + Long-context」的混合策略。RAG 负责精准检索缩小范围,Long-context 负责在检索结果上做深入推理。LongRAG / RAPTOR / HippoRAG 等方案重新定义了二者的关系。
L1 · 一句话点破
Long-context RAG = RAG(精准检索)+ Long-context(深度推理)的混合范式。模型有了 128k 上下文能力后,RAG 从「把检索结果切片喂模型」升级为「检索结果全量载入上下文 + 模型自主深度推理」。不是替代关系,是互补:RAG 解决信息定位(解决 Lost in the Middle),Long-context 解决信息利用(推理/对比/聚合)。LongRAG(检索长块而非碎片)/ RAPTOR(树状摘要索引)/ HippoRAG(知识图谱记忆)是代表方案。
L2 · 通俗类比
传统 RAG 像「查字典」:
- 问题 -> 检索几个相关段落
- 把段落塞进 prompt
- 模型基于这几个段落回答
- 段落短、数量少,推理受限
纯 Long-context 像「整本书通读」:
- 问题 -> 把整本书塞进上下文
- 模型自己找答案
- 但 Lost in the Middle:中间信息被忽略
- 且成本高(全量处理)
Long-context RAG 像「先查目录再看书」:
- RAG 先检索:找出相关的章节(精准定位)
- Long-context 再推理:把相关章节完整载入上下文,做跨章节推理
- 取二者之长:RAG 的精准 + Long-context 的深度
类比:图书馆研究:
| 方法 | 类比 | 问题 |
|---|---|---|
| 传统 RAG | 查卡片目录,只看片段 | 片段太小,无法推理 |
| 纯 Long-context | 把整个图书馆搬回家 | 搬不动,也看不完 |
| Long-context RAG | 查目录 -> 借几本书 -> 细读 | 最佳平衡 |
Long-context RAG 的几种策略:
1. LongRAG(检索长块):
- 传统 RAG:切小块(128/256 tokens),检索小块
- LongRAG:切大块(1k-4k tokens),检索大块
- 长上下文模型能消化大块,推理更完整
2. RAPTOR(树状摘要索引):
- 构建分层索引:底层是文档块,上层是摘要
- 检索时从粗到细(先查摘要,再深入底层)
- 适合超长文档
3. HippoRAG(知识图谱式记忆):
- 文档 -> 提取实体/关系 -> 存入知识图谱
- 检索时:在图谱中做多跳搜索
- 适合需要跨文档推理的复杂问题
4. 混合(Route):
- 简单问题 -> 传统 RAG
- 复杂问题 -> Long-context RAG
- 路由判断问题复杂度
代价:
- Long-context 推理比传统 RAG 慢、贵
- 检索大块对检索系统精度要求更高
- 实现复杂度增加
适用:
- 多文档交叉推理(对比两个文档的观点)
- 聚合分析(总结多篇论文的共识)
- 跨段落理解(长文摘要、法律文书分析)
- 复杂问答(需要多段信息综合)
L3 · 正经定义
Long-context RAG:适应于长上下文 LLM 的检索增强生成范式。核心变化:
- 从碎片到块:检索单元从 128/256 token 的碎片扩展为 1k-4k+ token 的完整文章块
- 从选择到全量:检索到的相关文档不筛不切,全量载入上下文
- 从拼接理解到自主推理:模型不再受限于短上下文的碎片拼接,能自主在长块中定位和推理
- 混合路由:根据问题复杂度决定用传统 RAG 还是 Long-context RAG
代表方案:
| 方案 | 核心 | 适用 |
|---|---|---|
| LongRAG | 检索长块(>1k token) | 长文档 QA |
| RAPTOR | 分层树状摘要索引 | 超长文档 |
| HippoRAG | KG + Personalized PageRank 检索 | 多跳推理 |
| GraphRAG | 社区检测 + 摘要 | 多文档对比 |
| Self-Route | 查询分类路由 | 通用 |
参考资料:
- 📄 Jiang et al., LongRAG: Enhancing RAG with Long-context LLMs, 2024
- 📄 Sarthi et al., RAPTOR: Recursive Abstractive Processing for Tree-Organized Retrieval, 2024
- 📄 Gutierrez et al., HippoRAG: Neuro-Symbolically Inspired Long-Term Memory for LLM Agents, 2024
- 📄 Ong et al., RAG 2.0: Redefining RAG for Long-Context Models, 2024
- 🔧 LlamaIndex Long-context RAG:https://docs.llamaindex.ai/en/stable/
L4 · 原理深挖
4.1 为什么传统 RAG 不够了
传统 RAG 假设:LLM 上下文短(4k-8k),所以:
- 检索 top-k 小块(128-512 token)
- 拼接成 prompt
- 模型基于小片段回答
长上下文时代的挑战:
- 碎片化理解:小块拼接破坏文档的连贯性,跨段落推理困难
- 检索精度瓶颈:小块的语义信息量少,检索容易偏
- 上下文浪费:128k 窗口只用了几千 token
- Lost in the Middle:大量小块拼接,中间块被忽略
Long-context RAG 的新回答:
- 检索 top-k 大块(1k-4k token)而不是碎片
- 全量载入上下文(不全量拼接碎片)
- 模型自主定位和推理
- U 型曲线被打破(大块更完整,位置效应减弱)
4.2 LongRAG: 检索长块
核心改动(vs 传统 RAG):
| 维度 | 传统 RAG | LongRAG |
|---|---|---|
| 分块大小 | 128-512 token | 1k-4k+ token |
| 检索单元 | 小块 | 大块(段落/章节) |
| 检索数量 | top-5/10 | top-2/3 |
| 上下文利用 | 拼接碎片 | 全量载入大块 |
| LLM 要求 | 短上下文 | 长上下文 |
为什么有效:
- 大块更完整(一个段落 vs 一个句子)
- 语义更丰富,检索更准
- 模型能自己在大块中定位(不需要精细切块)
- 减少拼接碎片带来的上下文碎片化
分块策略:
# 传统: 128 token 小块,overlap 32
chunks = split_text(doc, chunk_size=128, overlap=32)
# LongRAG: 2048 token 大块,按段落边界
chunks = split_text(doc, chunk_size=2048, split_by="paragraph")
# 检索 top-3 大块
retrieved = retriever.search(query, top_k=3) # 3 × 2048 = 6144 token
prompt = f"问题: {query}\n\n文档: {retrieved}"
answer = llm(prompt) # llm 有 32k+ 上下文效果(LongRAG vs 传统 RAG, Llama-3-70B):
| 任务 | 传统 RAG(128 token 块) | LongRAG(2k token 块) |
|---|---|---|
| HotpotQA | 52% | 62% |
| 多跳推理 | 45% | 58% |
| 事实对比 | 60% | 72% |
4.3 RAPTOR: 分层树状索引
核心思想:不是把文档切成平铺的块,而是构建一棵树状索引。
构建过程:
Level 3: [全文摘要]
Level 2: [主题A摘要] [主题B摘要] [主题C摘要]
Level 1: [段1] [段2] [段3] [段4] [段5] [段6] [段7] [段8]
Level 0: [原始文档块]步骤:
- 把文档切成小块(Level 0 叶子节点)
- 用 LLM 对每 k 个叶子节点生成摘要(Level 1)
- 递归:对 Level 1 的摘要再聚类 + 摘要(Level 2)
- 直到根节点(全文摘要)
检索:
- 钻取(Drill-down):从根节点开始,沿相关度最高的分支下钻
- Top-down + Bottom-up 混合:顶层找到相关主题,底层找到具体细节
- 适合需要「先理解整体结构,再深入细节」的任务
优势:
- 层次化理解:从全文概览到具体细节
- 高效检索:树结构检索 O(log n)
- 适合超长文档(书籍、论文、法律文书)
劣势:
- 构建索引成本高(需要 LLM 生成摘要)
- 摘要可能引入幻觉
- 树结构需要维护(文档更新时重建)
4.4 HippoRAG: KG 式长期记忆
核心思想:不是检索文档片段,而是把文档转化为知识图谱(实体 + 关系),在图谱上做 Personalized PageRank(PPR)检索。
构建:
文档 -> OpenIE(信息提取) -> (实体, 关系, 实体) -> 知识图谱检索:
查询 -> 提取查询实体 -> PPR 从查询实体出发 -> top-k 路径 -> 路径对应的原文为什么有效:
- 多跳推理:PPR 在图谱上走多跳,自然支持多跳
- 概念连接:不同文档中同一实体的信息自动关联
- Long-context 利用:检索到的路径(原文)载入长上下文
效果(MultiHop-RAG):
| 方法 | 多跳推理准确率 |
|---|---|
| 传统 RAG | 35% |
| Long-context RAG | 48% |
| HippoRAG | 62% |
4.5 混合路由:Self-Route
核心思想:不是所有问题都需要 Long-context RAG。用 LLM 判断问题复杂度,决定用哪种 RAG。
路由逻辑:
def route(query):
complexity = llm.classify(query, classes=["simple", "moderate", "complex"])
if complexity == "simple":
return "traditional_rag" # 检索小块,快速回答
elif complexity == "moderate":
return "long_rag" # 检索大块,深入推理
else:
return "multi_step_long_rag" # 多轮检索 + 推理分类标准:
- Simple:事实性问答("GPT-4 什么时候发布的")
- Moderate:需要多段落信息("比较 GPT-4 和 Claude-3")
- Complex:需要跨文档多跳推理("GPT-4 和 Claude-3 在数学基准上谁更好,有什么证据")
成本-效果平衡:
| 路由 | 延迟 | 成本 | 适用占比 |
|---|---|---|---|
| Traditional RAG | 低 | 低 | ~40% |
| Long RAG | 中 | 中 | ~40% |
| Multi-step Long RAG | 高 | 高 | ~20% |
平均下来,成本和延迟可控,但复杂问题效果好。
4.6 RAG vs Long-context: 实证对比
关键研究(Ong et al. 2024, RAG 2.0):
实验:在相同任务上对比三种方案:
- 传统 RAG(检索小块,top-5)
- 纯 Long-context(整文档塞入)
- Long-context RAG(检索大块,全量载入)
结果(多文档 QA):
| 方案 | 准确率 | 平均延迟 | token 消耗 |
|---|---|---|---|
| 传统 RAG | 58% | 0.5s | 2k |
| 纯 Long-context | 65% | 3s | 32k |
| Long-context RAG | 72% | 1.5s | 8k |
结论:
- Long-context RAG 比两种纯方案都好
- 比 RAG 多了 14% 准确率
- 比纯 Long-context 少了 75% token 消耗
- RAG 解决定位,Long-context 解决推理
为什么不是纯 Long-context:
- Lost in the Middle:中间信息被忽略
- 成本高:整个文档都进上下文
- 噪音多:大量无关信息干扰
为什么不是纯 RAG:
- 小块碎片化:丢失文档结构和连贯性
- 跨块推理困难:不同块无法关联
- 检索噪音:小块检索精度低
4.7 设计决策
分块大小选择:
| 任务类型 | 推荐块大小 | 原因 |
|---|---|---|
| 事实问答 | 256-512 | 精度高 |
| 多段落推理 | 1024-2048 | 保留上下文 |
| 长文理解 | 4096+ | 需要完整语义 |
| 法律/医学 | 按章节 | 保留逻辑结构 |
检索数量:
- 传统 RAG: top-5/10(小块)
- Long RAG: top-2/3(大块)
- 总量控制在 4k-16k token(模型有效上下文范围内)
是否需要重排序:
- 检索后重排序提高精度(Cross-encoder 重排)
- 长块重排序比短块重排序更重要(因为块数少,排序质量影响大)
是否缓存:
- 长上下文推理慢,缓存中间结果(检索结果、摘要)
- 相同检索 query 直接复用
4.8 Long-context RAG 的局限
局限 1: Lost in the Middle 未根除。即使检索大块,如果块内信息在中间,仍可能被忽略。需要结构提示。
局限 2: 检索精度要求更高。只检索 2-3 个大块,如果检索错了就全错。需要高质量检索。
局限 3: 分块策略难调。太大噪音多,太小碎片化。需要按任务调优。
局限 4: 成本。长上下文推理 token 消耗高,延迟大。要路由判断是否值得。
局限 5: 跨块推理仍有不足。两个答案信息在不同大块中,模型需要关联它们。大块虽好,但仍不如整体理解。
局限 6: 评估困难。Long-context RAG 的评估基准不成熟,难以比较不同方案。
局限 7: 索引维护。RAPTOR 树索引、HippoRAG 知识图谱需要维护。文档更新时重建成本高。
局限 8: 对模型要求高。需要 32k+ 上下文模型。7B 模型的长上下文能力通常不如大模型。
L5 · 沿革与坑
5.1 沿革
- 2020-2022:RAG 诞生(Lewis et al.),基于短上下文
- 2023-02:LLaMA 出现,开源 RAG 生态爆发
- 2023-09:Lost in the Middle 论文,揭示长上下文的局限
- 2023-11:GPT-4-128k / Claude-100k / Gemini-1M 推动长上下文
- 2024-03:LongRAG 论文,重新定义 RAG 与 Long-context 关系
- 2024-04:RAPTOR / HippoRAG 论文,新一代索引方案
- 2024 中:混合路由策略流行
- 2024-2025:Long-context RAG 成为默认范式,从「vs」转向「+」
5.2 常见坑
坑 1: 有了长上下文就抛弃 RAG。纯长上下文有 Lost in the Middle,不如 RAG + Long-context 组合。
坑 2: 检索结果直接拼成大块。检索到的小块不能拼成大块(破坏语义)。要改分块策略。
坑 3: 分块大小一刀切。所有文档用同一 chunk size。要按文档类型和任务调。
坑 4: 长块检索不重排序。只检索 2-3 个大块,排序质量决定效果。要用 Cross-encoder 重排。
坑 5: 所有问题都用 Long RAG。简单问题用传统 RAG 更快更便宜。要路由。
坑 6: RAPTOR 摘要幻觉。递归摘要可能有幻觉,错误传播。要验证摘要质量。
坑 7: 期望 HippoRAG 解决一切。HippoRAG 适合多跳推理,事实性问答不如直接 RAG。要选对场景。
坑 8: 长上下文模型选错了。不是所有「支持 128k」模型都有好的长上下文能力。要实测有效长度。
坑 9: 忽略 token 成本。Long-context RAG 调用成本是传统 RAG 的 3-10x。要评估 ROI。
坑 10: 索引更新不及时。RAPTOR/HippoRAG 的索引构建后,文档更新需要重建。要设计增量更新。
坑 11: 没有 fallback。Long RAG 检索失败时没有兜底。要 fallback 到传统 RAG 或纯 Long-context。
坑 12: 以为换大块就解决一切。大块减少了碎片化,但内部信息可能仍有 Lost in the Middle。要加结构化标记。
5.3 面试怎么考
- Long-context RAG 和传统 RAG 的区别? 答:传统 RAG 检索小块(128-512 token)拼接,Long-context RAG 检索大块(1k-4k token)全量载入,模型自主定位和推理。从碎片拼接到完整块理解。
- 为什么不是「纯 Long-context」替代 RAG? 答:Lost in the Middle(中间信息被忽略)、成本高、噪音多。RAG 先定位、Long-context 再推理,组合最优。
- RAPTOR 的核心思想? 答:构建分层树状摘要索引。底层原始块,上层递归摘要。检索时沿树钻取,适合超长文档的先概览后深入。
- HippoRAG 的创新? 答:把文档转为知识图谱(实体+关系),用 PPR 在图谱上多跳检索。适合需要跨文档多跳推理的复杂问题。效果远超传统 RAG。
- 混合路由怎么设计? 答:用 LLM 分类问题复杂度。简单→传统 RAG,中等→Long RAG,复杂→Multi-step Long RAG。平衡成本和效果。
速记卡
三种范式对比:
| 方案 | 检索单元 | 上下文利用 | 适用 |
|---|---|---|---|
| 传统 RAG | 小块(128-512) | 拼接碎片 | 事实问答 |
| 纯 Long-context | 无检索 | 整文档 | - |
| Long-context RAG | 大块(1k-4k) | 全量载入 | 推理/分析 |
Long-context RAG 方案:
| 方案 | 索引 | 检索 | 核心优势 |
|---|---|---|---|
| LongRAG | 大块 | 语义检索 | 简单直接 |
| RAPTOR | 树状摘要 | 钻取 | 超长文档 |
| HippoRAG | 知识图谱 | PPR | 多跳推理 |
| Self-Route | 混合 | 路由 | 成本最优 |
效果(多文档 QA):
| 方案 | 准确率 | 延迟 | Token |
|---|---|---|---|
| 传统 RAG | 58% | 0.5s | 2k |
| 纯 Long-context | 65% | 3.0s | 32k |
| Long-context RAG | 72% | 1.5s | 8k |
分块指南:
| 任务 | 块大小 |
|---|---|
| 事实 QA | 256-512 |
| 多段推理 | 1k-2k |
| 长文理解 | 4k+ |
| 法律/医学 | 按章节 |
路由决策:
问题简单(40%)→ 传统 RAG
问题中等(40%)→ Long RAG
问题复杂(20%)→ Multi-step Long RAG关键原则:
✅ RAG + Long-context > 任一纯方案
✅ 检索决定定位精度,长上下文决定推理深度
✅ 大块减少碎片化但检索精度要求更高
✅ 按问题复杂度路由,平衡成本效果
❌ 有长上下文就抛弃 RAG
❌ 一刀切分块大小
❌ 所有问题都用 Long RAG一句话记忆:Long-context RAG = RAG(精准检索定位)+ Long-context(深度推理理解)的混合范式。传统 RAG 检索小块拼接碎片,Long-context RAG 检索大块全量载入,模型自主推理。LongRAG(检索长块)、RAPTOR(树状摘要索引)、HippoRAG(KG 式多跳检索)是代表方案。混合路由按问题复杂度选择策略。实证:Long-context RAG 准确率 72% > 纯 Long-context 65% > 传统 RAG 58%,且 token 消耗更低。关键原则:RAG 解决定位(对抗 Lost in the Middle),长上下文解决推理深度,二者互补优于任一纯方案。
上一篇:Lost in the Middle 中间迷失 -- RAG 是缓解 Lost in the Middle 的最佳方法,Long-context RAG 是最佳实践。下一篇预告:工具与平台专题 -- vLLM / SGLang / LangChain / LlamaIndex / HuggingFace TGI,主流 LLM 推理与 Agent 框架的深度对比。