你的智能体不是记忆有问题,而是检索有问题
每个做 Agent 的团队都会在同一个地方撞墙,而且撞墙的顺序都一样。他们花一个下午就能把存储跑通,心里还挺美,然后接下来的三个月里慢慢发现:把信息存下来,和把正确的信息取出来,几乎是两码事。
为什么无状态模型需要外部层
语言模型是无状态的。它读入文本,预测输出,调用之间什么都不保留。此刻正在回答你问题的这个模型,并不记得你之前和它说过什么;一次请求结束,从它的视角看,刚才那轮对话已经不存在了。
所有让你觉得「它有记忆」的东西,其实都是在模型之外另建的一套系统。这套系统捕捉值得保留的信息,存到持久化的地方,在之后的调用里把相关片段喂回提示词。模型的权重一点儿没变。记忆活在模型外面,靠管理「什么内容进入上下文窗口」来起作用。
这个区别,比这个话题里的其他任何概念都重要。上下文窗口就是工作记忆:容量不小但有限,每次调用都从零重建,会话一结束就消失。持久化记忆则是窗口之外的一切,存放在能扛过重启、扛过时间的存储里。
每个记忆系统都有四个阶段
从五十行的原型到生产级平台,每个记忆系统做的都是同样的四个操作。
写入决定什么值得保留。粗糙的设计把每条消息原封不动存下来,存储里很快塞满噪音。好一些的设计会抽取那些持久的信号——稳定的事实、明确的偏好、已经确认的结果、用户的纠正——让转瞬即逝的闲聊自然过期。
存储把信息编码好,以备后用。常见做法是把每条记忆转换为一个能表达其含义的向量(embedding),再把向量和原始文本、元数据(比如时间戳和来源)一起存起来。向量提供语义搜索,结构化字段提供精确过滤,原始文本则留给最后注入。
检索在新任务到来时找出相关的记忆片段——几乎全部难点都集中在这一步。
注入在模型运行前,把这些记忆放进上下文窗口。
检索才是工程的用武之地
检索得太少,模型拿不到自己本已掌握的知识;检索得太多,预算被白白消耗、延迟上升,真正重要的细节反而被淹没。向量搜索按语义而非精确用词匹配,用户查询“取消订阅”时,即使记忆中没有任何共同关键词,也能找出关于“终止定期套餐”的旧记录——这是它的强项。但弱点恰好是强项的镜像:语义相似性会模糊精确的 token(词元),向量搜索容易漏掉那些往往最关键的确切词条,比如某个具体错误码、产品名或标识符。关键词搜索恰恰擅长这些场景。把两种搜索都跑一遍、合并结果,再用更昂贵的模型对合并后的候选做重排,效果稳定胜过单独使用任何一种。
当信息的价值在于关系而非原始文本时,知识图谱能回答相似度搜索无法回答的问题——沿着一条中间步骤链,追溯两个事实之间的连接。
这背后始终有个矛盾:记忆检索得太少,智能体会错过自己已有的知识;检索得太多,有用的记忆被淹没,成本和延迟节节攀升。好的检索,是在返回最小集合的同时,仍然保证智能体真正需要的信息都在里面。
决定什么值得记住
记忆设计本质上是个“放置”问题。智能体遇到的每条信息都有自然的归宿:在当前回合后丢弃、保留到本次会话结束,或提升为长期存储。这里可以借用认知科学的分类:语义记忆(semantic memory)保存事实,与何时习得无关;情景记忆(episodic memory)保存具体的过往事件;程序性记忆(procedural memory)保存习得的流程与技能。三种记忆需要不同的存储和检索策略,所以先分清面对的是哪一种,才不会把三者统统丢进同一个没有区分度的大杂烩。
放置得当,智能体显得连贯且知识渊博;放置不当——要么全留、要么全丢——它不是在噪音里沉没,就是永久性失忆。
这能带来什么
记忆之所以比微调更重要,在于它是非参数化的——把一条信息写进存储,不需要改动模型权重。写入即时的、便宜的、可逆的;而重新训练模型则又慢、又贵,还有风险。一个记忆良好的智能体可以在几秒钟内吸收一份新文档或纠正过去的错误,完全不用跑训练流程。如果你想看更完整的拆解——包括记忆类型、从本地 SQLite 文件到托管平台的各种存储方案,以及不同检索策略之间的对比——可以参阅《AI 智能体记忆完整指南》,从头到尾都有系统讲解。