首页/AI/RAG 与向量库速查/长文档的 Map-Reduce 生成

长文档的 Map-Reduce 生成

单篇文档超长时用 Map-Reduce 式处理:先对每个片段分别生成要点(Map),再汇总要点作答(Reduce);适合摘要类与全文档问答,代价是调用次数增加。

RAG 与向量库速查AI更新于 2026-10-13

长文档 Map-Reduce 是什么

当单篇文档超出模型上下文窗口时,用 Map-Reduce 式两阶段处理:Map 阶段把文档切成片段,逐片生成要点或局部答案;Reduce 阶段把所有局部结果合并成最终答案。它适合整篇摘要、答案分散在多章、需要全局视角的问题。代价是模型调用次数随片段数线性增长,延迟与成本同步上升,因此需要并发控制与限流设计,并考虑缓存来避免重复计费。

基本信息

阶段划分Map 逐片段处理,Reduce 合并汇总
常见变体Refine 逐步把新片段并入已有答案
适用任务整篇摘要、跨章节问答、长报告整理
主要代价调用次数、延迟与成本随片段数上升
必备设计Map 并发与限流、失败重试、结果缓存
引用要求Reduce 阶段保留片段编号

典型使用场景

  • 生成文档摘要:先分段提炼要点,再合并成结构化摘要
  • 整篇问答:答案分散在多个章节,需要全部片段参与
  • 长报告处理:按章节 Map,再按主题 Reduce 汇总
  • 与检索式 RAG 互补:先定位相关章节,再在章节内做局部 Map-Reduce
  • 批量离线任务:夜间跑全量文档摘要,对延迟不敏感

两阶段骨架

两阶段骨架
partials = [llm_summarize(chunk, query) for chunk in chunks_if_too_long]  # Map
final = llm_answer(query, "\n\n".join(partials))                        # Reduce
# 变体 refine:逐步把新片段并入已有答案,上下文更连续但只能串行
# Reduce 时保留片段编号与来源,引用才能回指原文段落
# Map 阶段并发执行并设并发上限,避免触发服务端限流

长文档策略对照

策略做法代价
Map-Reduce逐片段生成再统一汇总片段多时调用次数最多,成本最高
Refine逐步把新片段并入已有答案串行执行延迟更高,但上下文连续
整段直塞所有片段一次放进提示词实现最简单,受上下文长度硬限制
检索式先检索相关片段再生成省上下文,但可能漏掉未命中的关键章节
Reduce 阶段必须保留片段编号:合并后的答案若没有编号映射,引用与溯源就断了,用户无法核对原文。
片段很多时串行调用会显著拉长响应,Map 阶段应并发执行并设置并发上限,Reduce 阶段再按顺序汇总。

易错点

  • Map 阶段丢掉片段编号:Reduce 之后引用无法回溯,答案溯源链条断裂
  • 片段很多时全程串行调用:响应时间过长,还容易触发服务端限流造成批量失败
  • Reduce 提示词不限制输出长度:最终答案冗长重复,用户读不到重点
  • 对同一片段重复调用且无缓存:批量任务成本成倍上涨,重跑时再次付费

数据来源与参考

  • LangChain 官方文档(Map-Reduce / Refine 链)
  • LlamaIndex 官方文档(长文档处理策略)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