Agent 记忆系统设计:短期记忆、长期记忆与记忆污染治理


开篇:没有记忆,Agent 不连续;记忆失控,Agent 不可信

很多团队在 Agent 上线后会遇到两个相反的问题:

  1. 记不住:每轮都像第一次对话,用户体验割裂
  2. 记太多:旧信息污染当前任务,甚至泄露不该引用的上下文

这说明一个关键事实:

记忆系统不是“多存一点上下文”这么简单,它本质是状态管理系统。

真正可用的 Agent 记忆,必须同时满足:

  • 连续性(能延续任务)
  • 正确性(不被过期信息误导)
  • 可控性(可审计、可删除、可失效)

一、先统一概念:Agent 里到底有哪几种“记忆”

1.1 短期记忆(Session Memory)

  • 范围:单次会话或单任务周期
  • 内容:最近对话、当前任务参数、步骤进度
  • 生命周期:分钟级到小时级

用途:保证多轮交互连续性。

1.2 长期记忆(Long-term Memory)

  • 范围:跨会话长期保留
  • 内容:偏好、习惯、历史决策摘要、常见问题背景
  • 生命周期:天级到月级

用途:提升个性化和长期效率。

1.3 用户画像记忆(Profile Memory)

  • 范围:结构化事实信息
  • 内容:角色、部门、权限、常用系统、语言偏好
  • 生命周期:受业务主数据约束

用途:作为决策“硬上下文”,不能由模型随意改写。

1.4 工作记忆(Working Memory)

  • 范围:当前推理中间结果
  • 内容:草稿、候选计划、中间判断
  • 生命周期:极短,任务结束即清理

用途:支持复杂任务拆解,但不应默认持久化。


二、记忆架构:建议“分层存储 + 分级召回”

用户请求

Orchestrator

Session Memory Store

Profile Store

Long-term Memory Store

Knowledge Base/RAG

Context Builder

LLM/Agent Runtime

Memory Writeback Policy

关键点:

  • 不是所有信息都进长期记忆
  • 记忆写入必须经过策略层(Writeback Policy)
  • 召回必须有优先级和过滤条件

三、写入策略:先判定“值不值得记”

很多系统最大的问题是“什么都记”。
这样会快速导致噪声堆积和误召回。

3.1 推荐写入判定规则

仅当满足以下条件之一才写入长期记忆:

  • 对后续任务有明确复用价值
  • 是用户明确确认的偏好(例如语言、格式)
  • 是稳定事实(例如岗位、权限范围)
  • 经人工/系统校验为高置信信息

不建议写入的内容:

  • 一次性临时对话
  • 情绪性表达
  • 未核验的推测结论
  • 高敏感信息(除非合规允许且加密存储)

3.2 写入前的“压缩与摘要”

不要直接存整段对话,建议存结构化摘要:

{
  "memory_type": "user_preference",
  "user_id": "u_123",
  "content": "偏好简洁回答,优先表格",
  "confidence": 0.92,
  "source": "conversation_20260508_01",
  "expires_at": "2026-08-08T00:00:00Z"
}

这能显著降低噪声和存储成本。


四、召回策略:不是“全量塞进 Prompt”

很多 Agent 的不稳定,本质是上下文过载和记忆冲突。

4.1 分层召回优先级(推荐)

  1. Profile(硬约束事实)
  2. 当前 Session(最近任务上下文)
  3. 长期记忆(相关偏好/历史)
  4. 外部知识库(RAG)

4.2 召回过滤条件

  • 时间衰减:越新的权重越高
  • 来源可信度:人工确认 > 自动抽取
  • 任务相关度:只召回与当前意图相关记忆
  • 权限范围:跨租户/跨角色严格隔离

五、记忆污染:Agent 项目里的“慢性故障”

所谓记忆污染,是指错误、过期、冲突信息进入记忆并被持续复用。

典型表现:

  • 用户已更换部门,Agent 仍按旧权限回答
  • 一次误识别的偏好长期影响输出风格
  • 旧流程规则覆盖新制度

5.1 污染来源

  1. 自动写入阈值过低
  2. 没有过期机制
  3. 没有冲突检测
  4. 没有删除/更正通道

5.2 治理手段(Memory Hygiene)

  • 记忆 TTL(自动失效)
  • 版本标记(source + updated_at)
  • 冲突仲裁(新旧冲突时按可信度和时间决策)
  • 用户可见与可删(遵循数据治理要求)

六、冲突处理:当两条记忆打架时怎么办

建议建立显式冲突策略,而不是让模型“自己理解”。

6.1 冲突仲裁规则(示例)

