记忆系统(Memory System)

记忆系统是 LLM Agent 的核心组件之一,它决定了 Agent 如何存储、检索和利用信息。一个良好的记忆系统能够让 Agent 具备上下文感知能力和长期学习能力。

短期记忆 vs 长期记忆

短期记忆(Short-term Memory)

短期记忆通常指当前对话或会话的上下文,包括:

  • 当前对话的历史消息

  • 最近的工具调用结果

  • 临时的变量和状态信息

特点

  • 生命周期短,通常只在单次会话中有效

  • 存储在内存中,访问速度快

  • 受限于模型的上下文窗口长度

长期记忆(Long-term Memory)

长期记忆是指跨越多个会话的持久化信息存储,包括:

  • 用户偏好和历史交互记录

  • 知识库和文档索引

  • Agent 的经验和学习成果

特点

  • 持久化存储,可以跨会话使用

  • 通常使用向量数据库或传统数据库

  • 需要有效的检索机制

向量数据库的使用

向量数据库是实现长期记忆的关键技术,它能够将文本转换为向量并进行高效的相似度搜索。

主流向量数据库对比

数据库

特点

适用场景

开源

Chroma

轻量级,易集成

原型开发、小规模应用

Pinecone

托管服务,高性能

生产环境、大规模应用

Weaviate

功能丰富,支持混合搜索

复杂应用场景

Milvus

高性能,分布式

大规模向量搜索

Qdrant

Rust 编写,性能优秀

高性能要求场景

向量数据库工作流程

  1. 文本嵌入(Embedding):将文本转换为向量表示

  2. 向量存储:将向量存入数据库并建立索引

  3. 相似度搜索:根据查询向量找到最相关的向量

  4. 结果检索:返回原始文本内容供 Agent 使用

记忆检索和上下文管理

检索策略

1. 基于相似度的检索

  • 使用余弦相似度或欧氏距离

  • 适合语义相似性搜索

  • 可能返回不完全相关但语义相近的结果

2. 基于关键词的检索

  • 使用传统的倒排索引

  • 适合精确匹配场景

  • 可以与向量检索结合使用(混合检索)

3. 分层检索

  • 先进行粗粒度筛选,再进行细粒度排序

  • 平衡检索速度和准确性

  • 适合大规模数据集

上下文窗口管理

由于 LLM 的上下文窗口有限(通常 4K-32K tokens),需要有效的上下文管理策略:

1. 滑动窗口

  • 保留最近的 N 条消息

  • 简单直接,但可能丢失重要历史信息

2. 重要性采样

  • 根据消息的重要性进行采样

  • 保留关键信息,丢弃冗余内容

  • 需要定义重要性评估标准

3. 摘要压缩

  • 对历史对话进行摘要

  • 减少 token 消耗,保留核心信息

  • 可能丢失细节信息

4. 分块存储

  • 将长对话分割成多个块

  • 根据当前任务选择相关块

  • 需要有效的块选择策略

实践建议

1. 选择合适的记忆架构

  • 简单应用:使用短期记忆 + 基础向量数据库

  • 复杂应用:结合短期记忆、长期记忆和外部知识库

  • 企业级应用:考虑多层记忆架构和缓存策略

2. 优化检索性能

  • 建立合适的索引结构

  • 使用缓存减少重复查询

  • 监控检索延迟和准确性

3. 处理记忆一致性

  • 确保记忆更新的原子性

  • 处理并发访问的冲突

  • 实现记忆版本控制

4. 安全和隐私考虑

  • 敏感信息的加密存储

  • 访问权限控制

  • 数据生命周期管理

总结

记忆系统是 LLM Agent 智能化的关键,它让 Agent 能够记住过去的经验并在此基础上做出更好的决策。通过合理设计短期记忆和长期记忆的架构,结合高效的检索策略和上下文管理机制,可以显著提升 Agent 的性能和用户体验。