许多开发者构建的聊天机器人和 AI 助手,单独回答问题时表现出色,但在保持连贯对话方面却举步维艰。根本原因?缺乏记忆。当用户在后续提问中引用先前上下文时,无状态的语言模型会将其视为全新的问题,导致令人沮丧且重复的交互。
理解并实现大型语言模型中的记忆,对于打造自然且智能的 AI 应用至关重要。记忆使 LLM 能够在对话中保持上下文,从过往交互中学习,并提供个性化响应。在本教程中,我将带您了解 LLM 记忆的基本原理,从基础的上下文窗口到先进的架构。
如果您刚接触 LLM,建议先学习我们的课程,例如使用 LangChain 开发 LLM 应用、大型语言模型开发,或LLMOps 概念。
什么是 LLM 记忆?
大型语言模型处理信息的方式不同于传统软件。数据库以显式方式存储和检索数据,而 LLM 必须在上下文窗口和 token 限制等架构约束内管理记忆。挑战在于让模型记住相关信息,同时忘记不必要的细节,在不压垮算力资源的前提下保持连贯性。
在深入实现细节前,我们先明确在大型语言模型语境中,“记忆”意味着什么,以及为什么它对构建高效 AI 应用至关重要。
大型语言模型中记忆的基础
LLM 的记忆是指系统保留并利用先前交互或训练数据中的信息的能力。这并非传统计算意义上的记忆,而是模型在对话中维持上下文、引用先前交流,并将所学模式应用于新情境的能力。
记忆之所以关键,是因为它能将零散的问答对转化为连贯的对话。没有记忆,LLM 无法理解您说“再多谈谈那个”的含义。模型需要上下文来解释指代并在先前交流的基础上推进。
我常把 LLM 记忆与人类记忆类比。人类有感觉记忆(即时感知)、短时记忆(活跃信息)和长时记忆(储存知识)。LLM 也有类似系统:上下文窗口相当于短时记忆,检索到的信息相当于被回忆起的长时记忆,而已训练的参数代表永久性知识。
既然已经介绍了 LLM 记忆的基本概念,接下来我们看看记忆系统如何分类,以便您为具体应用选择合适的方法。
LLM 记忆分类的三个维度
了解记忆如何分类有助于为您的应用选择正确的方法。LLM 记忆可从三个关键维度进行划分:对象、形式和时间。
对象维度
所谓对象维度,是区分个人记忆与系统记忆。个人记忆存储用户特定的信息,如偏好和对话历史。
系统记忆包含所有用户都可用的一般知识与能力。客服机器人可能使用系统记忆来提供产品信息,同时为每位客户维护其订单历史这一个人记忆。
形式维度
第二个维度是形式维度,用于区分参数化与非参数化记忆。参数化记忆在训练期间编码进模型权重中。非参数化记忆存在于模型之外,存储于数据库或向量库。参数化记忆在训练后固定,而非参数化记忆可动态更新。
时间维度
最后,时间维度按持续时间来划分记忆:短期与长期。短期记忆覆盖当前对话,存放于上下文窗口;长期记忆跨会话持久存在,外部存储并在需要时检索。
建立了这一分类框架后,我们来看 LLM 在实践中如何具体实现这些类型的记忆。
LLM 中的记忆类型
不同的记忆类型在 LLM 应用中承担不同职责。理解这些类型有助于您为具体场景设计有效的记忆架构。
语义记忆
语义记忆存储系统可访问和引用的事实与通识。虽然模型通过训练拥有基础知识,但在实践中,语义记忆通常指包含事实信息的外部知识库、数据库或文档库。
例如,客服机器人可以在向量数据库中维护产品规格、定价信息和公司政策等语义记忆。这样系统便可检索并引用准确且最新的事实,而不必完全依赖可能已过时的训练数据。语义记忆通常存放于外部,并在需要时检索,便于更新和维护。
情景记忆
语义记忆处理事实与知识,而情景记忆侧重具体经历。情景记忆捕捉过往交互:问了什么、模型如何回应,以及这些交流的上下文。
情景记忆使模型能够自然地引用对话早先部分,例如“正如我们之前讨论的”或“基于您告诉我关于项目的信息”。此类记忆通常是非参数化的,存储在对话缓冲区或数据库中。
程序性记忆
程序性记忆涵盖系统指令与习得流程。这包括定义 AI 行为的系统提示、响应指南,以及任务特定的指令。
当您将模型配置为“始终以要点形式回复”或“优先准确性而非创造性”时,您就在设置程序性记忆。它影响的是模型如何处理并回应信息,而非它知道哪些信息。

