问题
把所有历史一股脑塞进上下文行不通;只用滑动窗口又会"突然遗忘"。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 工具