问题

把所有历史一股脑塞进上下文行不通;只用滑动窗口又会"突然遗忘"。Agent 需要像人一样的记忆体系:刚说的话记得清、重要的事忘不了、陈年的经验能召回。

核心模式

分层记忆:按时效与容量分三层,层间有明确的写入/晋升/淘汰规则。

class LayeredMemory:
    working: list     # 工作记忆:当前对话窗口,全量在上下文里
    episodic: store   # 情景记忆:会话级摘要,按会话检索
    semantic: store   # 语义记忆:跨会话提炼的事实/偏好/知识

    def on_turn_end(self, turn):
        self.working.append(turn)
        if len(self.working) > WINDOW:
            old = self.working.pop_oldest(n=10)
            self.episodic.add(summarize(old))        # 溢出 → 情景层

    def on_session_end(self, session):
        facts = extract_facts(session)                # 跨会话沉淀
        self.semantic.merge(facts)                    # 晋升 → 语义层

推理时按需装配:工作记忆全量 + 情景记忆按任务召回 + 语义记忆按用户/领域召回——这就是第 01 讲分诊器的记忆后端。

实战要点

  • 语义记忆的写入要保守:一次"我喜欢辣味"不该永久改变用户画像,设置信度或次数阈值,多次确认再沉淀
  • 每层独立设置保留策略:工作记忆按轮数,情景记忆按会话数,语义记忆按冲突合并(新事实覆盖旧事实并记录时间)
  • 记忆召回要注入时间戳,"三个月前你说预算 5 万"比"你预算 5 万"更准确
  • 参考实现:MemGPT/Letta 的分层换页思想、Claude 的 memory 工具