LangChain 通过专用组件来管理对话状态和记忆,这些组件可以跟踪和构建随时间推移的交互。 核心是,LangChain 提供了旨在存储和检索历史消息的记忆类,从而为语言模型提供对话上下文。 这些类处理短期交互(如单个聊天会话)以及需要实体跟踪或摘要的更复杂场景。 记忆通常集成到链或代理中,使系统能够在每次交互期间自动更新和访问对话历史记录。
LangChain 提供了几种针对不同需求的记忆类型。 例如,ConversationBufferMemory 将消息的原始历史记录存储在列表中,这使其简单,但对于长时间的对话来说效率可能较低。 ConversationBufferWindowMemory 仅保留最近的消息(例如,最近的五个交流),以避免使用过多的上下文来压倒模型。 对于更长的对话,ConversationSummaryMemory 生成过去交互的压缩摘要,从而减少令牌的使用,同时保留要点。 此外,ConversationEntityMemory 提取并跟踪对话中提到的特定实体(如姓名或日期),允许模型稍后引用它们。 这些选项使开发人员能够在上下文深度与计算约束之间取得平衡。
开发人员通过初始化记忆对象并将其附加到链或代理来实现记忆。 例如,当使用 ConversationChain
时,您可以使用 ConversationBufferMemory
对其进行配置,以将完整历史记录传递到每个提示中。 这是一个简化的示例
from langchain.memory import ConversationBufferMemory
memory = ConversationBufferMemory()
chain = ConversationChain(llm=llm, memory=memory)
chain.run("Hello!") # Stores user input and AI response in memory
记忆数据也可以持久保存到数据库或文件中,以用于多会话应用程序。 默认情况下,记忆被构造为键值对(例如,{"input": "Hi", "output": "Hello!"}
),链将其格式化为提示。 开发人员可以自定义历史记录的存储方式(例如,修剪消息)或检索方式(例如,仅注入相关的片段),从而确保了针对特定用例(如聊天机器人或数据分析工具)的灵活性。