记忆

短期记忆 vs 长期记忆

如何在 Session/Working Memory 与长期记忆之间划分职责

短期记忆 vs 长期记忆

本页从设计角度总结短期记忆与长期记忆的职责划分, 对应实现细节可参考:

短期记忆(Short-term / Working Memory)

pkg/sessionWorkingMemory 提供:

  • 作用域: 单个 Session/Thread/资源;
  • 存储位置: Session 状态服务(MySQL/Postgres/内存) + WorkingMemory Backend;
  • 使用场景:
    • 当前任务的状态(步骤/进度/中间结果);
    • 当前用户偏好(本轮会话强相关信息);
    • 工作流中的中间状态传递。

短期记忆通常会被频繁覆盖/总结, 不适合作为长期知识库。

长期记忆(Long-term Memory)

长期记忆分为两类:

  1. 文本长期记忆(文件式):
    • 使用 AgentMemoryMiddleware + memory.Scope + memory_write/memory_search;
    • 存储在本地/远程文件系统, 方便人工审阅与版本管理;
    • 适合设计决策、项目规范、用户档案等「结构化但不依赖语义检索」的内容。
  2. 语义长期记忆(向量式):
    • 使用 SemanticMemory + VectorStore + Embedder;
    • 通过自然语言查询 + 向量检索获取相关片段;
    • 适合大规模知识库、教学对话、分散在多轮会话中的知识性内容。

从短期到长期

在 aster 中, 推荐通过一个统一的桥接层将短期 Session 中的知识性内容保存到长期记忆:

  • 文本长期记忆: 在业务逻辑中调用 memory_write, 将重要信息写入特定 namespace 下的 Markdown 文件;
  • 语义长期记忆: 使用 LongTermBridge.SaveSessionToSemanticMemory, 将 Session 事件拼接成文档, 写入 SemanticMemory

这样可以做到:

  • 会话过程中使用短期记忆维持状态与上下文;
  • 在关键时刻(例如“请记住我的偏好/秘密/配置”)将信息「上岸」为长期记忆。