记忆类型
除了这些基本记忆类型之外,实际落地时,尤其是在LangChain 等框架中,还提供多种会话记忆形式。
ConversationBufferMemory 以原样存储全部消息,保留完整对话历史,适用于需要完整上下文的短对话。
ConversationSummaryMemory 将过往交互压缩为摘要,在较长对话中以较少 token 保留关键信息。
ConversationBufferWindowMemory 仅保留最近的 N 条消息,形成滑动窗口,当仅近期交流重要时效果良好。
ConversationSummaryBufferMemory 结合上述方法,对近期消息原样保留,同时对更早的交流进行摘要,在细节与效率之间取得平衡。每种形式都在完整性与效率之间取舍,可根据应用需求选择。
了解这些记忆类型很重要,但它们都受制于一个基本约束:上下文窗口。下面来看看这种架构限制如何塑造记忆的实现方式。
LLM 上下文窗口:基础与约束
我认为理解 LLM 记忆的关键之一是上下文窗口的概念。我们简要看看它们如何工作。
什么是上下文窗口?
上下文窗口是指 LLM 在一次请求中可处理的最大文本量,以 token 计。Token 是文本片段,大致对应词或子词。
上下文窗口相当于模型的即时工作记忆。模型考虑的一切都必须放进这个窗口:系统提示、对话历史、检索到的文档以及响应空间。随着对话增长,旧消息必须为新消息让位而被移除。
上下文窗口大小差异很大。例如,GPT-5 支持 400,000 个 token,Claude 4.5 Sonnet 支持 200,000 个 token,而 Gemini 3 Pro 可扩展至 150 万个 token。更大的窗口能提供更丰富的上下文,但计算成本呈二次增长。
尽管更大的上下文窗口听起来理想,但它们在实际部署中会带来显著的挑战。
上下文窗口的挑战与限制
以我的经验,最大的问题是“中间遗失”现象。研究显示,LLM 更关注上下文窗口的开头与结尾信息,而中间内容的注意力较低。仅仅把大量信息塞进上下文并不保证能被有效利用。

准确率 vs. 含答案文档的位置
计算约束使得扩展上下文窗口的成本高昂。处理 100,000-token 的上下文所需的 GPU 显存与时间,远高于 10,000-token 的上下文。
在生产应用中,这些成本会迅速累积,因此需要智能的记忆系统,仅有选择性地纳入相关信息。
鉴于这些限制,解决方案并非单纯扩大上下文窗口,而是构建更聪明、能高效使用窗口的系统。
将上下文窗口与记忆系统融合
高效的 LLM 应用会将上下文窗口与超越即时上下文的记忆系统相结合。常见模式是:用上下文窗口承载短期、高优先级的信息,同时将长期记忆存于外部,并按需选择性检索。
一种典型架构是在上下文窗口中保留近期对话轮次,将更早的对话存入数据库,并通过检索机制在需要时把相关过往信息带回。这在完整性、效率与性能之间取得平衡。

