想要基于LangChain的LLMChain组件实现文本摘要功能,核心是通过LLMChain串联「提示词模板+大语言模型」,实现对任意文本的自动化摘要(支持短文本直接摘要、长文本分段摘要)。以下是完整的可运行代码,包含基础版(短文本)和进阶版(长文本),注释详尽,新手可直接复刻。
一、核心设计思路
LLMChain的核心是“提示词模板(PromptTemplate) + 大模型(LLM)”的流水线,实现文本摘要的逻辑:
- 定义摘要提示词模板:明确告诉模型“要做什么”(如“简洁摘要、提取核心信息”);
- 初始化大模型:选择GPT-3.5/4或国内模型(文心一言);
- 构建LLMChain:将模板和模型串联,形成“输入文本→生成摘要”的闭环;
- 长文本适配:若文本超出模型上下文窗口,先分段→逐段摘要→合并总摘要。
二、前置准备
1. 安装依赖
# 核心依赖(OpenAI模型)
pip install langchain langchain-openai python-dotenv
# 国内模型适配(可选,文心一言)
pip install langchain-ernie2. 配置API密钥
方式1:创建
.env文件(推荐,避免硬编码)# .env文件内容 OPENAI_API_KEY="你的OpenAI API密钥" # 国内用户可选:文心一言密钥 # ERNIE_API_KEY="你的文心一言API Key" # ERNIE_SECRET_KEY="你的文心一言Secret Key"方式2:代码内直接配置(测试用)
import os os.environ["OPENAI_API_KEY"] = "你的OpenAI API密钥"
三、完整实现代码
版本1:基础版(短文本摘要,核心LLMChain实现)
适用于单段短文本(≤2000字),直接通过LLMChain生成摘要:
"""
基于LLMChain实现短文本摘要(核心版)
"""
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain
# 加载环境变量(读取.env中的API密钥)
load_dotenv()
# ===================== 1. 配置核心组件 =====================
# 初始化大模型(GPT-3.5,速度快、成本低)
llm = ChatOpenAI(
model="gpt-3.5-turbo",
temperature=0.3, # 0.3保证摘要稳定、不发散
max_tokens=500 # 限制摘要长度
)
# 定义摘要提示词模板(核心:明确摘要要求)
# {text}为待摘要文本的变量,可自定义摘要规则(如字数、风格)
summary_prompt = PromptTemplate(
input_variables=["text"],
template="""请你对以下文本进行简洁、准确的摘要,要求:
1. 提取核心信息(主题、关键观点、核心结论);
2. 字数控制在100字以内;
3. 语言简洁,不添加额外内容;
待摘要文本:
{text}"""
)
# ===================== 2. 构建LLMChain =====================
# LLMChain = 提示词模板 + 大模型
summary_chain = LLMChain(
llm=llm,
prompt=summary_prompt,
verbose=True # 开启verbose,可查看Chain执行日志(新手调试用)
)
# ===================== 3. 测试文本摘要 =====================
if __name__ == "__main__":
# 待摘要的短文本(示例:LangChain介绍)
raw_text = """
LangChain是一个用于构建大语言模型应用的开源框架,核心功能包括提示词工程、链(Chains)、代理(Agents)、记忆(Memory)和检索增强生成(RAG)。
它支持对接OpenAI、文心一言、Llama3等主流大模型,还提供了丰富的工具集成(如数据库、API调用),帮助开发者快速搭建智能问答、文本摘要、知识库等应用。
"""
# 调用LLMChain生成摘要(传入待摘要文本)
result = summary_chain.run(text=raw_text)
# 输出结果
print("\n===== 文本摘要结果 =====")
print(result)版本2:进阶版(长文本分段摘要)
适用于长文本(>2000字),解决模型上下文窗口不足的问题,逻辑:文本分段→逐段摘要→合并总摘要:
"""
基于LLMChain实现长文本分段摘要(进阶版)
"""
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain
# 加载环境变量
load_dotenv()
# ===================== 1. 工具函数:文本分段 =====================
def split_long_text(text: str, chunk_size: int = 1000) -> list:
"""
将长文本按固定长度分段(避免超出模型上下文窗口)
:param text: 原始长文本
:param chunk_size: 每段最大字符数(可根据模型调整)
:return: 分段后的文本列表
"""
chunks = []
start = 0
text_length = len(text)
while start < text_length:
end = start + chunk_size
# 避免截断句子(简单处理:按句号分割)
if end < text_length:
end = text.rfind('。', start, end) + 1 # 找到最后一个句号,保证句子完整
if end <= start: # 没找到句号,直接截断
end = start + chunk_size
chunks.append(text[start:end].strip())
start = end
return chunks
# ===================== 2. 初始化组件 =====================
# 大模型配置
llm = ChatOpenAI(
model="gpt-3.5-turbo",
temperature=0.3,
max_tokens=300
)
# 分段摘要提示词模板
chunk_summary_prompt = PromptTemplate(
input_variables=["text_chunk"],
template="""请摘要以下文本片段的核心信息,要求:
1. 提取该片段的关键内容,不遗漏重要信息;
2. 字数控制在50字以内;
3. 仅输出摘要内容,无其他废话。
文本片段:
{text_chunk}"""
)
# 总摘要提示词模板(合并分段摘要)
total_summary_prompt = PromptTemplate(
input_variables=["chunk_summaries"],
template="""请将以下多个文本片段的摘要合并为一个完整、连贯的总摘要,要求:
1. 整合所有核心信息,逻辑清晰;
2. 字数控制在200字以内;
3. 语言流畅,无重复内容。
各片段摘要:
{chunk_summaries}"""
)
# 构建两个LLMChain:分段摘要链 + 总摘要链
chunk_chain = LLMChain(llm=llm, prompt=chunk_summary_prompt)
total_chain = LLMChain(llm=llm, prompt=total_summary_prompt)
# ===================== 3. 长文本摘要主逻辑 =====================
def long_text_summary(long_text: str) -> str:
"""
长文本摘要主函数
:param long_text: 原始长文本
:return: 最终总摘要
"""
# 步骤1:分段
text_chunks = split_long_text(long_text, chunk_size=1000)
print(f"长文本分段完成,共{len(text_chunks)}段")
# 步骤2:逐段摘要
chunk_summaries = []
for i, chunk in enumerate(text_chunks):
print(f"\n正在摘要第{i+1}段...")
chunk_summary = chunk_chain.run(text_chunk=chunk)
chunk_summaries.append(chunk_summary)
print(f"第{i+1}段摘要:{chunk_summary}")
# 步骤3:合并总摘要
chunk_summaries_str = "\n".join([f"{i+1}. {s}" for i, s in enumerate(chunk_summaries)])
total_summary = total_chain.run(chunk_summaries=chunk_summaries_str)
return total_summary
# ===================== 4. 测试长文本摘要 =====================
if __name__ == "__main__":
# 待摘要的长文本(示例:LangChain核心功能介绍)
long_raw_text = """
LangChain是2022年推出的开源大模型应用开发框架,旨在简化基于LLM的复杂应用构建。其核心设计理念是“模块化”,将大模型应用的核心环节拆分为可复用的组件。
首先是模型层(Models),LangChain支持对接几乎所有主流大模型,包括闭源的OpenAI GPT系列、Anthropic Claude,开源的Llama3、Qwen2,以及国内的文心一言、讯飞星火等。开发者只需通过统一的接口,即可切换不同模型,无需修改核心代码。
其次是提示词工程(Prompts),LangChain提供了丰富的PromptTemplate模板,支持动态变量替换、提示词优化,还内置了FewShotPromptTemplate等高级模板,帮助开发者快速构建高质量提示词。
链(Chains)是LangChain的核心组件之一,LLMChain是最基础的链,用于串联提示词和模型;SequentialChain可将多个链按顺序执行;RouterChain能根据输入自动选择合适的链,满足复杂任务需求。
代理(Agents)则是LangChain的进阶功能,它让模型具备“自主决策”能力——能分析用户需求,选择合适的工具(如数据库查询、API调用、代码执行),并迭代执行直到完成任务,典型应用包括智能编程助手、自动化数据分析工具等。
记忆(Memory)模块用于维护对话上下文,支持短期记忆(上下文窗口)和长期记忆(向量库存储),让大模型应用具备“记忆能力”,能理解跨轮对话中的指代和上下文关联。
此外,LangChain还提供了检索增强生成(RAG)相关组件,包括文档加载器、文本分割器、向量存储、检索器等,帮助开发者快速搭建知识库问答系统,解决大模型“幻觉”问题。
LangChain的生态还在不断扩展,目前已支持Python和JavaScript两种主流语言,并有丰富的第三方插件和集成工具,成为大模型应用开发的主流框架之一。
"""
# 调用长文本摘要函数
final_summary = long_text_summary(long_raw_text)
# 输出最终结果
print("\n===== 长文本总摘要 =====")
print(final_summary)四、核心代码解析
1. LLMChain的核心构建
LLMChain的初始化仅需两个核心参数:
summary_chain = LLMChain(llm=llm, prompt=summary_prompt)llm:大模型实例(如GPT-3.5),负责生成文本;prompt:提示词模板,定义摘要的规则和格式,是摘要质量的关键。
2. 提示词模板设计要点
好的提示词模板需明确:
- 任务目标:“对文本进行简洁、准确的摘要”;
- 约束条件:“字数控制在100字以内”“提取核心信息”;
- 输入变量:
{text}或{text_chunk},用于接收待摘要文本。
3. 长文本分段逻辑
- 原因:GPT-3.5-turbo的上下文窗口为4096 tokens(约3000字),长文本直接输入会截断;
- 关键:
split_long_text函数通过“找最后一个句号”避免截断句子,保证分段后的文本语义完整; - 流程:分段→逐段摘要→合并总摘要,既适配上下文窗口,又保证总摘要的完整性。
4. 运行方式
# 运行基础版
python short_text_summary.py
# 运行进阶版
python long_text_summary.py五、输出示例
基础版输出(短文本)
===== 文本摘要结果 =====
LangChain是开源大语言模型应用开发框架,支持对接主流大模型,提供提示词工程、链、代理、记忆、RAG等核心功能,可快速搭建智能问答、文本摘要等应用。进阶版输出(长文本)
长文本分段完成,共3段
正在摘要第1段...
第1段摘要:LangChain是2022年推出的开源大模型应用开发框架,核心设计为模块化,拆分大模型应用核心环节为可复用组件。
正在摘要第2段...
第2段摘要:LangChain支持对接主流大模型,提供丰富提示词模板,核心组件包括链、代理、记忆模块,满足不同开发需求。
正在摘要第3段...
第3段摘要:LangChain还提供RAG相关组件,支持Python/JS语言,生态丰富,是大模型应用开发主流框架。
===== 长文本总摘要 =====
LangChain是2022年推出的开源大模型应用开发框架,核心为模块化设计,支持对接各类主流大模型,提供提示词模板、链、代理、记忆等组件,还包含RAG相关功能,支持Python/JS语言,是大模型应用开发的主流框架。六、适配国内模型(文心一言)
若无法访问OpenAI,可替换为文心一言模型,仅需修改大模型初始化部分:
from langchain_ernie import ChatErnie
# 初始化文心一言模型
llm = ChatErnie(
model_name="ernie-3.5",
api_key="你的文心一言API Key",
secret_key="你的文心一言Secret Key",
temperature=0.3
)总结
关键点回顾
LLMChain实现文本摘要的核心是“提示词模板 + 大模型”,模板决定摘要质量,模型决定生成效果;- 短文本可直接用
LLMChain.run()生成摘要,长文本需先分段再合并; - 提示词模板需明确约束条件(字数、核心信息),避免摘要发散;
- 可无缝切换OpenAI/文心一言等模型,核心逻辑无需修改。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。