在了解了ConversationBufferMemory记忆类后,我们知道了它能够无限的将历史对话信息填充到History中,从而给大模型提供上下文的背景。但问题是:每个大模型都存在最大输入的Token限制,且过久远的对话数据往往并不能够对当前轮次的问答提供有效的信息,这种我们大家都能非常容易想到的问题,LangChain的开发人员自然也能想到,那么他们给出的解决方式是:ConversationBufferWindowMemory模块。该记忆类会保存一段时间内对话交互的列表,仅使用最后 K 个交互。所以它可以保存最近交互的滑动窗口,避免缓存区不会变得太大。
from langchain.memory import ConversationBufferWindowMemory
import warnings
warnings.filterwarnings("ignore")
#实例化一个对话缓冲区,用于存储对话历史
#k=1,所以在读取时仅能提取到最近一轮的记忆信息
#return_messages=True参数,将对话转化为消息列表形式
memory = ConversationBufferWindowMemory(k=1, return_messages=True)
conversation = ConversationChain(
llm=llm,
memory=memory,
)
# 示例对话
response1 = conversation.predict(input="你好")
response2 = conversation.predict(input="你在哪里?")
print("对话历史:", memory.buffer)