短期/长期记忆
有了上述架构理解,接下来看看如何在这些约束内实现高效的短期记忆系统。
在 LLM 中实现短期记忆系统
短期记忆系统在当前会话内管理信息,主要依赖上下文窗口。我将其视为模型的工作记忆——模型在处理当前对话时主动持有的信息。
下面来看看如何最大化这个有限却至关重要的记忆空间。
上下文内学习
上下文内学习指模型根据提示中的示例或指令来调整行为的能力。您通过在上下文窗口中展示范例来“教学”,而非进行微调。
机制很直接:
- 包含目标行为的示例,模型便能学习其模式。
- 例如情感分类,提供若干文本-情感配对作为示例,然后给出新文本。模型据此归纳并应用该模式。
这种方法的优势包括:
- 无需再训练即可快速适配任务
- 通过修改提示灵活改变行为
- 用少量示例教授特定领域任务。
局限性包括:示例过多时受“中间遗失”影响而效果下降、token 成本增加,且性能难以匹敌微调模型。
上下文内学习展示了短期记忆的可能性,但信息究竟如何被“写入”供模型使用?下面探讨记忆形成的机制。
记忆的写入与存储
LLM 系统中的记忆形成可以是有意识(显式)或无意识(隐式)的。
- 显式形成包括明确指示系统记住信息,或实现从对话中提取关键信息并进行存储的机制。
- 隐式形成则通过对话流程自动发生。随着消息在上下文窗口中累积,它们隐式地提供记忆。
许多框架会自动维护对话缓冲区,无需显式操作即可形成隐式记忆。挑战在于如何管理这种累积,确保相关信息得以保留,同时修剪不那么重要的细节。
短期记忆满足的是即时对话需求,那么当您需要信息在当前会话之外持续存在时怎么办?这就需要长期记忆方案。
LLM 的长期记忆解决方案
长期记忆使 LLM 能够跨会话维持信息。
短期记忆是短暂的,会在对话结束后消失;而长期记忆会持久存在,使您的 AI 能够随着时间推移记住用户偏好、过往交互与积累的知识。
我将重点介绍两种方法:将信息存于外部的基于文本的记忆系统,以及优化模型访问先前计算结果的键值缓存。
基于文本的记忆系统
基于文本的记忆将对话历史与用户信息存储在数据库或向量库中。获取环节包括捕捉相关信息、偏好、决策、事实或情境细节。
记忆管理需要压缩与组织。通过摘要技术将对话压缩为要点;通过层级化结构按主题、时间或相关性来组织记忆。
利用环节聚焦检索。向量相似度搜索按语义找到相关记忆;基于时间的检索优先最近信息;相关性评分用于对记忆按重要性排序。
基于文本的系统解决了“存什么”的问题,但“如何更高效地取回”同样重要。这正是键值缓存发挥作用的地方。
键值缓存与注意力优化
键值(KV)缓存可提升 token 生成效率。在文本生成过程中,模型需要对先前所有 token 进行注意力计算。KV 缓存会存储这些中间计算结果,以便在生成后续 token 时复用,而无需重新计算。

键值缓存与注意力优化
收益显著:降低计算成本,带来更快响应与更低资源占用。不过,缓存的键值对会占用 GPU 显存。对于极长上下文,KV 缓存的大小本身也会成为约束。
虽然 KV 缓存优化了模型使用上下文窗口的方式,但并不能解决记忆容量有限这一根本问题。这时,检索增强生成(RAG)提供了互补方案。
检索增强生成(RAG)
近年来我认为最有意思的进展之一是检索增强生成(RAG)。RAG 架起内部与外部记忆的桥梁,将 LLM 的记忆扩展到上下文窗口之外。
RAG 并非只依赖模型训练所学或当下上下文能够容纳的内容,而是在需要时动态从外部来源拉取相关信息。我们进一步深入了解 RAG。
连接内部与外部记忆
RAG 架构包含两个主要组件:用于从外部知识库中搜索相关信息的检索器,以及基于查询与检索到的上下文生成响应的生成器(LLM)。
当查询到来时,检索器会从向量数据库或知识库中找到相关文档。检索到的文档会被注入上下文窗口,为响应提供具体且有根有据的信息。
RAG 的优势包括:通过引用真实文档来减少幻觉,通过访问训练数据之外的最新信息来提升准确性,并在无需再训练的情况下纳入专有知识。
但也存在挑战:如果检索文档本身有误,可能导致幻觉;若检索返回的信息不相关,会出现相关性问题;此外还需应对管理向量数据库的复杂性。
当我们回到先前讨论的基础限制——上下文窗口约束——RAG 的真正威力便显现出来。
RAG 如何缓解上下文窗口问题
RAG 通过有选择地检索相关信息,将上下文扩展到窗口大小之外。与其维护完整的对话历史,不如将其外部存储,并在需要时检索相关部分,从而在上下文窗口限制内有效支持几乎无限长度的对话。
改进上下文窗口的策略包括:混合检索(将语义搜索与元数据过滤结合)、重排序检索结果以优先更相关文档,以及递归检索(用模型的初步响应引导进一步检索)。
RAG 是一种实用、可用于生产的记忆扩展方法,但研究社区仍在通过新颖架构不断突破,重新想象模型在更基础层面如何处理记忆。
先进的 LLM 记忆架构
新型架构与受神经科学启发的系统正在提升 LLM 的记忆能力。这些前沿方法重新构思了模型处理长上下文信息的方式,超越传统 Transformer 的局限,打造更高效且更接近人类的记忆系统。
新型神经架构
诸如 Mamba 和循环记忆 Transformer 等架构优化了记忆效率。Mamba 采用状态空间模型替代注意力机制,使序列长度的扩展从二次缩放降为线性缩放,在可比资源下处理远更长的序列。

