langchain学习文章目录
第一部分 langchain入门以及prompt、解析器使用
文章目录
前言
今天记录第二部分Memory机制
来存储和检索对话上下文,使得多轮对话更加连贯。这样,应用程序可以记住用户之前的输入和状态,从而提供更智能和个性化的响应。
导包,以及初始化请看第一部分。
一、ConversationBufferMemory
记录整个对话的所有内容。适用于需要完整对话历史的应用。
from langchain.memory import ConversationBufferMemory
memory = ConversationBufferMemory()
conversation = ConversationChain(llm=model,memory=memory,verbose=False)
conversation.predict(input='你好,我是xx')
conversation.predict(input='今天是几月几号')
print(memory.buffer)#会得到所有聊天信息内容
二、ConversationBufferWindowMemory
只记录对话的最近几轮内容。这在对话较长且只需要最近几轮内容的场景中非常有用。参数k表示模型记住k轮对话
from langchain.memory import ConversationBufferWindowMemory
memory = ConversationBufferWindowMemory(k=1) #参数k表示模型记住k轮对话
memory.save_context({'input':'我是xx'},{'output':'很高兴认识你'})
memory.save_context({'input':'你好'},{'output':'你也好呀'})
memory.load_memory_variables({}) #上面设置k=1,只保留一轮对话也就是:你好
三、ConversationTokenBufferMemory
根据标记(tokens)的数量记录对话内容。这在对话需要控制标记数量(如避免超过API限制)的场景中非常有用。
max_token_limit存储最大token长度,需要计算token所以参数还需要llm来计算
from langchain.memory import ConversationTokenBufferMemory
memory = ConversationTokenBufferMemory(llm=model,max_token_limit=20)
memory.save_context({'input':'我是张成'},{'output':'很高兴认识你'})
memory.save_context({'input':'你好'},{'output':'你也好呀'})
memory.load_memory_variables({})#max_token_limit设置20,也就只能保留最后一轮
四、ConversationSummaryBufferMemory
过生成摘要来记录对话内容。这适用于需要保留对话核心内容但不需要详细记录的场景。
max_token_limit存储最大token长度,需要计算token所以参数还需要llm来计算
from langchain.memory import ConversationSummaryBufferMemory
text='今天的行程安排xxxxxxxxxxxxxxxxxxxxxxxxxx'
memory = ConversationSummaryBufferMemory(llm=model,max_token_limit=20)
memory.save_context({'input':'今天我的安排是什么'},{'output':f'{text}'})
memory.load_memory_variables({})
总结
以上就是今天要讲的内容,本文仅仅简单介绍了memory的使用,还有另外两种机制,分别是向量和实体memory机制,可以再看看。