第37回 长期记忆——让智能体记住你

人能记住三分事,余下七分靠笔记。
笔记若乱成一团,翻到用时更费力。

第36回我们讲“反思循环”:写错题本,下一次带着错题本再试。
可看官马上会问:
“错题本放哪?放多久?谁能看?该忘的怎么忘?”

这就进入长期记忆(Long-Term Memory, LTM)的江湖。

一句话说透:

长期记忆不是把所有对话都存起来,而是把有用信息存成“可检索、可更新、可删除”的资产。

近年的研究把智能体记忆拆成多系统(短期、长期、情景、语义等),强调不同记忆类型服务不同任务,并讨论了长期能力缺口与“情景记忆”的重要性。12


一、为什么需要长期记忆:窗口再长也装不下“人生”

长上下文能装下一本书,装不下一年。
智能体一旦开始“长期办事”,会遇到三种现实需求:

  1. 跨会话:上次你说的偏好,这次要记得
  2. 跨任务:这家公司有个特殊流程,下次别再踩坑
  3. 可追溯:做错了能回放“当时依据了什么记忆”

窗口做得再长,也会贵,也会噪。
长期记忆的价值在于“把重要的沉淀成索引”。


二、记忆分几类:高二直觉版

把记忆按“用途”拆开看最清楚:

  • 短期记忆(STM):本轮对话上下文,窗口里那点东西
  • 情景记忆(Episodic):你做过的某一次事(时间、地点、反馈、结果)
  • 语义记忆(Semantic):总结出来的稳定事实(偏好、规则、常识)
  • 程序记忆(Procedural):怎么做事的技能/流程(像操作手册)

错题本属于情景记忆;
把错题本总结成“通用规则”就是语义记忆;
把规则写成状态机流程就是程序记忆(第38回要讲)。


三、长期记忆的三把尺:相关、最近、重要

一个记忆库如果不加排序,就会退化成“垃圾堆”。
常见的三把尺是:

  1. 相关性:和当前任务像不像
  2. 新近性:最近发生的更可能有用
  3. 重要性:影响大、风险高的记忆更该浮上来

这套尺子在很多系统里反复出现,因为它符合人类直觉:
你不会在紧急故障时翻三年前的闲聊。


四、极简可跑代码:用“相关+最近”挑出该想起的记忆

下面代码实现一个玩具记忆库:

  • 写入:每条记忆有文本与时间戳
  • 检索:用“关键词重合 + 新近性折扣”打分
import time


def tokens(s):
    return {x for x in s.replace(",", " ").replace("。", " ").split() if x}


def score(query, mem_text, age_sec):
    q = tokens(query)
    m = tokens(mem_text)
    overlap = len(q & m)
    recency = 1.0 / (1.0 + age_sec / 60.0)
    return overlap + recency


class Memory:
    def __init__(self):
        self.items = []

    def add(self, text):
        self.items.append((time.time(), text))

    def retrieve(self, query, k=3):
        now = time.time()
        scored = []
        for ts, text in self.items:
            age = now - ts
            scored.append((score(query, text, age), ts, text))
        scored.sort(reverse=True)
        return [(s, t) for s, _, t in scored[:k]]


if __name__ == "__main__":
    mem = Memory()
    mem.add("用户 偏好:回答要列引用,并给出可复现步骤。")
    mem.add("上次故障:缓存未做权限隔离,出现越权检索。")
    time.sleep(1)
    mem.add("约束:不要把内部链接直接返回给外部用户。")

    q = "这次上线要注意 缓存 权限 隔离"
    for s, t in mem.retrieve(q):
        print(round(s, 3), "->", t)

你会看到:
与“缓存/权限/隔离”相关的记忆更容易被捞出来,
且较新的记忆会有一点优势。

现实系统会用向量检索、图谱检索、甚至多级记忆路由,
但这段玩具代码足够说明:
长期记忆的关键不是存,而是“能找对”。


五、长期记忆的风险:记错、记烂、记越界

长期记忆一旦进入生产,最怕三类事故:

  1. 错记:把模型幻觉存成事实,越用越歪
  2. 烂记:大量无用碎片塞满库,检索全是噪声
  3. 越界:把不该记的敏感信息记下来了(隐私与合规)

所以长期记忆必须配三道闸:

  • 入口闸:什么信息允许入库(白名单/敏感检测)
    过程闸:每次调用记忆要记录来源与用途(可审计)
    退出闸:支持删除与过期(可遗忘)

这也与第28回“隐私保护”紧密相连:
记忆就是另一种数据库。


六、小结:记忆不是越多越好,是越“可控”越好

你把长期记忆当成“第二个大脑”容易失控;
把它当成“可检索的账本”才稳。

下一回(第38回)我们把账本升级为流程:
状态机工作流与可验证执行——
把计划变成可控分支,把失败变成可回滚的工程动作。

欲知后事如何,且听下回分解。


幻觉核查

  • 多记忆系统(STM/LTM/情景/语义/程序)作为智能体记忆框架:可核对相关论文对记忆分类与动机的描述。1
  • “情景记忆是长期能力缺口”的论点:可核对 position paper 的核心主张。2
  • 本回代码只展示极简检索打分结构,不代表工业级记忆路由、去重、压缩与隐私治理。

逻辑审计

  • 与第36回衔接:第36回讲“写错题本”,第37回讲“错题本如何存、如何找、如何忘”。
  • 与导读一致:导读强调“可核查与可验证执行”,长期记忆若不带审计与边界,就会成为新的幻觉源头。
  • 为第38回铺路:记忆解决“记住什么”,工作流解决“按什么顺序做”;下一回把计划落到状态机。

引用与溯源

Footnotes

  1. Multiple Memory Systems for Enhancing the Long-term Memory of Agent arXiv:2508.15294 (2025-08) https://arxiv.org/abs/2508.15294 2

  2. Position: Episodic Memory is the Missing Piece for Long-Term LLM Agents arXiv:2502.06975 (2025-02) https://arxiv.org/abs/2502.06975 2