概述
短期记忆(也称为会话记忆或对话记忆)存储:- 最近的对话消息 - 用户和助手的交流
- 工具调用历史 - 工具调用和结果的记录
- 会话状态 - 自定义元数据和上下文信息
- 时间上下文 - 基于时间的消息排序和过滤
记忆实现
AG-Kit 为不同的用例和部署场景提供多种短期记忆实现:InMemoryMemory
易失性内存存储,适用于开发、测试和单实例部署。 特性:- 快速读写操作
- 基于内容的相似度搜索
- 令牌感知的消息修剪
- 多会话支持
- 零外部依赖
- 开发和测试
- 单服务器应用
- 临时会话
- 原型开发
TDAIMemory
通过 TDAI 服务提供生产级可扩展性的云端持久化存储。 特性:- 持久化云存储
- 高级语义搜索
- 分布式会话管理
- 可选的本地缓存
- 生产就绪的可靠性
- 生产环境部署
- 多服务器应用
- 长期运行的会话
- 企业应用
TypeORMMemory
支持多种数据库并具有可自定义 schema 的灵活 ORM 存储。 特性:- 多数据库支持(MySQL、PostgreSQL、SQLite 等)
- 自定义实体定义
- 文档转换系统
- 分支和摘要架构
- TypeScript 类型安全
- 迁移支持
- 自定义数据库 schema
- 企业数据库集成
- 复杂数据关系
- 类型安全开发
MySQLMemory
扩展 TypeORMMemory 并具有 MySQL 特定功能的优化 MySQL 实现。 特性:- MySQL 特定优化
- 连接池
- 事务支持
- 索引优化
- 性能监控
- 基于 MySQL 的应用
- 高性能需求
- 企业 MySQL 部署
MongoDBMemory
具有灵活 schema 和水平扩展能力的 NoSQL 文档存储。 特性:- 基于文档的存储
- 灵活的 schema 设计
- 自动连接设置 - 无需手动创建客户端
- 连接字符串配置
- 水平扩展
- 聚合管道
- GridFS 支持大数据
- 连接池和选项
- NoSQL 应用
- 灵活的数据结构
- 水平扩展需求
- 面向文档的工作流
- 最小设置的快速原型开发
CloudBaseMemory
腾讯云 CloudBase 集成,用于无服务器云存储。 特性:- 无服务器架构
- 自动扩展
- 腾讯云集成
- 实时同步
- 内置安全性
- 腾讯云部署
- 无服务器应用
- 中国市场应用
- 自动扩展需求
快速入门
使用 InMemoryMemory 的基本用法
在生产环境使用 TDAIMemory
使用带有自定义 Schema 的 TypeORMMemory
使用 MongoDBMemory
使用 CloudBaseMemory
统一架构
分支和摘要系统
现在所有记忆实现都支持统一的分支和摘要架构,能够实现:- 对话分支: 创建用于实验的替代对话路径
- 自动摘要: 压缩长对话同时保留上下文
- 上下文工程: 智能令牌管理和上下文窗口优化(了解更多)
- 状态管理: 跨分支和摘要的持久化会话状态
自定义实体和文档转换
基于 TypeORM 的实现支持自定义实体定义和文档转换,以实现灵活的 schema 设计:核心操作
添加事件
向记忆中添加单个或多个对话事件。列出事件
使用过滤、分页和令牌限制检索事件。搜索事件
基于内容相似度搜索事件。删除事件
从记忆中删除特定事件。清空记忆
从存储中删除所有事件。多会话支持
两种记忆实现都支持多个隔离的会话。令牌管理
AG-Kit 提供自动令牌计数和修剪以管理 LLM 上下文窗口。与 Agent 集成
短期记忆与 AI Agent 无缝集成,实现自动上下文管理。 了解更多: 完整的 Agent 集成指南会话分支
会话分支支持对话实验和时间旅行功能。创建实验性对话路径,测试不同响应并回滚到以前的状态。会话分支目前由
InMemoryMemory 支持。如果调用分支方法,其他实现将抛出错误。创建分支
创建实验性对话路径而不丢失原始内容:使用事件检出进行时间旅行
检出到特定事件并删除其后的所有事件:高级分支操作
高级模式
上下文窗口管理
使用智能阈值和令牌限制自动管理 LLM 上下文窗口。有关全面的上下文工程策略,请参阅上下文工程指南。 上下文管理策略:- 自动阈值(推荐) - 具有可配置阈值的智能压缩
- 固定令牌限制 - 使用
maxTokens的简单硬限制 - 动态令牌分配 - 基于模型容量的计算限制
- 滑动窗口 - 带令牌约束的最近消息
- 压缩阶段: 在 preRotThreshold 的 80% → 删除冗余/重复内容
- 摘要阶段: 在 preRotThreshold 的 95% → 将较旧的消息压缩成摘要
- 保留: 最近的消息(由
recentToKeep指定)始终完整保留 - 互补性: 可与
maxTokens一起使用以提供额外保护
工具调用历史
存储和检索工具调用历史。自定义状态管理
为每个事件存储自定义元数据。最佳实践
1. 选择正确的实现
- 使用 InMemoryMemory 用于开发、测试和单实例应用
- 使用其他实现 用于生产、分布式系统和持久化存储需求
2. 管理令牌限制
始终考虑 LLM 上下文窗口限制:3. 一致地使用会话 ID
为多用户应用维护会话隔离:4. 清理旧会话
定期清除不活跃的会话以管理内存:5. 优雅地处理错误
性能考虑
InMemoryMemory
- 快速: 所有操作都在内存中
- 可扩展: 高效处理数千个事件
- 限制: 进程重启时数据丢失
- 内存使用: 随事件数量增长
TDAIMemory
- 持久化: 数据在重启后保留
- 分布式: 跨多个服务器工作
- 缓存: 可选的本地缓存以提高性能
- 网络: 需要对 TDAI 服务进行网络调用
实现对比
| 特性 | InMemory | TDAI | TypeORM | MySQL | MongoDB | CloudBase |
|---|---|---|---|---|---|---|
| 存储类型 | 易失性 | 云端 | 数据库 | 数据库 | NoSQL | 无服务器 |
| 持久化 | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
| 性能 | 最快 | 快速 | 快速 | 最快 | 快速 | 良好 |
| 可扩展性 | 单一 | 高 | 中等 | 高 | 很高 | 自动 |
| 自定义 Schema | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ |
| 分支支持 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| 摘要支持 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| 多数据库 | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ |
| 设置复杂度 | 无 | API Key | 中等 | 中等 | 很低 | 中等 |
| 最适合 | 开发/测试 | 生产 | 企业 | MySQL 应用 | NoSQL 应用 | 腾讯云 |