Mamba 模块
循环记忆 Transformer 在标准 Transformer 上引入循环连接以维持长期状态,使信息能通过习得的记忆机制在即时上下文窗口之外持续存在。
这些架构创新在研究层面引人入胜,但面向生产的解决方案是什么?答案是外部记忆平台。
外部记忆系统
诸如Mem0 和Zep 等平台提供可用于生产的外部记忆解决方案。Mem0 提供托管的记忆层,可自动提取、存储与检索相关信息;Zep 专注会话记忆,内置摘要、事实提取与向量搜索。
尽管这些平台提供了务实方案,但也有研究者从一个意想不到的来源汲取灵感:人类大脑如何形成与管理记忆。
受神经科学启发的记忆增强
CAMELoT(Consolidated Associative Memory Enhanced Long Transformer,巩固式关联记忆增强长 Transformer)将神经科学原理应用于 LLM 记忆,实现巩固、Novelty(新异)检测与新近性加权。这些原则与人类记忆系统相呼应,带来更自然的记忆行为。

CAMELoT 流程
在这些神经科学原则之上,另一种方法(如 Laminar)则专注于人类如何记住不同经历与事件。
面向 LLM 的情景记忆
Larimar使 LLM 能够维持清晰分隔的记忆片段。与其将所有过往信息一视同仁,情景记忆将信息组织为离散事件。这有助于上下文长度的泛化:模型可引用特定过往片段,而无需加载完整历史。

