Prompt实战之多文档总结 3)Map-Reduce 策略高效总结大规模文档

Prompt实战之多文档总结 3)Map-Reduce 策略高效总结大规模文档

3.1 引言

当文档数量变多、单份内容变长时,Stuff 策略就会遇到上下文超长、成本飙升等问题。

这一章我们将学习Map-Reduce 策略,一种经典的分步总结法,专门应对大规模、多内容场景。


3.2 什么是 Map-Reduce 策略?

Map-Reduce 策略包括两个阶段:

  • Map 阶段:每份文档单独总结出一个“小总结”;
  • Reduce 阶段:将所有小总结再次整合、归纳为最终总结。

这种方法灵感来自分布式计算中的 MapReduce 思想,可以有效降低单次调用的上下文量,提高扩展性。

适用场景

  • 文档数量多(10份以上);
  • 单份文档很长(几千字甚至上万字);
  • 总长度超出 LLM 单次上下文窗口限制。

▶️ 提示:Map-Reduce 是处理大规模内容总结的黄金法则,但整体推理链更长,响应时间略慢。


3.3 流程图

看懂整个 Map-Reduce 总结流程:

加载大量文档
Map 阶段: 每份单独总结
Reduce 阶段: 汇总所有小总结
最终总结输出

3.4 实战步骤

3.4.1 加载大批文档

这里我们可以模拟批量网页加载,也可以使用本地批量 PDF 作为示例。

from langchain_community.document_loaders import WebBaseLoader

# 示例:加载多个网页
urls = [
    "https://python.langchain.com/docs/get_started/introduction",
    "https://python.langchain.com/docs/get_started/installation",
    "https://python.langchain.com/docs/get_started/quickstart",
    "https://python.langchain.com/docs/components/models",
]
loader = WebBaseLoader(urls)
documents = loader.load()

print(f"一共加载了 {len(documents)} 份文档")

3.4.2 构建 Map-Reduce Summarization Chain

使用 load_summarize_chain,指定 chain_type="map_reduce",自动开启分步总结模式。

from langchain_openai import ChatOpenAI
from langchain.chains.summarize import load_summarize_chain

# 初始化 OpenAI Chat 模型
llm = ChatOpenAI(model="gpt-4", temperature=0)

# 创建 Map-Reduce Summarization Chain
map_reduce_chain = load_summarize_chain(
    llm,
    chain_type="map_reduce",
)

# 执行总结
summary = map_reduce_chain.invoke(documents)

print(summary['output_text'])

▶️ 小贴士
如果想自定义 Map 阶段或 Reduce 阶段的提示词(prompt),可以分别传入 map_promptcombine_prompt 参数。


3.5 Map-Reduce 关键优势

  • 可扩展性:可以处理成百上千份文档;
  • 灵活性:可以对 Map 阶段与 Reduce 阶段分别设置不同的总结风格;
  • 高效成本控制:避免一次性把所有内容送入 LLM,减少上下文溢出与费用。

3.6 整合代码示例

完整一版 Map-Reduce 总结流程:

from langchain_community.document_loaders import WebBaseLoader
from langchain_openai import ChatOpenAI
from langchain.chains.summarize import load_summarize_chain

# 加载多个网页
urls = [
    "https://python.langchain.com/docs/get_started/introduction",
    "https://python.langchain.com/docs/get_started/installation",
    "https://python.langchain.com/docs/get_started/quickstart",
    "https://python.langchain.com/docs/components/models",
]
loader = WebBaseLoader(urls)
documents = loader.load()

# 初始化 LLM
llm = ChatOpenAI(model="gpt-4", temperature=0)

# 创建 Map-Reduce Summarization Chain
map_reduce_chain = load_summarize_chain(llm, chain_type="map_reduce")

# 执行总结
summary = map_reduce_chain.invoke(documents)

# 输出最终总结
print(summary['output_text'])

3.7 本章小结

在本章中,我们:

  • 了解了 Map-Reduce 策略的原理与应用场景;
  • 使用 LangChain 实现了大规模文档总结;
  • 掌握了处理超大文档集合时的基本方法。

掌握 Map-Reduce,是迈向构建企业级 LLM 应用的重要一环!


✏️ 练习

  1. 找到 10+ 份本地 Markdown 或 PDF 文件,尝试用 Map-Reduce 策略总结它们。
  2. 修改 Map 阶段提示词,让 LLM 输出“小总结 + 关键问题”,再 Reduce 归纳所有问题清单。
  3. 将模型换成 gpt-3.5-turbo-1106,比较响应速度和成本变化
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

这是Jamon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值