第一部分:什么是记忆组件?
记忆组件是对话系统中的一项关键技术,它允许系统存储和引用对话历史中的信息。在LangChain中,记忆组件可以作为独立工具使用,也可以整合进链式处理中。记忆组件需要支持两个基本操作:读取和写入。
友情链接:ACEJoy
第二部分:他们是如何工作的?
在LangChain与LLM的每次交互中,链将执行两次记忆操作:
- 读取:在执行核心逻辑之前,链会从记忆系统中读取信息,以此来增强用户输入。
- 写入:在核心逻辑执行后、返回答案前,链会将当前的输入和输出写入记忆中,为将来的运行提供参考。
记忆组件的设计需考虑两个核心问题:如何存储历史信息,以及如何查询这些信息。
第三部分:三种基础记忆组件详解
LangChain提供了三种基本记忆组件类型:
- ConversationBufferMemory:直接记录对话历史消息的列表。
- ConversationBufferWindowMemory:记录对话历史,但仅保留最近的K个交互。
- ConversationSummaryMemory:随时间总结对话内容,并存储当前摘要。
以下是它们的具体用法示例:
3.1 ConversationBufferMemory
from langchain.memory import ConversationBufferMemory
memory = ConversationBufferMemory()
memory.save_context({"input": "Hi, LangChain!"}, {"output": "Hey!"})
memory.chat_memory.messages # 查看消息列表
调用 load_memory_variables
函数可以获取对话历史的文本:
memory.load_memory_variables({})
3.2 ConversationBufferWindowMemory
这个组件使用滑动窗口机制,确保了记忆的容量管理。
from langchain.memory import ConversationBufferWindowMemory
memory = ConversationBufferWindowMemory(k=1)
memory.save_context({"input": "Hi, LangChain!"}, {"output": "Hey!"})
memory.save_context({"input": "Where are you?"}, {"output": "By your side"})
memory.load_memory_variables({})
memory.chat_memory.messages
3.3 ConversationSummaryMemory
这种记忆类型利用LLM生成对话的摘要,适合长对话。
from langchain.memory import ConversationSummaryMemory
from langchain.llms import OpenAI
memory = ConversationSummaryMemory(llm=OpenAI(temperature=0, openai_api_key="您的有效openai api key"))
memory.save_context({"input": "Hi, LangChain!"}, {"output": "Hey!"})
memory.save_context({"input": "How to start with Next.js development?"}, {"output": "You can get started with its official developer guide."})
memory.save_context({"input": "Show me the link of the guide."}, {"output": "I'm looking for you now. Please stand by!"})
memory.load_memory_variables({})
随着交互次数的增加,ConversationSummaryMemory的Token开销相对平稳,这对于有许多交互的对话非常有效。
另外提到的Summary Buffer Memory结合了Summary和Buffer的优点,但本文未详细介绍。
以上内容提供了对LangChain记忆组件的概览和具体代码示例,您可以通过访问官方文档来学习更多。