跳到主要内容

内存

内存使LangChainGo应用程序能够在调用之间保持状态,维护对话上下文,并支持复杂的有状态交互。

关键概念

在LangChainGo中,内存提供了几个关键功能:

  • 对话历史记录:存储和检索过去的消息和响应
  • 上下文管理:跨多个交互维持相关上下文
  • 状态持久化:将对话状态保存到各种存储后端
  • 内存类型:不同的策略用于管理对话上下文
注意

不要在不同链之间共享同一个内存实例。每个内存实例代表一个单独对话的历史记录,应该保持隔离。

内存类型

缓冲区内存

将所有对话消息存储在一个简单的缓冲区内。适用于短对话,需要完整历史记录。

滑动窗口缓冲区内存

维护最近消息的滑动窗口。当您希望限制上下文长度的同时保留近期历史时很有用。

令牌缓冲区内存

基于令牌数量而不是消息数量管理内存。为LLM令牌限制提供精确控制上下文大小的能力。

总结内存

自动总结较旧的对话历史记录,同时保持最近的消息完整。在保持上下文和提高内存效率之间取得平衡。

聊天消息历史记录

提供一个较低级别的接口来管理单个聊天消息。适用于自定义内存实现。

存储选项

LangChainGo内存可以持久化到各种后端:

  • 内存存储:快速、临时的存储(默认)
  • 文件基础存储:简单的本地文件持久化
  • 数据库:SQL或NoSQL数据库集成
  • Redis:高性能、分布式内存存储
  • 自定义:实现您自己的存储后端

内存集成模式

与链一起使用

链自动处理内存集成:

chain := chains.NewConversationChain(llm, memory)

与代理一起使用

代理使用内存来维护工具调用之间的上下文:

agent := agents.NewConversationalAgent(llm, tools, agents.WithMemory(memory))

手动管理内存

对于自定义应用程序,直接管理内存:

// 添加用户消息
memory.ChatHistory.AddUserMessage(ctx, userInput)

// 添加AI响应
memory.ChatHistory.AddAIMessage(ctx, aiResponse)

// 获取对话历史记录
messages, err := memory.ChatHistory.Messages(ctx)

最佳实践

  1. 选择适当的内存类型:根据对话长度和上下文需求进行选择
  2. 监控内存使用情况:跟踪内存增长并实施清理策略
  3. 优雅处理错误:当内存操作失败时实现备用行为
  4. 考虑隐私问题:注意对话历史记录中的敏感数据
  5. 测试内存行为:验证内存在不同对话流程中正确工作

内存类