前面两篇文章分别介绍了根据消息数量截断历史对话和根据Token长度截断历史对话,可是这两种方式有两个共同的问题:
1、被删去的早期记录可能包含关键信息,直接截断会导致信息丢失。
2、原始的对话记录可能存在重复、冗余、拖沓的文字内容。
一、为什么要对原始记录做摘要
要知道,重复、冗余、拖沓的文字内容并不高效,因为它的信息密度很低,很啰嗦,同样的意思使用更少的文字即可表达,完全没必要照搬原始的对话记录。
比如很多小说都有缩写本或者极简本,大幅精简后的文字保持了主要的故事框架,省去了许多次要的细节描写,一样可阅读可理解,整体的故事情节没有发生什么变化。
就历史对话的上下文而言,精简文字内容同样适用,这个精简过程被称作"摘要",意思是摘取主要信息。对话摘要既保留了原始记录的关键信息,又大幅压缩了原始记录的文字长度,可有效降低下次AI会话的Token消耗。
Python有成熟的第三方库,可以直接对一段中文做自动摘要,无需开发者自己写算法,非常方便。常见的摘要库有snownlp和sumy,分别说明如下。
二、中文摘要库 snownlp
snownlp专门做中文的文本处理,内置自动摘要功能,体积小且速度快。在编写Python代码前,要先在命令行执行下面的pip安装命令:
pip install snownlp
然后编写下面的Python摘要测试代码:
from snownlp import SnowNLP
def summarize_text(text, limit=2):
"""
自动生成摘要
:param text: 原文
:param limit: 提取几条摘要(默认2条)
:return: 摘要句子列表
"""
s = SnowNLP(text)
return s.summary(limit) # 自动提取关键句
# 测试
if __name__ == "__main__":
text = """
火山方舟是火山引擎推出的大模型平台,提供模型训练、推理、评测、精调等全方位功能与服务。
平台支持多种主流大模型接入,具有稳定可靠、安全互信的特点。
企业可以通过火山方舟快速构建自己的AI应用,降低开发成本与技术门槛。
"""
summary = summarize_text(text, limit=2)
print("自动摘要:")
for s in summary:
print("-", s)
运行上面的Python代码,输出日志结果如下:
自动摘要:
- 火山方舟是火山引擎推出的大模型平台
- 企业可以通过火山方舟快速构建自己的AI应用
可见snownlp库把原始的三个长句摘要为两个短句,同时保留了原文的主要意思。
三、通用摘要库 sumy
sumy库的功能更强,它支持 TF-IDF、LSA、LexRank、Luhn 等多种摘要算法。在编写Python代码前,要先在命令行执行下面的pip安装命令:
pip install sumy
然后编写下面的Python摘要测试代码:
from sumy.parsers.plaintext import PlaintextParser
from sumy.nlp.tokenizers import Tokenizer
from sumy.summarizers.lex_rank import LexRankSummarizer
def sumy_summary(text, sentences=2):
parser = PlaintextParser.from_string(text, Tokenizer("chinese"))
summarizer = LexRankSummarizer()
summary = summarizer(parser.document, sentences)
return [str(s) for s in summary]
# 测试
if __name__ == "__main__":
text = """
火山方舟是火山引擎推出的大模型平台,提供模型训练、推理、评测、精调等全方位功能与服务。
平台支持多种主流大模型接入,具有稳定可靠、安全互信的特点。
企业可以通过火山方舟快速构建自己的AI应用,降低开发成本与技术门槛。
"""
summary = sumy_summary(text, sentences=2)
print("自动摘要:")
for s in summary:
print("-", s)
运行上面的Python代码,输出日志结果如下:
自动摘要:
- 火山方舟是火山引擎推出的大模型平台,提供模型训练、推理、评测、精调等全方位功能与服务。
- 平台支持多种主流大模型接入,具有稳定可靠、安全互信的特点。
可见sumy库直接输出原始文字的两个长句,摘要效果不如snownlp库。
四、使用在线大模型输出摘要
如果开发者预算充足的话,也可调用国产大模型,在线输出对话内容的摘要文字。
比如登录火山引擎的控制台页面 https://console.volcengine.com/ark ,开通文本模型 Doubao-1-5-lite-32k 的推理服务,会赠送50万Token的免费额度,足够初学者的入门使用。
在编写火山引擎的Python调用代码前,要先在命令行执行下面的pip安装命令:
pip install --upgrade "volcengine-python-sdk[ark]"
然后编写下面的Python摘要在线生成代码:
from volcenginesdkarkruntime import Ark
client = Ark(
# 此为默认路径,您可根据业务所在地域进行配置
base_url="https://ark.cn-beijing.volces.com/api/v3",
# 此处请输入您在火山引擎上申请的 API KEY
api_key="**********",
)
text = """
火山方舟是火山引擎推出的大模型平台,提供模型训练、推理、评测、精调等全方位功能与服务。
平台支持多种主流大模型接入,具有稳定可靠、安全互信的特点。
企业可以通过火山方舟快速构建自己的AI应用,降低开发成本与技术门槛。
"""
completion = client.chat.completions.create(
# 此处请输入您创建的方舟推理接入点 ID
model="doubao-1-5-lite-32k-******",
messages=[
{"role": "system", "content": "请对用户输入的内容做精简摘要,摘要文字压缩在50字以内"},
{"role": "user", "content": text},
],
)
print("自动摘要:")
print("-", completion.choices[0].message.content)
运行上面的Python代码,输出日志结果如下:
自动摘要:
- 火山方舟是火山引擎的大模型平台,支持多模型,功能全,能助企业快速构建AI应用,降成本与门槛。
可见在线大模型火山引擎输出了原始文本经过压缩后的摘要文字,并且支持通过提示词设置精简指标,比如摘要长度等等。
本系列的AI应用开发文章目录为《15天学会AI应用开发全目录(零基础小白,零Token消耗)》。