内存
内存使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)
最佳实践
- 选择适当的内存类型:根据对话长度和上下文需求进行选择
- 监控内存使用情况:跟踪内存增长并实施清理策略
- 优雅处理错误:当内存操作失败时实现备用行为
- 考虑隐私问题:注意对话历史记录中的敏感数据
- 测试内存行为:验证内存在不同对话流程中正确工作
内存类
📄️ 内存
概念指南 • 操作指南