论文解读:检索与推理结合:动态上下文编辑用于长文本
1. 上下文工程
上下文工程并非简单的 “信息堆砌”,而是围绕 LLM 的 “理解能力边界”,解决五大核心问题:
- 信息筛选(选什么);
- 空间利用(放多少);
- 时序连贯(记多久);
- 场景适配(合不合);
- 目标对齐(对不对)。
最终实现 “以最小的上下文成本,最大化模型的任务效果”。其核心目标是:让 LLM 在 “有限的输入窗口” 内,获得 “足够精准、连贯、适配的信息”,从而输出符合预期的结果。
在生产级AI系统落地过程中,真正的限制因素并非模型的智能水平,而是上下文管理能力。随着对话持续延申、任务跨多个会话推进,以及智能代理需要基于数周的交互历史完成推理。AI工程的核心挑战已从: 选择模型,转变为:如何避免系统被自身上下文数据淹没。
当前大型语言模型(LLM)由于预定义的上下文长度,面临固有局限,这限制了它们在大量文本上下文中进行多跳推理的能力。虽然现有技术如检索增强生成(RAG)尝试通过外部信息来弥合这一差距,但当缺乏直接答案时,效果有限。
2. 检索与推理结合:动态上下文编辑用于长文本
论文《Retrieval Meets Reasoning: Dynamic In-Context Editing for Long-Text Understanding》(检索与推理结合:动态上下文编辑用于长文本),主要解决当前大语言模型(LLM)因上下文窗口限制而难以在长文本中进行多跳推理(multi-hop reasoning)的问题。

- 图片内容解读:
将复杂问题分解为多个简单的子问题,并分步进行推理。具体步骤:
- 分段处理:由于文本非常长,首先将其分割成多个“文本块”,以便于管理。
- 交互式生成子问题:模型不直接回答最终问题,而是先生成一个子问题:“谁是 Serriadh 的母亲?”
- 提取事实:模型在文本块中查找并提取出事实:“Elfarran 是 Serriadh 的母亲。”
- 规划下一步:基于上一步的事实,模型生成下一个子问题:“谁是 Elfarran 的兄弟?”
- 最终答案:通过检索增强生成(RAG)或直接查询,得到最终事实:“Salan 是 Elfarran 的兄弟。” 从而推理出 Serriadh 的叔叔是 Salan。
2.1. 核心观点
-
重新定义长文本推理:
论文提出将长文本上下文视为一种可交互的外部知识库,而非必须一次性全部输入模型的静态序列。长文本上的多跳推理问题本质上等同于涉及多跳推理的知识编辑(Knowledge Editing)问题。 -
动态上下文编辑(Dynamic In-Context Editing):
受知识编辑技术的启发,作者提出了一种新方法,通过动态地分解问题并交互式地检索和整合相关信息,使上下文受限的模型(如Llama2)能够执行复杂的多步推理。这种方法不需要修改模型参数或进行昂贵的微调。 -
超越传统方法:
- 优于直接扩展上下文窗口:传统的窗口扩展方法(如位置插值)在处理极长文本的多跳推理时仍会出现幻觉或准确率下降。
- 优于传统RAG:传统的检索增强生成(RAG)通常直接根据原始问题检索,难以获取推理过程中所需的中间变量信息,导致无法回答隐含的多跳问题。
- 性能表现:该方法在长文本多跳问答任务(LongBench)和变量追踪任务(Ruler)上,不仅显著优于现有的上下文扩展方法和传统RAG,甚至在某些任务上超越了拥有更大上下文窗口的商业模型(如GPT-3.5-Turbo-16k)。
-
轻量级与即插即用:
该方法是一种轻量级的解决方案,无需额外的参数更新或显存消耗,可在单张GPU上运行,并能轻松集成到现有的黑盒API或基于插值的扩展方法中。
2.2. 实现流程
该方法主要包含两个核心模块:规划模块(Planning Module)和检索模块(Retrieval Module),并通过两种具体的算法来实现。
2.2.1. 核心模块
-
规划模块(Planning):
- 功能:利用LLM的推理能力,将复杂的多跳问题 分解为一系列子问题(sub-questions)。
- 机制:这些子问题构成一个有向无环图(Directed Acyclic Graph DAG)或链式结构。模型根据原始问题和前一步的答案生成下一个子问题。
- 目的:解决信息分散在长文本不同位置的问题,通过分步拆解来逐步获取所需知识。
-
检索模块(Retrieval):
- 功能:针对生成的每个子问题 ,从被切分成块(chunks)的长文本中检索最相关的片段。
- 机制:
- 将长文本 切分为多个长度小于模型上下文窗口 的块 。
- 使用语义相似度模型(如bi-encoder进行粗排,cross-encoder进行精排)计算子问题与各文本块的相似度。
- 选取Top-k个最相关的文本块,并按原文顺序拼接成上下文 。
2.2.2. 具体算法实现
论文提出了两种基于上述模块的算法:
2.2.2.1. **算法一:带事实提取的迭代问答 **(Iterative QA with Fact Extraction)
- 流程:
- 初始化:将原始问题作为初始推理思维 。
- 循环迭代:
- 规划:LLM根据当前思维 生成下一个子问题 。
- 检索:检索模块找到与 最相关的文本块 。
- 事实提取:LLM阅读 ,提取能回答 的具体事实 (去除噪声)。
- 更新:将子问题 和提取的事实 添加到推理思维 中。
- 终止:当LLM判断推理完成或达到最大迭代次数时,基于最终的 生成答案。
- 特点:显式地将检索到的上下文转化为简洁的事实,减少上下文窗口的占用,适合链式推理。

