langchain实战 | 怎么进行超大文本摘要提取
来源:互联网
时间:2026-07-30 13:42:07
文档摘要提取这件事,说穿了就是把一堆密密麻麻的文字,快速拎出最核心的那几条线索。无论你是面对几十页的PDF、一长串客户问答,还是那种恨不得写一万字的博客文章——只要能快速抓到主旨,就能省下大把时间,这道理谁都懂。
问题在于,怎么让程序自动干这个活?答案其实不复杂:借助当前那些能力极强的语言模型(LLMs),通过预设的步骤把文档塞进去,让模型吐出概要。常见的做法有两种,思路都很直观。
第一种:填充法(Stuff)
最简单粗暴。把整篇文档一股脑丢进一个输入提示里,让模型直接总结。这个办法对上下文窗口极大的模型特别友好,比如 OpenAI 的
gpt-3.5-turbo-1106 或者 Anthropic 的 Claude-2——它们能一口气吞下很长的内容。
第二种:映射-归约法(Map-Reduce)
如果文档太长,一次塞不下,那就要拆开处理。“映射”阶段先分别对每个小段做摘要,然后“归约”阶段再把所有小摘要合并成一个最终的总结。这思路有点像分治,稳定且能处理超长文本。
举个例子,假设你要总结一篇博客文章。下面的代码片段展示了用 Langchain 如何快速实现填充法:
from langchain.chains.summarize import load_summarize_chain
from langchain_community.document_loaders import WebBaseLoader
from langchain_openai import ChatOpenAI
# 加载网络文档
loader = WebBaseLoader("<您博客文章的URL>")
docs = loader.load()
# 配置LLM,例如使用OpenAI的模型
llm = ChatOpenAI(temperature=0, model_name="gpt-3.5-turbo-1106")
chain = load_summarize_chain(llm, chain_type="stuff")
# 执行文档总结
summary = chain.run(docs)
print(summary)
跑完上面这段,控制台就会输出文章的概要。如果文档太长导致直塞失败,那就换映射-归约法,先分别摘要再合并。
另外还有另一种变体叫
细化法(Refine)
chain_type 参数指定为 "refine" 就行:
from langchain_core.documents.base import Document as LangchainDocument
docs = LangchainDocument(page_content=content, metadata={})
from langchain_text_splitters import CharacterTextSplitter
from langchain.chains.summarize import load_summarize_chain
# Define LLM chain
llm = ChatOpenAI(temperature=0, model_name="gpt-3.5-turbo-16k")
chain = load_summarize_chain(llm, chain_type="refine")
text_splitter = CharacterTextSplitter.from_tiktoken_encoder(chunk_size=max_token, chunk_overlap=0)
split_docs = text_splitter.split_documents([docs])
summary = chain.run(split_docs)
总之,这些方法能让原本冗长、杂乱的原始信息,变成清晰、精炼、信息密度高的概要。不管是业务人员、研究人员,还是日常面对信息过载的普通人——这套工具都相当实用。

-
- 关于宇宙的好的网名有哪些
- 角色扮演 | 1
- 网名