LangChain实战 | 没想到,生成个摘要竟然要考虑多种情况!

LangChain 框架通过灵活的链式处理方法,为生成摘要的不同场景提供了有效的解决方案。如需要考虑文本长度、信息密度、上下文关联性,从简单到高阶的文本摘要任务

随着自然语言处理技术的快速发展,文本摘要是一个非常常用的文本处理手段,能够帮助我们从大篇幅文档中提取核心信息。

生成摘要看似是一项简单的任务,直观上只需将一段文本输入系统即可得到一个简洁的摘要。然而,真正用的时候却发现还不是如此简单。

摘要生成需要考虑文本长度、信息密度、上下文关联性以及具体应用场景等诸多因素,尤其是在处理超长文档、多来源内容或对摘要质量要求极高的情况下,更是麻烦。

LangChain 框架通过灵活的链式处理方法,为这些复杂需求提供了有效的解决方案。

一、LangChain 与 load_summarize_chain

LangChain 是一个用于构建与大语言模型(LLM)交互的框架,其设计目标是通过链(Chain)的概念,简化复杂任务的实现。

load_summarize_chain 是 LangChain 专为文本摘要任务设计的模块,支持处理从短文本到长文档等多种场景。通过与 LLM 的配合,用户可以快速生成清晰简洁的摘要。

二、load_summarize_chain 怎么用

2.1 三种使用场景

load_summarize_chain 支持三种链类型:

Stuff、Map-Reduce 和 Refine

  • Stuff:直接将所有文本一次性传递给模型。这种方法简单快速,适合短文本摘要,但无法处理超出 LLM 上下文窗口的长文本。

  • Map-Reduce:分两步进行摘要。首先对文本分块并生成单块摘要(map),然后合并这些摘要生成最终结果(reduce)。适合处理长文本,但摘要质量可能受限。

  • Refine:通过多轮优化逐步完善摘要。它基于初始摘要对每一块内容迭代生成更精细的摘要,适合对摘要质量要求较高的场景,但计算开销较大。

2.2 stuffmap_reducerefine三种类型的对比

在这里插入图片描述

2.3 load_summarize_chain 函数的定义

langchain.chains.summarize.chain.load_summarize_chain(
    llm: BaseLanguageModel, 
    chain_type: str = 'stuff', *verbose: bool | None = None, 
    **kwargs: Any
) → BaseCombineDocumentsChain

参数:

llm (BaseLanguageModel) – 使用的语言模型
chain_type (str) – 要使用的文档组合链的类型。“stuff”、“map_reduce”和“refine”之一。
verbose (bool | None) – 以详细模式运行。
**kwargs (Any) – 关键字参数
Returns : 用于摘要的链。
Return type : BaseCombineDocumentsChain


三、代码实现和摘要示例

环境:
Python 3.10
LangChain v0.3

3.1 定义模型

import os  # 导入操作系统模块

os.environ['OpenAI_API_KEY'] = 'hk-iwtbie11e427'

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

llm = ChatOpenAI(  # 创建ChatOpenAI的实例
    model="gpt-4o-mini",  # 指定模型
    temperature=0,  # 设置温度
    base_url="https://api.openai-hk.com/v1"  # 设置基础URL
)

3.2 定义提示模板

prompt_template = """写出以下内容的简洁摘要:


"{text}"


摘要:"""
prompt = PromptTemplate(template=prompt_template, input_variables=["text"])

3.3 Stuff 示例

适合短文本摘要任务,代码如下:

print("################################# Stuff ##########################################")
# Using Stuff
from langchain.docstore.document import Document
# 短文本
short_text = """
人工智能可以采用多种方式进行组织,具体取决于开发阶段或正在执行的操作。

例如,AI 开发通常分为四个阶段。

反应式机器:有限的 AI,仅根据预编程规则对不同类型的刺激做出反应。不使用记忆,因此无法通过新数据进行学习。1997 年击败国际象棋冠军加里·卡斯帕罗夫的 IBM 深蓝超级计算机就是反应式机器的一个例子。
有限记忆:人们认为大多数现代 AI 都拥有有限的记忆。它可以通过新数据(通常是通过人工神经网络或其他训练模型)进行训练,从而使用记忆随着时间的推移进行改进。深度学习是机器学习的一个细分领域,它被视为具有有限记忆的人工智能。
心智理论:心智理论 AI 目前不存在,但研究正在实现其可能性。它描述了可以模拟人类心智并具有与人类相同的决策能力的 AI,包括识别和记忆情感以及在社交场合中像人类一样做出反应。
自我意识:自我意识 AI 比心智理论 AI 前进了一步,它描述了一种神秘的机器,这种机器知道自己的存在并具有人类的智力和情感能力。与心智理论 AI 一样,自我意识 AI 目前也不存在。
在对人工智能类型进行广泛分类时,一种更有用的方法是按照机器可以做什么来分类。我们目前所说的所有人工智能都被认为是“窄”(narrow) 人工智能,因为它只能根据其编程和训练来执行一组范围狭窄的操作。例如,用于对象分类的 AI 算法无法执行自然语言处理。Google 搜索是一种窄 AI,预测分析或虚拟助理也是窄 AI。

人工通用智能 (AGI) 是指机器可以像人类一样“感知、思考和行动”。AGI 目前不存在。下一个等级将是人工超级智能 (ASI),即机器可以在所有方面发挥出优于人类的功能。
"""

# 转换为文档
docs = [Document(page_content=short_text)]

chain = load_summarize_chain(llm, chain_type="stuff", prompt=prompt)
result = chain.invoke(docs)
print(result["output_text"])
print()

摘要结果:

人工智能可以根据开发阶段分为四个阶段:反应式机器、有限记忆、心智理论和自我意识。反应式机器仅根据预编程规则反应,而有限记忆的AI通过新数据学习和改进。心智理论AI尚未实现,但研究正在进行,旨在模拟人类决策能力;自我意识AI则更进一步,拥有自我认知能力。大多数现有AI被称为“窄”人工智能,执行特定任务。人工通用智能(AGI)和人工超级智能(ASI)则是未来的目标,其中AGI具有类人智能,ASI在各方面超越人类。

3.4 Map-Reduce示例

适合长文本或多文档摘要任务,代码如下:

print("################################# Map-Reduce ##########################################")
# 使用Map-Reduce方法进行摘要
from langchain.text_splitter import RecursiveCharacterTextSplitter

# 读取长文本文件
file_path  = '../data/西游记1.txt'
with open(file_path , 'r',encoding='utf-8') as file:
    long_text  = file.read()

# 配置文本分割器
text_splitter = RecursiveCharacterTextSplitter(
    separators=["\n\n", "\n"],  # 按段落和换行符分割
    chunk_size=10000,  # 每个块的最大长度
    chunk_overlap=500# 块之间的重叠长度
)

# 将长文本分割为多个文档
docs = text_splitter.create_documents([long_text])

# 使用Map-Reduce方法加载摘要链
chain = load_summarize_chain(
    llm=llm,
    chain_type="map_reduce",  # 使用Map-Reduce方法
    verbose=True,  # 显示详细日志
    map_prompt=prompt,  # 映射阶段的提示
    combine_prompt=prompt  # 合并阶段的提示
)
result = chain.invoke(docs)
print(result["output_text"])
print()

文档一共被分了8块,每块生成了摘要,最后在所有块的摘要基础上,总结一个摘要:

《西游记》开篇描绘了孙悟空的诞生和成长历程。他出生于花果山,智慧超群,因追求长生不老的秘密而游历四方。通过拜师菩提祖师,他获得了姓氏“孙”和法名“悟空”,并掌握了强大的法力。在经过三年的修行后,他带领猴子们恢复家园,并获得如意金箍棒。因醉酒梦见自己被勾入幽冥界,他与阎王斗争,最终被玉帝封为“齐天大圣”。

