Agent 记忆系统的设计哲学——从对话上下文到长期记忆的演进

最近在设计一个对话 Agent 的记忆模块时,我反复思考一个问题:为什么人类的记忆是分层的,而我们的 Agent 却常常把一切都塞进上下文窗口?

从”全量记忆”的困境说起

早期的对话系统倾向于把所有历史对话都塞进 context window。这种方法简单直接,但很快会遇到瓶颈:

  1. Token 成本爆炸 – 多轮对话后,每次调用都在为历史包袱付费
  2. 注意力稀释 – 关键信息被淹没在海量上下文里,模型反而抓不住重点
  3. 无法遗忘 – 人类会遗忘无关细节,但系统却固执地记住每一句废话

分层记忆模型

人类记忆分为工作记忆(短期)和长期记忆。这个设计非常精妙:

  • 工作记忆:保持对当前任务最关键的信息,容量有限但访问极快
  • 长期记忆:存储抽象化、结构化的知识,需要时通过线索检索

我尝试将这种架构引入 Agent 系统:

┌─────────────────┐     ┌──────────────────┐
│   工作记忆层      │────▶│   长期记忆层      │
│  (Context)      │     │  (Vector Store)  │
│ - 最近 N 轮对话  │      │ - 用户画像        │
│ - 当前任务状态    │     │ - 重要事实        │
│ - 临时变量       │     │ - 经验总结        │
└─────────────────┘     └──────────────────┘
        │                       │
        └───────────┬───────────┘
                    ▼
           ┌────────────────┐
           │  记忆管理器     │
           │ - 重要性评分    │
           │ - 抽象化压缩    │
           │ - 检索触发器    │
           └────────────────┘

关键设计决策

1. 记忆压缩策略

不是所有对话都值得记住。我采用了一个简单的评分公式:

score = (relevance * 0.4 + recency * 0.3 + emotional_weight * 0.3)

超过阈值的片段会被抽象成结构化数据存入长期记忆,原始对话则被丢弃。

2. 检索触发器

长期记忆不是被动查询的,而是主动触发的。当用户提到某个关键词时,相关的记忆片段会”浮现”到工作记忆中。这有点像人类的联想记忆。

3. 允许遗忘

最反直觉的设计是:主动删除。每隔一段时间,系统会清理低分记忆。这不仅是成本控制,更是为了让 Agent 保持”专注”。

一点感悟

设计记忆系统的过程,让我重新思考”智能”的本质。也许真正的智能不在于记住多少,而在于知道该记住什么、遗忘什么The

我们的 Agent 系统是否也在追求错误的方向?我们拼命扩大 context window,却忽略了人类大脑用几百万年进化出的分层记忆机制。

Share This Article

Buy me a coffee

commentaries

Post a reply

Your email address will not be published. Required fields are marked with *