LangChain的记忆组件

第一部分:什么是记忆组件?

记忆组件是对话系统中的一项关键技术,它允许系统存储和引用对话历史中的信息。在LangChain中,记忆组件可以作为独立工具使用,也可以整合进链式处理中。记忆组件需要支持两个基本操作:读取和写入。

友情链接:ACEJoy

第二部分:他们是如何工作的?

在LangChain与LLM的每次交互中,链将执行两次记忆操作:

  1. 读取:在执行核心逻辑之前,链会从记忆系统中读取信息,以此来增强用户输入。
  2. 写入:在核心逻辑执行后、返回答案前,链会将当前的输入和输出写入记忆中,为将来的运行提供参考。

记忆组件的设计需考虑两个核心问题:如何存储历史信息,以及如何查询这些信息。

第三部分:三种基础记忆组件详解

LangChain提供了三种基本记忆组件类型:

  1. ConversationBufferMemory:直接记录对话历史消息的列表。
  2. ConversationBufferWindowMemory:记录对话历史,但仅保留最近的K个交互。
  3. 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记忆组件的概览和具体代码示例,您可以通过访问官方文档来学习更多。

发表评论