通过内存扩展技术提高LangChain的性能
我之前已经发表了关于LangChain的文章,介绍了该库及其所有功能。现在我想集中讨论一个关键方面,即如何在智能聊天机器人中管理内存。
聊天机器人或代理也需要一个信息存储机制,可以采取不同的形式并执行不同的功能。 在聊天机器人中实现内存系统不仅有助于使它们更聪明,而且对用户来说也更自然和有用。
幸运的是,LangChain提供了API,使开发人员可以轻松地在应用程序中实现内存。在本文中,我们将更详细地探讨这个方面。
在LangChain中使用内存
在开发聊天机器人时的最佳实践是保存聊天机器人与用户的所有交互。这是因为LLM的状态可能会根据过去的对话而改变,事实上,LLM对来自2个用户的相同问题也会有不同的回答,因为它们与聊天机器人的过去对话不同,因此处于不同的状态。
因此,聊天机器人内存所创建的东西不过就是一个旧消息列表,在新问题被问之前被反馈回来。当然,LLM的上下文是有限的,因此您必须有点创意并选择如何向LLM反馈这个历史。最常用的方法是返回旧消息的摘要或仅返回最新的N条最具信息量的消息。
从ChatMessageHistory开始
这是主要的类,允许我们管理聊天机器人(AI)和用户(Human)之间发生的消息。该类提供了以下两个主要方法。
- add_user_message:允许我们将消息添加到聊天机器人的内存中,并将消息标记为“用户”
- add_ai_message:允许我们将消息添加到聊天机器人的内存中,并将消息标记为“AI”
!pip install langchainfrom langchain.memory import ChatMessageHistoryhistory = ChatMessageHistory()history.add_user_message("Hi!")history.add_ai_message("Hey, how can I help you today?")#print messageshistory.messages
该类允许您进行各种操作,但在最简单的使用中,您可以将其视为不时将各种消息保存到列表中。然后,您也可以通过以下方式简单地遍历历史记录来查看所有已添加的消息。
for message in history.messages: print(message.content)
使用ConversationBufferMemory进行高级内存管理
ConversationBufferMemory 类在消息存储方面的行为与ChatMessageHistory类有些相似,但它提供了聪明的方法来检索旧消息。例如,我们可以检索旧消息,作为消息列表或作为一个大字符串,具体取决于我们需要什么。如果我们想要让LLM对过去的对话进行摘要,那么将过去的对话作为一个大字符串可能很有用。如果我们想要进行详细的分析,则可以逐条读取消息并提取列表。
同样,使用ConversationBufferMemory类,我们可以使用add_user_message和add_user_message方法将消息添加到历史记录中。另一方面,load_memory_variables方法用于以列表或字典形式提取旧消息,具体取决于指定的内容,让我们来看一个例子。
from langchain.memory import ConversationBufferMemorymemory = ConversationBufferMemory()memory.chat_memory.add_user_message("Hi, how are you?")memory.chat_memory.add_ai_message("hey,I am fine! How are you?")memory_variables = memory.load_memory_variables({})print(memory_variables['history'])
在多个对话中管理内存
我们已经看到了如何通过保存和检索消息来管理内存的玩具示例。 但在实际应用中,您可能需要管理几个会话的内存。 LangChain 允许您使用所谓的链来管理这种情况。 链只是各种简单或复杂步骤的工作流,使您能够实现某个目标。
例如,查找维基百科上的信息,因为无法回答某个问题的 LLM 是一个链。为了处理各种对话,只需为创建 ConversationChain 类的实例时创建的每个链关联一个 ConversationBufferMemory。这样,当调用模型的预测方法时,链的所有步骤都会运行,因此模型将读取对话的过去消息。让我们看一个简单的例子。
from langchain.llms import OpenAIfrom langchain.chains import ConversationChainfrom langchain.memory import ConversationBufferMemorymemory = ConversationBufferMemory()conversation = ConversationChain(llm= OpenAI(), memory=memory)conversation.predict(input="Hey! how are you?")
最后的想法
总之,内存是聊天机器人的关键组件,而 LangChain 提供了多个框架和工具来有效地管理内存。通过使用 ChatMessageHistory 和 ConversationBufferMemory 等类,您可以捕获和存储用户与 AI 的交互,并使用这些信息指导未来的 AI 响应。我希望这些信息能帮助您构建更智能、更有能力的聊天机器人!
在下一篇文章中,我将向您展示如何使用 LangChain 工具。
如果您觉得这篇文章有用,请在这里关注我 小猪AI!😉
结语
Marcello Politi
Linkedin , Twitter , Website