1,简介
存储对话历史中的信息的能力称之为’记忆‘,这种工具可以单独使用,也可以无缝的集成到一条链中,记忆的存储长度是程序执行到结束,执行一次的所有记忆。
记忆的主要应用场景就是聊天机器人,聊天机器人的一个关键功能是它们能够使用先前对话的内容作为上下文。
记忆力在实际使用的逻辑:

记忆力在使用中可以分一下几个场景:

记忆力的几个重要的类:
ConversationBufferMemory会话缓冲区
如实的记录列表中记录的对话历史消息,并且是记录所有的历史消息,随着历史记录的增加,运行会越来越慢,直到大模型无法处理.适用于交互次数少,输入输出字符量不大的情况下
ConversationBufferWindowMemory会话缓冲窗口
持续记录对话历史,但只使用最近的k个交互。确保缓存大小不会过大,运行速度比较稳定
ConversationSummaryMemory会话摘要
随着时间的推移总结对话内容,并且将摘要存储在记忆中,需要的时候将摘要注入提示词或链中,缓存不会过大,运行稳定,但是运行速度比ConversationBufferWindowMemory慢很多,因为他在写入记忆的时候,做了一个摘要的操作.这使得她可以记住很长的交互记忆,不过随着交互的增加,摘要的内容不断迭代更换,使得某些内容会遗失.
VectorStoreRetrieverMemory向量存储
将记忆存储在向量存储中,并在每次调用时查询前K个最"显著"的文档。 与大多数其他记忆类不同的是,它不明确跟踪交互的顺序。 在这种情况下,"文档"是先前对话片段。这对于提及AI在对话中早些时候被告知的相关信息可能是有用的。这段话是官方文档的描述,猜测应该是将记忆做成了一个文档,使用文档阅读器来进行读取
2,使用代码示例
下面的示例没有使用上面四个重要的类,下面的示例主要使用让我们更加直观理解记忆力的运行逻辑。
手动一个简单聊天记录消息的记忆聊天
通过手动添加聊天消息,实现记忆力功能。
import os
from langchain_community.embeddings.huggingface import HuggingFaceEmbeddings
from langchain_community.chat_models import QianfanChatEndpoint
from langchain_core.messages import AIMessage, HumanMessage
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
os.environ["QIANFAN_AK"] = "*****" # 这里需要修改为自己的实际值
os.environ["QIANFAN_SK"] = "*****" # 这里需要修改为自己的实际值
def load_embedding_mode():
return HuggingFaceEmbeddings(model_name='text2vec-base-chinese',
model_kwargs={
'device': 'cpu'})
model = QianfanChatEndpoint(
streaming=True,
model="ERNIE-Bot",
)
##手动一个简单聊天记录消息的记忆聊天
##占位符
prompt = ChatPromptTemplate.from

最低0.47元/天 解锁文章
5115

被折叠的 条评论
为什么被折叠?



