记忆系统(Memory System)¶
记忆系统是 LLM Agent 的核心组件之一,它决定了 Agent 如何存储、检索和利用信息。一个良好的记忆系统能够让 Agent 具备上下文感知能力和长期学习能力。
短期记忆 vs 长期记忆¶
短期记忆(Short-term Memory)¶
短期记忆通常指当前对话或会话的上下文,包括:
当前对话的历史消息
最近的工具调用结果
临时的变量和状态信息
特点:
生命周期短,通常只在单次会话中有效
存储在内存中,访问速度快
受限于模型的上下文窗口长度
长期记忆(Long-term Memory)¶
长期记忆是指跨越多个会话的持久化信息存储,包括:
用户偏好和历史交互记录
知识库和文档索引
Agent 的经验和学习成果
特点:
持久化存储,可以跨会话使用
通常使用向量数据库或传统数据库
需要有效的检索机制
向量数据库的使用¶
向量数据库是实现长期记忆的关键技术,它能够将文本转换为向量并进行高效的相似度搜索。
主流向量数据库对比¶
数据库 |
特点 |
适用场景 |
开源 |
|---|---|---|---|
Chroma |
轻量级,易集成 |
原型开发、小规模应用 |
✅ |
Pinecone |
托管服务,高性能 |
生产环境、大规模应用 |
❌ |
Weaviate |
功能丰富,支持混合搜索 |
复杂应用场景 |
✅ |
Milvus |
高性能,分布式 |
大规模向量搜索 |
✅ |
Qdrant |
Rust 编写,性能优秀 |
高性能要求场景 |
✅ |
向量数据库工作流程¶
文本嵌入(Embedding):将文本转换为向量表示
向量存储:将向量存入数据库并建立索引
相似度搜索:根据查询向量找到最相关的向量
结果检索:返回原始文本内容供 Agent 使用
记忆检索和上下文管理¶
检索策略¶
1. 基于相似度的检索¶
使用余弦相似度或欧氏距离
适合语义相似性搜索
可能返回不完全相关但语义相近的结果
2. 基于关键词的检索¶
使用传统的倒排索引
适合精确匹配场景
可以与向量检索结合使用(混合检索)
3. 分层检索¶
先进行粗粒度筛选,再进行细粒度排序
平衡检索速度和准确性
适合大规模数据集
上下文窗口管理¶
由于 LLM 的上下文窗口有限(通常 4K-32K tokens),需要有效的上下文管理策略:
1. 滑动窗口¶
保留最近的 N 条消息
简单直接,但可能丢失重要历史信息
2. 重要性采样¶
根据消息的重要性进行采样
保留关键信息,丢弃冗余内容
需要定义重要性评估标准
3. 摘要压缩¶
对历史对话进行摘要
减少 token 消耗,保留核心信息
可能丢失细节信息
4. 分块存储¶
将长对话分割成多个块
根据当前任务选择相关块
需要有效的块选择策略
实践建议¶
1. 选择合适的记忆架构¶
简单应用:使用短期记忆 + 基础向量数据库
复杂应用:结合短期记忆、长期记忆和外部知识库
企业级应用:考虑多层记忆架构和缓存策略
2. 优化检索性能¶
建立合适的索引结构
使用缓存减少重复查询
监控检索延迟和准确性
3. 处理记忆一致性¶
确保记忆更新的原子性
处理并发访问的冲突
实现记忆版本控制
4. 安全和隐私考虑¶
敏感信息的加密存储
访问权限控制
数据生命周期管理
总结¶
记忆系统是 LLM Agent 智能化的关键,它让 Agent 能够记住过去的经验并在此基础上做出更好的决策。通过合理设计短期记忆和长期记忆的架构,结合高效的检索策略和上下文管理机制,可以显著提升 Agent 的性能和用户体验。