langchain学习周报2

一、记忆存储

        使用大模型进行对话时,语言模型自身不会记住对话的历史信息,每个请求交互,每次调用API都是独立的。记忆存储被用作LLM的输入或者额外的上下文,这样子LLM生成输出时就可以基于之前所说过的对话来生成。

1. ConversationBufferMemory

 Langchain提供了一个ConversationBufferMemory方法来临时存储对话记忆

from langchain_community.chat_models import ChatTongyi
from langchain.chains import ConversationChain
from langchain.memory import ConversationBufferMemory
import os
api_key = os.environ.get('DASHSCOPE_API_KEY')
llm = ChatTongyi(model="qwen-plus",temperature=0.0,api_key=api_key)
memory = ConversationBufferMemory()#使用变量存储记忆
conversation = ConversationChain(
    llm=llm,
    memory=memory,
    verbose=False         #用于控制输出的详细程度,True为详细输出,False为简略输出
    )

一开始使用通义千问2.5-1.5B失败  

修改verbose=True,再次运行可以查看到提示词中包含之前的对话记忆是没有问题的。也可以通过下面两种方式查看。

print(memory.buffer)
memory.load_memory_variables({})

更换模型为qwen-plus成功了(疑惑点,是模型之间的区别吗)注:后续开发直接使用qwen-max

2. ConversationBufferWindowMemory

        使用大模型进行对话时,语言模型自身不会记住对话的历史信息,每个请求交互,每次调用API都是独立的。记忆存储被用作LLM的输入或者额外的上下文,这样子LLM生成输出时就可以基于之前所说过的对话来生成。随着对话变长,记忆存储量增加,向LLM发送大量token的成本也会增加。所以,Langchain提供了若干个相关的工具。

ConversationBufferWindowMemory仅保留最后若干轮对话信息

下面是一个实例

from langchain.memory import ConversationBufferWindowMemory
memory = ConversationBufferWindowMemory(k=1)#这个变量表示我只想记住最后一轮对话
memory.save_context({"input":"我有点难过"},{"output":"为什么呢?"})
memory.save_context({"input":"我没有得到第一名"},{"output":"没关系,已经很棒了"})
memory.load_memory_variables({})

可以看到记忆存储中,只存储了最后一轮的对话信息。实际中一般k这个位置的变量不会设置为1 

3. ConversationTokenBufferMemory

除了限制存储的对话次数,还可以限制保存在记忆存储中的token数量。

from langchain.memory import ConversationTokenBufferMemory
memory = ConversationTokenBufferMemory(llm=llm,max_token_limit=30)
memory.save_context({"input":"AI is what?"},{"output":"Amazing!"})
memory.save_context({"input":"Backpropagation is what?"},{"output":"Beatiful!"})
memory.save_context({"input":"Chatbots are what?"},{"output":"Charming!"})
memory.load_memory_variables({})

4. ConversationSummaryBufferMemory

除了限制存储对话次数和token以外,可以让LLM为所有历史消息生成摘要,在记忆中存储历史消息的摘要

from langchain.memory import ConversationSummaryBufferMemory
schedule = "本周的日程安排包括多个重要会议和项目工作。\
周一,我们将召开团队周会,讨论项目进展和目标。\
周二的重点是参与在线课程以提升数据分析技能,随后与客户进行需求沟通。\
周三和周四将安排技术文档撰写和参加项目管理技巧的工作坊,\
最后在周五总结本周的工作并制定下周的计划。"
memory = ConversationSummaryBufferMemory(llm = llm,max_token_limit=400)
memory.save_context({"input":"我有点难过"},{"output":"为什么呢?"})
memory.save_context({"input":"我没有得到第一名"},{"output":"没关系,已经很棒了"})
memory.save_context({"input":"我们这周有什么日程安排吗?"},{"output":f"{schedule}"})

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值