2.2.2.2. **算法二:知识约束解码 **(Knowledge Constrained Decoding)
- 流程:
- 规划:LLM先生成完整的推理步骤序列(Thoughts)。
- 约束修正:
- 对于生成的每一步推理,检索模块获取相关上下文。
- 利用检索到的知识对生成的步骤进行“约束解码”或直接修正。如果生成的步骤与检索到的事实冲突,则以检索到的事实为准进行更新。
- 生成:最终输出经过上下文知识修正后的连贯推理过程和答案。
- 特点:受知识编辑中的约束解码启发,确保生成的推理步骤严格忠实于原始长文本中的知识,实验表明该方法通常比算法一表现更好。

2.2.3. 整体工作流总结
- 输入:长文本 (被切分) + 复杂问题 。
- 分解:模型将 分解为子问题序列。
- 交互循环:
- 针对子问题检索相关文本块。
- 利用检索内容更新推理状态(提取事实或修正步骤)。
- 输出:综合所有中间步骤,得出最终答案。
通过这种“检索+推理”的动态闭环,模型能够在不突破自身上下文窗口限制的情况下,有效处理数百万token级别的长文本多跳推理任务。

2.3. 策略 A(迭代事实提取)与 策略 B(知识约束解码)
以下是关于 策略 A(迭代事实提取) 与 策略 B(知识约束解码) 的详细对比总结表:
| 对比分类 | 对比维度 | 策略 A:迭代事实提取 (Iterative QA) | 策略 B:知识约束解码 (Knowledge Constrained Decoding) |
|---|---|---|---|
| 核心逻辑 | 思维模式 | **“步步为营” (Step-by-Step)**走一步看一步。每生成一个子问题,立即检索并提取事实,将事实作为新条件加入上下文,再决定下一步。 | **“先拟后改” (Draft-and-Refine)**先基于模型内部知识生成完整的推理草稿,然后针对每一步去检索原文进行“校对”和“修正”。 |
| 推理流向 | 强串行依赖第 步严格依赖第 步提取的事实。若中间出错,后续步骤会连锁失效(误差传播)。 | 全局规划 + 局部修正先生成全局推理路径,再逐个节点用外部知识约束。具有一定的全局视野和回溯能力。 | |
| 交互机制 | 检索驱动推理检索到的内容直接决定下一步问什么。 | 推理驱动检索,检索修正推理推理步骤指导检索方向,检索结果反过来强制修正推理步骤。 | |
| 信息管理 | 处理方式 | 显式压缩将长篇检索片段压缩为简洁的事实陈述 (Facts)。 | 动态约束保留完整推理链,利用检索知识作为硬约束或软引导,冲突时强制替换。 |
| 上下文占用 | 极低 仅存储提取后的关键句/短语,极度节省窗口空间。 | 中等需维护推理状态和相关检索片段,对窗口利用率有一定要求。 | |
| 噪声控制 | 主动过滤通过“提取”动作主动去除检索块中的无关噪声。 | 依赖判别依赖模型在“修正”阶段辨别检索内容真伪的能力。 | |
| 优劣分析 | 核心优势 | 1. 节省资源:适合极小上下文窗口(<2k)。2. 可解释性强:每一步的“问题 - 事实”对清晰可见。3. 实现简单:逻辑直观,易于工程落地。 | 1. 抗幻觉强:强制忠实于原文,显著减少胡编乱造。2. 全局一致:保持逻辑连贯性,避免片面。3. 准确率高:论文实验显示其性能通常优于策略 A。 |
| 主要劣势 | 1. 误差传播:一步错步步错,难以自我修正。2. 缺乏全局观:易陷入局部细节,难处理复杂网状逻辑。3. 延迟高:必须严格串行执行,无法并行。 | 1. 实现复杂:需设计自定义解码算法干预生成过程。2. 修正风险:若初步推理偏离过大,简单修正可能失效。3. 资源需求:比策略 A 稍高。 | |
| 场景建议 | 最佳适用 | 1. 资源受限:移动端/边缘设备,显存/窗口极小。2. 线性流程:行政核查、保险理赔等链式依赖任务。3. 高审计需求:需要清晰日志供人工复核的金融/法律场景。4. 结构化查询:实体关系明确的短链条问答。 | 1. 高准确度要求:医疗诊断、法律咨询等容错率低的场景。2. 复杂逻辑:侦探推理、多文档综合对比、观点演化分析。3. 代码/技术调试:需严格依据源码,防止幻觉的场景。4. 通用长文本:大多数 LongBench/Ruler 基准测试任务。 |
| 避坑指南 | 1. 需要综合全文观点的复杂综述。2. 逻辑网状交织、需频繁回溯的任务。3. 第一步错误会导致灾难性后果的关键决策。 | 1. 硬件资源极度匮乏的环境。2. 极简的单点查找任务(杀鸡用牛刀)。 | |
| 总结定位 | 最终结论 | 轻量级替代方案仅在资源极其受限或需要极致单步可解释性时使用。 | 首选高性能方案论文实验表明其在绝大多数任务上准确率更高,是解决长文本多跳推理的推荐默认方案。 |
2.4. 举例
为了更直观地理解策略 A(迭代事实提取)和策略 B(知识约束解码)的区别,设定一个具体的长文本多跳推理任务,并模拟两种方法在解决该问题时的完整执行过程。
2.4.1. 场景设定
背景文档:一份长达 50 页的《2025 年全球科技公司并购与研发报告》(包含大量分散的子公司信息、研发项目细节和时间线)。
用户问题:
“收购了‘量子视界 (QuantumVision)’公司的母公司,其总部所在的城市,目前是否正在运行由该公司主导的‘深空探测’项目?”
这是一个典型的3 跳推理问题:
- 跳 1:谁收购了“量子视界”? -> 找到母公司(假设是“星际科技”)。
- 跳 2:“星际科技”的总部在哪里? -> 找到城市(假设是“新加坡”)。
- 跳 3:在“新加坡”,是否有“量子视界”主导的“深空探测”项目在运行? -> 验证事实并回答 Yes/No。
2.4.2. 策略 A:迭代事实提取 (Iterative QA with Fact Extraction)
核心逻辑:问一步 -> 检索 -> 提取事实 -> 存入上下文 -> 再问下一步。
特点:像侦探一样,手里拿着笔记本,每找到一个线索就记下来,然后基于这个线索去查下一个。
2.4.2.1. 执行过程演示
| 步骤 | 模型动作 (Model Action) | 检索系统 (Retriever) | 事实提取与上下文更新 (Fact Extraction & Context Update) |
|---|---|---|---|
| 初始状态 | 输入问题:“收购了‘量子视界’的母公司是谁?” | 检索:在 50 页报告中搜索关键词“量子视界”、“收购”。 返回片段:第 12 页提到“2024 年,星际科技 (StellarTech) 完成了对量子视界的全资收购…” |
提取事实:Fact 1: 星际科技 (StellarTech) 收购了量子视界。更新上下文:[原问题] + [Fact 1] |
| 第 2 步 | 生成新问题:基于 Fact 1,模型生成:“星际科技 (StellarTech) 的总部在哪个城市?” |
检索:搜索“星际科技”、“总部”、“Headquarters”。 返回片段:第 3 页公司简介:“星际科技全球总部位于新加坡…” |
提取事实:Fact 2: 星际科技的总部位于新加坡。更新上下文:[原问题] + [Fact 1] + [Fact 2] |
| 第 3 步 | 生成新问题:基于 Fact 2,模型生成:“在新加坡,是否有由量子视界主导的‘深空探测’项目在运行?” |
检索:搜索“新加坡”、“深空探测”、“量子视界”、“项目”。 返回片段:第 45 页项目列表:“…‘深空探测’项目主要由量子视界团队负责,但其主要测试基地位于智利,新加坡办公室仅负责行政…” |
提取事实:Fact 3: 深空探测项目由量子视界负责,但运行基地在智利,新加坡仅负责行政。更新上下文:[原问题] + [Fact 1] + [Fact 2] + [Fact 3] |
| 最终回答 | 综合生成:基于收集到的 Fact 1, 2, 3,模型生成最终答案:“收购方是星际科技,总部在新加坡。但深空探测项目主要在智利运行,新加坡仅负责行政。因此,该城市目前没有运行该项目(仅负责行政)。” |
- | - |
关键点:每一步的输入都严格依赖上一步提取的
Fact。如果第 1 步提取错了(比如把“战略合作”误提为“收购”),后面全错。
2.4.3. 策略 B:知识约束解码 (Knowledge Constrained Decoding)
核心逻辑:生成完整推理草稿 -> 逐步校验/修正 -> 输出最终结果。
特点:像写论文先列大纲,然后拿着原文逐句核对大纲里的每一个论点,不对就改,最后定稿。
2.4.3.1. 执行过程演示
| 步骤 | 模型动作 (Model Action) | 检索与约束机制 (Retrieval & Constraint) | 动态修正过程 (Dynamic Editing) |
|---|---|---|---|
| 阶段 1:全局规划 | 生成推理草稿(Draft)模型不检索,先利用内部知识或快速浏览生成一个完整的思维链:“首先,量子视界被星际科技收购。其次,星际科技总部在新加坡。最后,深空探测项目是他们的核心项目,应该在新加坡总部运行。所以答案是 Yes。” | - | 注意:此时最后一步结论(在新加坡运行)是模型的猜测/幻觉,尚未验证。 |
| 阶段 2:逐步校验与修正 | 节点 1 校验:检查草稿第一步:“量子视界被星际科技收购”。 检索验证:搜“量子视界 收购”。 结果:原文匹配。-> 保留。 |
检索片段确认事实一致。 | 无需修改。 |
| 节点 2 校验:检查草稿第二步:“星际科技总部在新加坡”。 检索验证:搜“星际科技 总部”。 结果:原文匹配。-> 保留。 |
检索片段确认事实一致。 | 无需修改。 | |
| 节点 3 校验(关键转折):检查草稿第三步:“深空探测项目在新加坡运行”。 检索验证:搜“深空探测 地点”、“量子视界 新加坡”。 冲突发现:原文显示“测试基地在智利,新加坡仅行政”。 触发约束:解码器检测到生成内容与检索事实冲突。 |
检索片段与生成内容严重不符。 | 强制修正(Editing):系统拦截原本要生成的“是的,在运行”,强制替换为检索到的事实描述:“修正为:项目实际运行地在智利,新加坡仅负责行政。” | |
| 阶段 3:最终生成 | 基于修正后的链条输出:模型根据被修正过的逻辑链生成最终答案:“虽然收购方是星际科技且总部在新加坡,但经核实,深空探测项目的实际运行地在智利,新加坡仅承担行政职能。因此,该城市目前没有运行该项目。” | - | 最终输出严格忠实于原文,消除了草稿中的幻觉。 |
关键点:模型先生成了一个包含错误假设的完整路径,但在解码过程中,通过实时检索对比,在第三步强行“掰回”了正确的逻辑。它拥有全局视野,知道自己在论证什么,并能自我纠错。
2.4.4. 两种过程的直观对比
| 特征 | **策略 A **(迭代事实提取) | **策略 B **(知识约束解码) |
|---|---|---|
| 执行流 | 问1 → 找1 → 记1 → 问2 → 找2 → 记2 … |
想全套 → 查1(对) → 查2(对) → 查3(错->改) → 输出 |
| 错误处理 | 无法自救:如果 问1 的方向错了,后面全歪。 |
自我修正:即使 想全套 时猜错了,也能在 查3 时通过约束机制强行修正。 |
| 上下文状态 | 上下文里全是精简的事实短句 (Fact 1, Fact 2…)。 |
上下文里维护着完整的推理逻辑链,并在生成过程中动态修改节点。 |
| 给人的感觉 | 像一个严谨的办事员,按部就班填表格。 | 像一个经验丰富的分析师,先出草案,再拿数据核对修改。 |
- 点赞
- 收藏
- 关注作者
评论(0)