Larimar 架构
这些先进架构展示了巨大潜力,但也引入了新的复杂性。接下来我们审视在实现记忆系统时会遇到的实际挑战及其应对策略。
克服 LLM 记忆的局限
即便拥有复杂架构,我发现记忆系统仍会面临需要谨慎缓解的挑战。了解这些障碍及其解决方案,对于构建可靠、可被用户信任的生产系统至关重要。
常见挑战
灾难性遗忘是指模型丢失先前学到的信息。解决方案包括记忆巩固、加强重要记忆、构建记忆层级以保留关键信息,以及定期刷新记忆。
除遗忘外,另一关键挑战是当记忆系统主动误导模型时。幻觉(生成似是而非但错误的信息)会被有缺陷的记忆加剧。缓解措施包括来源归因、对检索记忆进行置信度评分与核验步骤。
最后,存储用户对话与偏好会引发重要的隐私问题。存储用户数据时,隐私与安全考量至关重要。请实施数据加密、自动清除旧数据的保留策略,以及访问控制,确保用户只能访问自己的记忆。
集成
集成记忆需要深思熟虑的 API 设计。核心模式包括有状态集成(记忆系统在请求间保持状态)与无状态集成(每个请求包含必要的标识信息)。
高效的记忆管理采用修剪(移除最旧或最不相关的消息)、删除(移除特定条目)与摘要(压缩消息)。这些模式可在预算内维持记忆,同时保留必要的上下文。
理解这些理论模式与挑战很有价值,但真正的考验在于实现。下面将这些概念转化为可应用于您项目的实践准则。
LLM 记忆系统最佳实践
以下是我看到开发者充分发挥 LLM 记忆系统价值的一些做法。
Token 预算
理解您的 token 预算是有效管理上下文的起点。计算系统提示、记忆与响应所需的 token,确保总量不超限。采用层级化的数据结构,把重要信息放在模型更易关注的位置——开头或结尾。
准备数据
同样重要的是在数据进入记忆系统前如何进行数据准备。数据准备至关重要。按语义将长文档切分为块,而非按任意 token 限制切分。块之间适度重叠以保持上下文连贯。为每个块附加元数据以支持过滤检索。
测试与度量
系统运行后,您需要方法来评估其是否有效。记忆评估需跟踪召回准确率、幻觉率与用户满意度等指标;同时监控记忆系统延迟、token 使用量与检索相关性。
制定检索策略
最后,您的检索策略应随用户问题的复杂度而自适应。对简单查询使用关键词搜索,复杂问题采用语义相似度搜索。实现记忆命名空间,以用户、主题或时间段组织信息。
结论
大型语言模型的记忆,使这些模型从无状态的文本生成器,转变为能感知上下文的 AI 助手,能够进行连贯且个性化的互动。在本教程中,我已从上下文窗口到先进架构,系统讲解了 LLM 的记忆基础。
我认为要点在于:首先以管理良好的上下文窗口与对话缓冲来满足即时需求;其次通过 RAG 在参数化记忆之外实现可扩展的知识访问;在生产中善用外部记忆平台;并通过指标与用户反馈持续评估记忆效果。
随着 LLM 能力进步,记忆系统也将愈发复杂。对实践者而言,关键是构建服务于用户需求的记忆系统:保持相关上下文、适度遗忘,并实现自然交互,使 AI 应用真正有用。
若想继续学习,建议查看以下资源:
许多开发者构建的聊天机器人和 AI 助手,单独回答问题时表现出色,但在保持连贯对话方面却举步维艰。根本原因?缺乏记忆。当用户在后续提问中引用先前上下文时,无状态的语言模型会将其视为全新的问题,导致令人沮丧且重复的交互。
理解并实现大型语言模型中的记忆,对于打造自然且智能的 AI 应用至关重要。记忆使 LLM 能够在对话中保持上下文,从过往交互中学习,并提供个性化响应。在本教程中,我将带您了解 LLM 记忆的基本原理,从基础的上下文窗口到先进的架构。
如果您刚接触 LLM,建议先学习我们的课程,例如使用 LangChain 开发 LLM 应用、大型语言模型开发,或LLMOps 概念。
什么是 LLM 记忆?
大型语言模型处理信息的方式不同于传统软件。数据库以显式方式存储和检索数据,而 LLM 必须在上下文窗口和 token 限制等架构约束内管理记忆。挑战在于让模型记住相关信息,同时忘记不必要的细节,在不压垮算力资源的前提下保持连贯性。
在深入实现细节前,我们先明确在大型语言模型语境中,“记忆”意味着什么,以及为什么它对构建高效 AI 应用至关重要。
大型语言模型中记忆的基础
LLM 的记忆是指系统保留并利用先前交互或训练数据中的信息的能力。这并非传统计算意义上的记忆,而是模型在对话中维持上下文、引用先前交流,并将所学模式应用于新情境的能力。
记忆之所以关键,是因为它能将零散的问答对转化为连贯的对话。没有记忆,LLM 无法理解您说“再多谈谈那个”的含义。模型需要上下文来解释指代并在先前交流的基础上推进。
我常把 LLM 记忆与人类记忆类比。人类有感觉记忆(即时感知)、短时记忆(活跃信息)和长时记忆(储存知识)。LLM 也有类似系统:上下文窗口相当于短时记忆,检索到的信息相当于被回忆起的长时记忆,而已训练的参数代表永久性知识。
既然已经介绍了 LLM 记忆的基本概念,接下来我们看看记忆系统如何分类,以便您为具体应用选择合适的方法。
LLM 记忆分类的三个维度
了解记忆如何分类有助于为您的应用选择正确的方法。LLM 记忆可从三个关键维度进行划分:对象、形式和时间。
对象维度
所谓对象维度,是区分个人记忆与系统记忆。个人记忆存储用户特定的信息,如偏好和对话历史。
系统记忆包含所有用户都可用的一般知识与能力。客服机器人可能使用系统记忆来提供产品信息,同时为每位客户维护其订单历史这一个人记忆。
形式维度
第二个维度是形式维度,用于区分参数化与非参数化记忆。参数化记忆在训练期间编码进模型权重中。非参数化记忆存在于模型之外,存储于数据库或向量库。参数化记忆在训练后固定,而非参数化记忆可动态更新。
时间维度
最后,时间维度按持续时间来划分记忆:短期与长期。短期记忆覆盖当前对话,存放于上下文窗口;长期记忆跨会话持久存在,外部存储并在需要时检索。
建立了这一分类框架后,我们来看 LLM 在实践中如何具体实现这些类型的记忆。
LLM 中的记忆类型
不同的记忆类型在 LLM 应用中承担不同职责。理解这些类型有助于您为具体场景设计有效的记忆架构。
语义记忆
语义记忆存储系统可访问和引用的事实与通识。虽然模型通过训练拥有基础知识,但在实践中,语义记忆通常指包含事实信息的外部知识库、数据库或文档库。
例如,客服机器人可以在向量数据库中维护产品规格、定价信息和公司政策等语义记忆。这样系统便可检索并引用准确且最新的事实,而不必完全依赖可能已过时的训练数据。语义记忆通常存放于外部,并在需要时检索,便于更新和维护。
情景记忆
语义记忆处理事实与知识,而情景记忆侧重具体经历。情景记忆捕捉过往交互:问了什么、模型如何回应,以及这些交流的上下文。
情景记忆使模型能够自然地引用对话早先部分,例如“正如我们之前讨论的”或“基于您告诉我关于项目的信息”。此类记忆通常是非参数化的,存储在对话缓冲区或数据库中。
程序性记忆
程序性记忆涵盖系统指令与习得流程。这包括定义 AI 行为的系统提示、响应指南,以及任务特定的指令。
当您将模型配置为“始终以要点形式回复”或“优先准确性而非创造性”时,您就在设置程序性记忆。它影响的是模型如何处理并回应信息,而非它知道哪些信息。
记忆类型
除了这些基本记忆类型之外,实际落地时,尤其是在LangChain 等框架中,还提供多种会话记忆形式。
ConversationBufferMemory以原样存储全部消息,保留完整对话历史,适用于需要完整上下文的短对话。ConversationSummaryMemory将过往交互压缩为摘要,在较长对话中以较少 token 保留关键信息。ConversationBufferWindowMemory仅保留最近的 N 条消息,形成滑动窗口,当仅近期交流重要时效果良好。ConversationSummaryBufferMemory结合上述方法,对近期消息原样保留,同时对更早的交流进行摘要,在细节与效率之间取得平衡。每种形式都在完整性与效率之间取舍,可根据应用需求选择。了解这些记忆类型很重要,但它们都受制于一个基本约束:上下文窗口。下面来看看这种架构限制如何塑造记忆的实现方式。
LLM 上下文窗口:基础与约束
我认为理解 LLM 记忆的关键之一是上下文窗口的概念。我们简要看看它们如何工作。
什么是上下文窗口?
上下文窗口是指 LLM 在一次请求中可处理的最大文本量,以 token 计。Token 是文本片段,大致对应词或子词。
上下文窗口相当于模型的即时工作记忆。模型考虑的一切都必须放进这个窗口:系统提示、对话历史、检索到的文档以及响应空间。随着对话增长,旧消息必须为新消息让位而被移除。
上下文窗口大小差异很大。例如,GPT-5 支持 400,000 个 token,Claude 4.5 Sonnet 支持 200,000 个 token,而 Gemini 3 Pro 可扩展至 150 万个 token。更大的窗口能提供更丰富的上下文,但计算成本呈二次增长。
尽管更大的上下文窗口听起来理想,但它们在实际部署中会带来显著的挑战。
上下文窗口的挑战与限制
以我的经验,最大的问题是“中间遗失”现象。研究显示,LLM 更关注上下文窗口的开头与结尾信息,而中间内容的注意力较低。仅仅把大量信息塞进上下文并不保证能被有效利用。
准确率 vs. 含答案文档的位置
计算约束使得扩展上下文窗口的成本高昂。处理 100,000-token 的上下文所需的 GPU 显存与时间,远高于 10,000-token 的上下文。
在生产应用中,这些成本会迅速累积,因此需要智能的记忆系统,仅有选择性地纳入相关信息。
鉴于这些限制,解决方案并非单纯扩大上下文窗口,而是构建更聪明、能高效使用窗口的系统。
将上下文窗口与记忆系统融合
高效的 LLM 应用会将上下文窗口与超越即时上下文的记忆系统相结合。常见模式是:用上下文窗口承载短期、高优先级的信息,同时将长期记忆存于外部,并按需选择性检索。
一种典型架构是在上下文窗口中保留近期对话轮次,将更早的对话存入数据库,并通过检索机制在需要时把相关过往信息带回。这在完整性、效率与性能之间取得平衡。
短期/长期记忆
有了上述架构理解,接下来看看如何在这些约束内实现高效的短期记忆系统。
在 LLM 中实现短期记忆系统
短期记忆系统在当前会话内管理信息,主要依赖上下文窗口。我将其视为模型的工作记忆——模型在处理当前对话时主动持有的信息。
下面来看看如何最大化这个有限却至关重要的记忆空间。
上下文内学习
上下文内学习指模型根据提示中的示例或指令来调整行为的能力。您通过在上下文窗口中展示范例来“教学”,而非进行微调。
机制很直接:
这种方法的优势包括:
局限性包括:示例过多时受“中间遗失”影响而效果下降、token 成本增加,且性能难以匹敌微调模型。
上下文内学习展示了短期记忆的可能性,但信息究竟如何被“写入”供模型使用?下面探讨记忆形成的机制。
记忆的写入与存储
LLM 系统中的记忆形成可以是有意识(显式)或无意识(隐式)的。
许多框架会自动维护对话缓冲区,无需显式操作即可形成隐式记忆。挑战在于如何管理这种累积,确保相关信息得以保留,同时修剪不那么重要的细节。
短期记忆满足的是即时对话需求,那么当您需要信息在当前会话之外持续存在时怎么办?这就需要长期记忆方案。
LLM 的长期记忆解决方案
长期记忆使 LLM 能够跨会话维持信息。
短期记忆是短暂的,会在对话结束后消失;而长期记忆会持久存在,使您的 AI 能够随着时间推移记住用户偏好、过往交互与积累的知识。
我将重点介绍两种方法:将信息存于外部的基于文本的记忆系统,以及优化模型访问先前计算结果的键值缓存。
基于文本的记忆系统
基于文本的记忆将对话历史与用户信息存储在数据库或向量库中。获取环节包括捕捉相关信息、偏好、决策、事实或情境细节。
记忆管理需要压缩与组织。通过摘要技术将对话压缩为要点;通过层级化结构按主题、时间或相关性来组织记忆。
利用环节聚焦检索。向量相似度搜索按语义找到相关记忆;基于时间的检索优先最近信息;相关性评分用于对记忆按重要性排序。
基于文本的系统解决了“存什么”的问题,但“如何更高效地取回”同样重要。这正是键值缓存发挥作用的地方。
键值缓存与注意力优化
键值(KV)缓存可提升 token 生成效率。在文本生成过程中,模型需要对先前所有 token 进行注意力计算。KV 缓存会存储这些中间计算结果,以便在生成后续 token 时复用,而无需重新计算。
键值缓存与注意力优化
收益显著:降低计算成本,带来更快响应与更低资源占用。不过,缓存的键值对会占用 GPU 显存。对于极长上下文,KV 缓存的大小本身也会成为约束。
虽然 KV 缓存优化了模型使用上下文窗口的方式,但并不能解决记忆容量有限这一根本问题。这时,检索增强生成(RAG)提供了互补方案。
检索增强生成(RAG)
近年来我认为最有意思的进展之一是检索增强生成(RAG)。RAG 架起内部与外部记忆的桥梁,将 LLM 的记忆扩展到上下文窗口之外。
RAG 并非只依赖模型训练所学或当下上下文能够容纳的内容,而是在需要时动态从外部来源拉取相关信息。我们进一步深入了解 RAG。
连接内部与外部记忆
RAG 架构包含两个主要组件:用于从外部知识库中搜索相关信息的检索器,以及基于查询与检索到的上下文生成响应的生成器(LLM)。
当查询到来时,检索器会从向量数据库或知识库中找到相关文档。检索到的文档会被注入上下文窗口,为响应提供具体且有根有据的信息。
RAG 的优势包括:通过引用真实文档来减少幻觉,通过访问训练数据之外的最新信息来提升准确性,并在无需再训练的情况下纳入专有知识。
但也存在挑战:如果检索文档本身有误,可能导致幻觉;若检索返回的信息不相关,会出现相关性问题;此外还需应对管理向量数据库的复杂性。
当我们回到先前讨论的基础限制——上下文窗口约束——RAG 的真正威力便显现出来。
RAG 如何缓解上下文窗口问题
RAG 通过有选择地检索相关信息,将上下文扩展到窗口大小之外。与其维护完整的对话历史,不如将其外部存储,并在需要时检索相关部分,从而在上下文窗口限制内有效支持几乎无限长度的对话。
改进上下文窗口的策略包括:混合检索(将语义搜索与元数据过滤结合)、重排序检索结果以优先更相关文档,以及递归检索(用模型的初步响应引导进一步检索)。
RAG 是一种实用、可用于生产的记忆扩展方法,但研究社区仍在通过新颖架构不断突破,重新想象模型在更基础层面如何处理记忆。
先进的 LLM 记忆架构
新型架构与受神经科学启发的系统正在提升 LLM 的记忆能力。这些前沿方法重新构思了模型处理长上下文信息的方式,超越传统 Transformer 的局限,打造更高效且更接近人类的记忆系统。
新型神经架构
诸如 Mamba 和循环记忆 Transformer 等架构优化了记忆效率。Mamba 采用状态空间模型替代注意力机制,使序列长度的扩展从二次缩放降为线性缩放,在可比资源下处理远更长的序列。
Mamba 模块
循环记忆 Transformer 在标准 Transformer 上引入循环连接以维持长期状态,使信息能通过习得的记忆机制在即时上下文窗口之外持续存在。
这些架构创新在研究层面引人入胜,但面向生产的解决方案是什么?答案是外部记忆平台。
外部记忆系统
诸如Mem0 和Zep 等平台提供可用于生产的外部记忆解决方案。Mem0 提供托管的记忆层,可自动提取、存储与检索相关信息;Zep 专注会话记忆,内置摘要、事实提取与向量搜索。
尽管这些平台提供了务实方案,但也有研究者从一个意想不到的来源汲取灵感:人类大脑如何形成与管理记忆。
受神经科学启发的记忆增强
CAMELoT(Consolidated Associative Memory Enhanced Long Transformer,巩固式关联记忆增强长 Transformer)将神经科学原理应用于 LLM 记忆,实现巩固、Novelty(新异)检测与新近性加权。这些原则与人类记忆系统相呼应,带来更自然的记忆行为。
CAMELoT 流程
在这些神经科学原则之上,另一种方法(如 Laminar)则专注于人类如何记住不同经历与事件。
面向 LLM 的情景记忆
Larimar使 LLM 能够维持清晰分隔的记忆片段。与其将所有过往信息一视同仁,情景记忆将信息组织为离散事件。这有助于上下文长度的泛化:模型可引用特定过往片段,而无需加载完整历史。
Larimar 架构
这些先进架构展示了巨大潜力,但也引入了新的复杂性。接下来我们审视在实现记忆系统时会遇到的实际挑战及其应对策略。
克服 LLM 记忆的局限
即便拥有复杂架构,我发现记忆系统仍会面临需要谨慎缓解的挑战。了解这些障碍及其解决方案,对于构建可靠、可被用户信任的生产系统至关重要。
常见挑战
灾难性遗忘是指模型丢失先前学到的信息。解决方案包括记忆巩固、加强重要记忆、构建记忆层级以保留关键信息,以及定期刷新记忆。
除遗忘外,另一关键挑战是当记忆系统主动误导模型时。幻觉(生成似是而非但错误的信息)会被有缺陷的记忆加剧。缓解措施包括来源归因、对检索记忆进行置信度评分与核验步骤。
最后,存储用户对话与偏好会引发重要的隐私问题。存储用户数据时,隐私与安全考量至关重要。请实施数据加密、自动清除旧数据的保留策略,以及访问控制,确保用户只能访问自己的记忆。
集成
集成记忆需要深思熟虑的 API 设计。核心模式包括有状态集成(记忆系统在请求间保持状态)与无状态集成(每个请求包含必要的标识信息)。
高效的记忆管理采用修剪(移除最旧或最不相关的消息)、删除(移除特定条目)与摘要(压缩消息)。这些模式可在预算内维持记忆,同时保留必要的上下文。
理解这些理论模式与挑战很有价值,但真正的考验在于实现。下面将这些概念转化为可应用于您项目的实践准则。
LLM 记忆系统最佳实践
以下是我看到开发者充分发挥 LLM 记忆系统价值的一些做法。
Token 预算
理解您的 token 预算是有效管理上下文的起点。计算系统提示、记忆与响应所需的 token,确保总量不超限。采用层级化的数据结构,把重要信息放在模型更易关注的位置——开头或结尾。
准备数据
同样重要的是在数据进入记忆系统前如何进行数据准备。数据准备至关重要。按语义将长文档切分为块,而非按任意 token 限制切分。块之间适度重叠以保持上下文连贯。为每个块附加元数据以支持过滤检索。
测试与度量
系统运行后,您需要方法来评估其是否有效。记忆评估需跟踪召回准确率、幻觉率与用户满意度等指标;同时监控记忆系统延迟、token 使用量与检索相关性。
制定检索策略
最后,您的检索策略应随用户问题的复杂度而自适应。对简单查询使用关键词搜索,复杂问题采用语义相似度搜索。实现记忆命名空间,以用户、主题或时间段组织信息。
结论
大型语言模型的记忆,使这些模型从无状态的文本生成器,转变为能感知上下文的 AI 助手,能够进行连贯且个性化的互动。在本教程中,我已从上下文窗口到先进架构,系统讲解了 LLM 的记忆基础。
我认为要点在于:首先以管理良好的上下文窗口与对话缓冲来满足即时需求;其次通过 RAG 在参数化记忆之外实现可扩展的知识访问;在生产中善用外部记忆平台;并通过指标与用户反馈持续评估记忆效果。
随着 LLM 能力进步,记忆系统也将愈发复杂。对实践者而言,关键是构建服务于用户需求的记忆系统:保持相关上下文、适度遗忘,并实现自然交互,使 AI 应用真正有用。
若想继续学习,建议查看以下资源: