LangChain:记忆模块

吾名爱妃,性好静亦好动。好编程,常沉浸于代码之世界,思维纵横,力求逻辑之严密,算法之精妙。亦爱篮球,驰骋球场,尽享挥洒汗水之乐。且喜跑步,尤钟马拉松,长途奔袭,考验耐力与毅力,每有所进,心甚喜之。

 
吾以为,编程似布阵,算法如谋略,需精心筹谋,方可成就佳作。篮球乃团队之艺,协作共进,方显力量。跑步与马拉松,乃磨炼身心之途,愈挫愈勇,方能达至远方。愿交志同道合之友,共探此诸般妙趣。

诸君,此文尚佳,望点赞收 藏,谢之!

        记忆模块是一个集合体,由多个不同的记忆组件构成。每个记忆组件都负责某一特定方面的记忆功能。在记忆模块(langchain.memory)下,有多种不同的类,每一个类都可以看做一个“记忆组件”。记忆组件是记忆模块的子元素,用于执行更具体的记忆任务。例如,如果你从记忆模块中导入ConversationBufferMemory类并对其进行实例化,你就会得到一个名为ConversationBufferMemory的记忆组件。

记忆模块概述

想一想,为什么需要记忆模块?

        大模型本质上是无记忆的。当与其交互时,它仅根据提供的提示生成响应的输出,而无法存储或记住过去的交互内容。因为是无记忆的,意味着它不能“学习或“记住”用户的偏好、以前的错误或其他个性化信息,难以满足人们的期望。 人们期待聊天机器人具有人的品质和回应能力。在现实的聊天环境中,人们的对话中充满了缩写和含蓄表达,他们会引用过去的对话内容,并期待对方能够理解和回应。例如,如果在聊天一开始时提到了某人的名字,随后仅用代词指代,那么人们就期望聊天机器人能够理解和记住这个指代关系。 对聊天机器人的期待并不仅仅是它需要具备基础的回答功能,人们更希望聊天机器人能够在整个对话过程中,理解对话,记住交流内容,甚至理解情绪和需求。为了实现这个目标,需要赋子大语言模型一种“记忆”能力。
        记忆是一种基础的人类特性,是理解世界和与世界交流的基础。这是需要记忆模块的原因,将这种记忆能力赋予机器人,使机器人具备人类般的记忆能力。
        最后,需要强调,为什么在实际的大语言模型应用开发中,需要记忆能力。简单来说,同样作为提示词模板的外部数据,通过“记忆”能力形成的外部数据,与检索到的外部文档内容起到一样的作用。同样地,它可以确保大语言模型在处理信息时始终能够获取到最新、最准确的上下文数据。通过提供聊天信息,可以让大语言模型的输出更有据可查,多了一份“证据”,这也是一种低成本应用大语言模型的策略,不需要做参数训练等额外工作。
        下面重点探讨不同类型的记忆组件如何影响模型响应。

记忆组件的定义

        记忆组件,实际上是一个聊天备忘录对象,像手机备忘录程序一样,可以用它记录与大语言模型的聊天对话内容。那么,备忘录的作用是什么呢?试想在一个会议上,你有一位秘书在边上为你做备忘录。当你发言时,你可能会忘记先前的发言者都说过什么,这时你可以让秘书展示备忘录,通过查阅这些信息,你就能够清楚地整理自己的发言,从而赢得全场的赞许。而当你发言结束后,秘书又要做什么呢?他需要把你刚刚的精彩发言记录下来。
        这就是记忆组件的两大功能:读取和写人。因此,记忆组件的基本操作包括读取和写入。在链组件的每次运行中,都会有两次与记忆组件的交互:在链组件运行之前记忆组件首先会从其存储空间中读取相关信息。这些信息可能包括先前的对话历史用户设置或其他与即将执行的任务相关的数据。完成运行后,生成的输出或其他重要信息会被写人记忆组件中。这样,这些信息就可以在以后的运行或会话中被重新读取和使用。
        记忆组件的设计,旨在解决两个核心问题:一是如何写人,也就是存储状态;二是如何读取,即查询状态。存储状态一般通过程序的运行内存存储历史聊天记录实现。查询状态则依赖于在聊天记录上构建的数据结构和算法,它们提供了对历史信息的高效检索和解析。类似于一个聊天备忘录,记忆组件既可以帮助记录下聊天的每一条信息,也可以依据需求,搜索出相关的历史聊天记录。

        最难理解的是,如何在聊天记录上构建数据结构和算法?简单来说,数据结构和算法就是用来整理和检索聊天记录的。记忆组件会将处理过的聊天信息数据注入提示词模板中,最终通过模型平台的API接口获取大语言模型的响应,这样可以使响应更加准确。因为要决定哪些聊天记录需要保留,哪些聊天记录需要进一步处理,所以需要在聊天记录上构建数据结构和算法。

        主要采取以下两种方法整理和检索聊天记录。第一种方法是将聊天记录全部放入提示词模板中,这是一种比较简单的方法。具体是将聊天窗口中的上下文信息直接放在提示词中,作为外部数据注入提示词模板中,再提供给大语言模型。这种方法简单易行,但是因为结合信息的方式较为粗糙,所以可能无法达到精准控制的目的。而且由于模型平台的 Max Tokens限制,这种方法要考虑如何截取聊天记录,如何压缩聊天记录,以适应模型平台底层的 API要求。
        第二种方法是先压缩聊天记录,然后放入提示词模板中。这种方法的思路是利用LLM 的总结和提取实体信息的能力压缩聊天记录,或者从数据库中提取相关的聊天记录、实体知识等,然后将这些文本拼接在提示词中,再提供给大语言模型,进行下一轮对话。

        在这个过程中,可以使用类似于图像压缩算法的方式对聊天记录进行压缩。比如可以参考JPEG图像压缩算法的原理,将原始的聊天记录(类比为图像的原始数据进行压缩。JPEG图像压缩算法在压缩过程中会舍弃一些人眼难以察觉的高频细节信息,从而达到压缩的效果,同时大部分重要信息被保留。这样,就可以将压缩后的聊天记录(类比为压缩后的图像)放入提示词模板中,用于生成下一轮对话。虽然这种压缩方式可能会丢失一些细节信息,但是由于这些信息对于聊天记录的总体含义影响较小,因此可以接受。
        通过这种方式,不仅可以在保证聊天记录的总体含义的同时,缩短提示词的长度而且还可以提高大语言模型的运行效率和响应速度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值