然而,孙悟空因在天宫的行为引发天庭不满,被调动天兵围捕,经历与二郎神的激烈战斗后被捕入天庭并被压制。随后的情节展示了观音菩萨为寻找取经人而遭遇的各种困难,最终收编孙悟空、沙悟净和猪悟能等妖怪为弟子。通过玄奘与父母的悲欢离合,江流的出世,故事揭示了因缘法则与善恶循环。

在唐太宗的部分,围绕魏征的梦境与龙王事件展开,探讨了生死、因果与命运的复杂关系,反映了人间的道德与命运不可知的主题。

3.5 Refine示例

适合高质量摘要需求的场景,代码如下:

print("################################# Refine ##########################################")
# 使用Refine方法进行摘要
file_path  = '../data/西游记1.txt'
with open(file_path , 'r',encoding='utf-8') as file:
    long_text  = file.read()

# 使用相同的文本分割器
docs = text_splitter.create_documents([long_text])

# 定义Refine方法的提示模板
refine_prompt_template = """
你的工作是写出最后的总结。
我们已经提供了到某一点的现有摘要:

{existing_answer} 

我们有机会用下面的更多上下文来改进现有的摘要(仅在需要时)。
------------
{text}
------------
在新的背景下,完善原来的摘要。
如果上下文没有用,则返回原始摘要
"""
refine_prompt = PromptTemplate(template=refine_prompt_template, input_variables=["text"])

# 使用Refine方法加载摘要链
chain = load_summarize_chain(
    llm=llm,
    chain_type="refine",  # 使用Refine方法
    verbose=True,  # 显示详细日志
    question_prompt=prompt,  # 初始提示
    refine_prompt=refine_prompt  # 精炼提示
)
result = chain.invoke(docs)
print(result["output_text"])

摘要结果:


四、如何系统学习掌握AI大模型?

AI大模型作为人工智能领域的重要技术突破,正成为推动各行各业创新和转型的关键力量。抓住AI大模型的风口,掌握AI大模型的知识和技能将变得越来越重要。

学习AI大模型是一个系统的过程,需要从基础开始,逐步深入到更高级的技术。

这里给大家精心整理了一份全面的AI大模型学习资源,包括:AI大模型全套学习路线图(从入门到实战)、精品AI大模型学习书籍手册、视频教程、实战学习、面试题等,资料免费分享

1. 成长路线图&学习规划

要学习一门新的技术,作为新手一定要先学习成长路线图方向不对,努力白费

这里,我们为新手和想要进一步提升的专业人士准备了一份详细的学习成长路线图和规划。可以说是最科学最系统的学习成长路线。
在这里插入图片描述

2. 大模型经典PDF书籍

书籍和学习文档资料是学习大模型过程中必不可少的,我们精选了一系列深入探讨大模型技术的书籍和学习文档,它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础(书籍含电子版PDF)

在这里插入图片描述

3. 大模型视频教程

对于很多自学或者没有基础的同学来说,书籍这些纯文字类的学习教材会觉得比较晦涩难以理解,因此,我们提供了丰富的大模型视频教程,以动态、形象的方式展示技术概念,帮助你更快、更轻松地掌握核心知识

在这里插入图片描述

4. 2024行业报告

行业分析主要包括对不同行业的现状、趋势、问题、机会等进行系统地调研和评估,以了解哪些行业更适合引入大模型的技术和应用,以及在哪些方面可以发挥大模型的优势。

在这里插入图片描述

5. 大模型项目实战

学以致用 ,当你的理论知识积累到一定程度,就需要通过项目实战,在实际操作中检验和巩固你所学到的知识,同时为你找工作和职业发展打下坚实的基础。

在这里插入图片描述

6. 大模型面试题

面试不仅是技术的较量,更需要充分的准备。

在你已经掌握了大模型技术之后,就需要开始准备面试,我们将提供精心整理的大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余。

在这里插入图片描述

全套的AI大模型学习资源已经整理打包,有需要的小伙伴可以微信扫描下方CSDN官方认证二维码,免费领取【保证100%免费

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值