文章目录
Prompt实战之多文档总结 2)Stuff 策略总结多文档
2.1 引言
在本章中,我们将实践Stuff 策略。这是最简单的一种多文档总结方法:直接将所有文档堆叠(stuff)在一起,统一发送给 LLM,请求生成总结。
虽然简单,但 Stuff 策略在小规模、多数文档内容较短的场景中,依然非常有效。
2.2 什么是 Stuff 策略?
Stuff(堆叠)策略指的是:
- 将所有需要处理的文档一次性拼接成一条超大文本;
- 作为一个整体传递给 LLM;
- 由 LLM 直接输出总结内容。
适用场景
- 文档数量较少(例如 5~10份);
- 每份文档内容较短(不超过几百字);
- 总拼接长度远低于 LLM 的上下文窗口(通常 8k、16k、32k token 不等)。
▶️ 提示:如果文档总长度接近或超过上下文窗口限制,Stuff 方法会失败,需要使用更复杂的方法(下一章将介绍)。
2.3 流程图
让我们先看一下 Stuff 策略总结的基本流程:
2.4 实战步骤
2.4.1 加载文档
我们以网页为例,使用 WebBaseLoader
加载文档:
from langchain_community.document_loaders import WebBaseLoader
# 示例:加载多个网页作为文档
urls = [
"https://docs.smith.langchain.com/overview",
"https://python.langchain.com/docs/expression_language",
]
loader = WebBaseLoader(urls)
documents = loader.load()
print(f"一共加载了 {len(documents)} 份文档")
▶️ 小贴士
如果是本地 PDF、Markdown 文件,可以换用 PyPDFLoader
或 UnstructuredLoader
等。
2.4.2 创建 Stuff Summarization Chain
使用 LangChain 中的 stuff_documents
工具链,快速建立 summarization chain:
from langchain_openai import ChatOpenAI
from langchain.chains.summarize import load_summarize_chain
# 初始化 OpenAI Chat 模型
llm = ChatOpenAI(model="gpt-4", temperature=0)
# 使用 Stuff 策略加载总结链
stuff_chain = load_summarize_chain(
llm,
chain_type="stuff",
)
# 调用链执行总结
summary = stuff_chain.invoke(documents)
print(summary['output_text'])
▶️ 小贴士
如果想自己自定义提示词(Prompt Template),也可以传递 prompt=your_prompt
参数给 load_summarize_chain
。
2.5 整合代码示例
完整示范整合在一起,方便复制运行:
from langchain_community.document_loaders import WebBaseLoader
from langchain_openai import ChatOpenAI
from langchain.chains.summarize import load_summarize_chain
# 加载文档
urls = [
"https://docs.smith.langchain.com/overview",
"https://python.langchain.com/docs/expression_language",
]
loader = WebBaseLoader(urls)
documents = loader.load()
# 初始化 LLM
llm = ChatOpenAI(model="gpt-4", temperature=0)
# 创建 Stuff Summarization Chain
stuff_chain = load_summarize_chain(llm, chain_type="stuff")
# 执行总结
summary = stuff_chain.invoke(documents)
# 输出结果
print(summary['output_text'])
2.6 本章小结
在本章中,我们:
- 学习了 Stuff 策略的原理与适用范围;
- 使用 LangChain 快速搭建了一个多文档 Stuff 总结系统;
- 成功调用 LLM 生成了整合后的总结。
虽然 Stuff 策略简单,但在合适场景下,它是最快速、最直接的总结方式。
✏️ 练习
- 尝试使用
WebBaseLoader
加载自己感兴趣的 2-3 个网页内容,并使用 Stuff 策略生成总结。 - 替换 LLM 为
gpt-3.5-turbo
或其他模型,观察总结质量差异。 - 修改 Summarization Chain,传入自定义 Prompt,比如要求模型输出“要点提炼版总结”。