实战:AI 文档总结工具 (Map-Reduce)
如何让 AI 总结一份 200 页的财报或一本小说?直接丢给它肯定会报错(Token 超限),或者它只读了开头和结尾。我们需要使用 **Map-Reduce** 策略。
5分钟
2025-12-26
实战项目教程实战:AI
实战:AI 文档总结工具 (Map-Reduce)
如何让 AI 总结一份 200 页的财报或一本小说?直接丢给它肯定会报错(Token 超限),或者它只读了开头和结尾。我们需要使用 Map-Reduce 策略。
1. 原理
- 切分 (Split):把大文档切成 20 个小片段(Chunk)。
- 映射 (Map):让 AI 分别总结这 20 个小片段,得到 20 个“小摘要”。
- 规约 (Reduce):把这 20 个小摘要拼在一起,再丢给 AI 做一次“总摘要”。
2. 工具:LangChain
LangChain 封装好了这个流程,几行代码就能搞定。
from langchain.chains.summarize import load_summarize_chain
from langchain_community.document_loaders import PyPDFLoader
from langchain_openai import ChatOpenAI
from langchain.text_splitter import RecursiveCharacterTextSplitter
# 1. 加载 PDF
loader = PyPDFLoader("annual_report.pdf")
docs = loader.load()
# 2. 切分文档
text_splitter = RecursiveCharacterTextSplitter(chunk_size=3000, chunk_overlap=200)
split_docs = text_splitter.split_documents(docs)
# 3. 初始化 LLM
llm = ChatOpenAI(temperature=0, model="gpt-3.5-turbo")
# 4. 运行 Map-Reduce 链
chain = load_summarize_chain(llm, chain_type="map_reduce")
summary = chain.run(split_docs)
print(summary)
3. 进阶玩法:Refine 模式
如果不喜欢 Map-Reduce(可能会丢失跨段落的上下文),可以使用 Refine 模式:
- 总结第一段。
- 把“第一段的总结” + “第二段原文” 丢给 AI,让它更新总结。
- 滚雪球一样一直滚到最后。
- 缺点:无法并行,速度慢。
- 优点:上下文连贯性更好。
现在,你只需要 30 秒就能看完一份 5 万字的报告了。