15天学会AI应用开发(五)使用AI摘要来压缩上下文消息

前面两篇文章分别介绍了根据消息数量截断历史对话和根据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消耗)》。

相关推荐
Agent手记9 小时前
如何利用大模型让RPA具备“阅读理解”能力?端到端智能体演进的技术架构全解析
人工智能·ai·架构·rpa
叶梓翎9 小时前
AI语义搜索本地素材一键整合包官方下载
人工智能·python·图搜索
敲代码的小王!9 小时前
Python 核心语法 —— 数据、流程与容器
开发语言·python
网络与设备以及操作系统学习使用者9 小时前
豆包情感化,DeepSeek理性化,OpenMAIC系统化
人工智能·学习
chéng ௹9 小时前
python将word文档转化成html
python·html·word
枫叶林FYL9 小时前
【强化学习】8 AssistMimic:基于多智能体强化学习的物理 grounded 人际协助控制
人工智能·机器学习·架构
2601_958352909 小时前
AR-1106 量产落地白皮书:中小厂商如何用 1/10 成本实现语音交互功能
人工智能·ar·语音识别·智能机器人·音频处理模块
覆东流9 小时前
python环境搭建
开发语言·python
啦啦啦_99999 小时前
1. NLP课程大纲
人工智能·自然语言处理