优先级从高到低:

  1. 主数据系统事实(HR/CRM/权限系统)
  2. 人工确认记忆
  3. 近期高置信记忆
  4. 旧自动抽取记忆

6.2 冲突返回策略

对高风险任务(审批、财务、法务):

  • 冲突即中止自动执行
  • 返回“信息冲突,需人工确认”

对低风险任务:

  • 使用最高优先级记忆
  • 在回答中注明依据来源

七、代码示例:最小可用 Memory Manager(Python)

from dataclasses import dataclass
from datetime import datetime, timedelta
from typing import List

@dataclass
class MemoryItem:
    user_id: str
    memory_type: str
    content: str
    confidence: float
    source: str
    created_at: datetime
    expires_at: datetime

class MemoryManager:
    def __init__(self, store):
        self.store = store

    def should_write(self, item: MemoryItem) -> bool:
        if item.confidence < 0.8:
            return False
        if item.memory_type not in {"user_preference", "stable_fact", "task_pattern"}:
            return False
        return True

    def write(self, item: MemoryItem):
        if not self.should_write(item):
            return
        self.store.upsert(item)

    def recall(self, user_id: str, intent: str, limit: int = 8) -> List[MemoryItem]:
        candidates = self.store.query(user_id=user_id, intent=intent)
        now = datetime.utcnow()
        filtered = [m for m in candidates if m.expires_at > now]
        filtered.sort(key=lambda x: (x.confidence, x.created_at), reverse=True)
        return filtered[:limit]

    def cleanup(self):
        self.store.delete_expired(datetime.utcnow())

# 写入示例
item = MemoryItem(
    user_id="u_1001",
    memory_type="user_preference",
    content="偏好输出带步骤列表",
    confidence=0.93,
    source="session_20260508_1",
    created_at=datetime.utcnow(),
    expires_at=datetime.utcnow() + timedelta(days=30),
)

这段代码体现三个工程原则:

  • 写入要有阈值(不是全收)
  • 召回要有过滤(不是全取)
  • 存储要有清理(不是只增不减)

八、记忆与 RAG 的边界:不要混成一个桶

很多团队把“用户长期偏好”和“企业知识库片段”混在同一向量库召回。
结果是:

  • 回答时把用户偏好当事实
  • 把知识文档当个性化记忆

建议明确分层:

  • RAG:外部客观知识(制度、文档、FAQ)
  • Memory:用户与任务状态(偏好、历史、上下文)

两者在 Context Builder 层融合,而不是在存储层混存。


九、多 Agent 场景下的记忆共享策略

在多 Agent 架构里,记忆共享要“最小必要原则”。

9.1 推荐共享模型

  • Supervisor 读全局任务状态
  • Specialist 只读本子任务相关记忆
  • 高风险记忆(权限、合规)只读不可写

9.2 防止“错误扩散”

  • 子 Agent 产出的中间记忆默认不入长期库
  • 必须经过 Review Agent 或规则校验才可写入

十、可观测性:没有记忆观测,就没有治理能力

建议监控这些指标:

  • 记忆写入成功率
  • 召回命中率(是否被模型实际使用)
  • 过期清理率
  • 冲突率
  • 用户纠错率(用户说“你记错了”)

线上交互

记忆写入日志

记忆召回日志

污染检测

规则优化

灰度发布


十一、合规与隐私:记忆系统必须可治理

尤其在企业场景,记忆系统常涉及个人信息。
必须具备:

  • 数据最小化(只存必要字段)
  • 可删除能力(用户请求删除时可执行)
  • 可审计能力(知道何时写入/读取)
  • 敏感字段加密与脱敏
  • 租户隔离与权限控制

原则:

记忆系统首先是数据系统,其次才是 AI 系统。


十二、上线 Checklist(记忆系统专项)

设计层

  • 已拆分短期/长期/Profile 记忆
  • 写入策略有明确阈值与白名单
  • 召回策略有相关性与时间过滤

治理层

  • TTL 与清理任务已启用
  • 冲突检测与仲裁规则已定义
  • 用户纠错与删除流程可执行

风险层

  • 敏感数据加密与脱敏已上线
  • 记忆读写日志可审计
  • 租户隔离已验证

结语

记忆是 Agent 连续体验的核心,也是不稳定风险的来源。
真正成熟的记忆系统,不是“记得多”,而是“记得准、忘得掉、可治理”。

会记忆的 Agent 很常见,
会治理记忆的 Agent 才能进生产。


下一篇预告

下一篇进入生产工程核心:

《生产级可靠性:从能跑到稳定(超时、重试、限流、降级、回放)》

重点包括:

  • 全链路可靠性设计蓝图
  • 故障隔离与降级矩阵
  • 线上事故排查与回放机制
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