跳至主要内容

LLM 记忆如何工作?构建具备上下文感知的 AI 应用

了解大型语言模型如何通过上下文窗口、RAG 和先进架构实现记忆。
Benito Martin
Benito Martin

创建您的免费账户

实践并学习路径你的进步。

使用 Google 继续继续即表示您接受我们的 使用条款,我们的 隐私政策 ,并且您的数据存储在美国。

许多开发者构建的聊天机器人和 AI 助手,单独回答问题时表现出色,但在保持连贯对话方面却举步维艰。根本原因?缺乏记忆。当用户在后续提问中引用先前上下文时,无状态的语言模型会将其视为全新的问题,导致令人沮丧且重复的交互。

理解并实现大型语言模型中的记忆,对于打造自然且智能的 AI 应用至关重要。记忆使 LLM 能够在对话中保持上下文,从过往交互中学习,并提供个性化响应。在本教程中,我将带您了解 LLM 记忆的基本原理,从基础的上下文窗口到先进的架构。

如果您刚接触 LLM,建议先学习我们的课程,例如使用 LangChain 开发 LLM 应用、大型语言模型开发,或LLMOps 概念。

什么是 LLM 记忆?

大型语言模型处理信息的方式不同于传统软件。数据库以显式方式存储和检索数据,而 LLM 必须在上下文窗口和 token 限制等架构约束内管理记忆。挑战在于让模型记住相关信息,同时忘记不必要的细节,在不压垮算力资源的前提下保持连贯性。

在深入实现细节前,我们先明确在大型语言模型语境中,“记忆”意味着什么,以及为什么它对构建高效 AI 应用至关重要。

大型语言模型中记忆的基础

LLM 的记忆是指系统保留并利用先前交互或训练数据中的信息的能力。这并非传统计算意义上的记忆,而是模型在对话中维持上下文、引用先前交流,并将所学模式应用于新情境的能力。

记忆之所以关键,是因为它能将零散的问答对转化为连贯的对话。没有记忆,LLM 无法理解您说“再多谈谈那个”的含义。模型需要上下文来解释指代并在先前交流的基础上推进。

我常把 LLM 记忆与人类记忆类比。人类有感觉记忆(即时感知)、短时记忆(活跃信息)和长时记忆(储存知识)。LLM 也有类似系统:上下文窗口相当于短时记忆,检索到的信息相当于被回忆起的长时记忆,而已训练的参数代表永久性知识。

既然已经介绍了 LLM 记忆的基本概念,接下来我们看看记忆系统如何分类,以便您为具体应用选择合适的方法。

LLM 记忆分类的三个维度

了解记忆如何分类有助于为您的应用选择正确的方法。LLM 记忆可从三个关键维度进行划分:对象、形式和时间。

对象维度

所谓对象维度,是区分个人记忆与系统记忆。个人记忆存储用户特定的信息,如偏好和对话历史。

系统记忆包含所有用户都可用的一般知识与能力。客服机器人可能使用系统记忆来提供产品信息,同时为每位客户维护其订单历史这一个人记忆。

形式维度

第二个维度是形式维度,用于区分参数化与非参数化记忆。参数化记忆在训练期间编码进模型权重中。非参数化记忆存在于模型之外,存储于数据库或向量库。参数化记忆在训练后固定,而非参数化记忆可动态更新。

时间维度

最后,时间维度按持续时间来划分记忆:短期与长期。短期记忆覆盖当前对话,存放于上下文窗口;长期记忆跨会话持久存在,外部存储并在需要时检索。

建立了这一分类框架后,我们来看 LLM 在实践中如何具体实现这些类型的记忆。

LLM 中的记忆类型

不同的记忆类型在 LLM 应用中承担不同职责。理解这些类型有助于您为具体场景设计有效的记忆架构。

语义记忆

语义记忆存储系统可访问和引用的事实与通识。虽然模型通过训练拥有基础知识,但在实践中,语义记忆通常指包含事实信息的外部知识库、数据库或文档库。

例如,客服机器人可以在向量数据库中维护产品规格、定价信息和公司政策等语义记忆。这样系统便可检索并引用准确且最新的事实,而不必完全依赖可能已过时的训练数据。语义记忆通常存放于外部,并在需要时检索,便于更新和维护。

情景记忆

语义记忆处理事实与知识,而情景记忆侧重具体经历。情景记忆捕捉过往交互:问了什么、模型如何回应,以及这些交流的上下文。

情景记忆使模型能够自然地引用对话早先部分,例如“正如我们之前讨论的”或“基于您告诉我关于项目的信息”。此类记忆通常是非参数化的,存储在对话缓冲区或数据库中。

程序性记忆

程序性记忆涵盖系统指令与习得流程。这包括定义 AI 行为的系统提示、响应指南,以及任务特定的指令。

当您将模型配置为“始终以要点形式回复”或“优先准确性而非创造性”时,您就在设置程序性记忆。它影响的是模型如何处理并回应信息,而非它知道哪些信息。

Types of Memories

记忆类型

除了这些基本记忆类型之外,实际落地时,尤其是在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 更关注上下文窗口的开头与结尾信息,而中间内容的注意力较低。仅仅把大量信息塞进上下文并不保证能被有效利用。

Accuracy vs. Position of Document with the Answer

准确率 vs. 含答案文档的位置

计算约束使得扩展上下文窗口的成本高昂。处理 100,000-token 的上下文所需的 GPU 显存与时间,远高于 10,000-token 的上下文。

在生产应用中,这些成本会迅速累积,因此需要智能的记忆系统,仅有选择性地纳入相关信息。

鉴于这些限制,解决方案并非单纯扩大上下文窗口,而是构建更聪明、能高效使用窗口的系统。

将上下文窗口与记忆系统融合

高效的 LLM 应用会将上下文窗口与超越即时上下文的记忆系统相结合。常见模式是:用上下文窗口承载短期、高优先级的信息,同时将长期记忆存于外部,并按需选择性检索。

一种典型架构是在上下文窗口中保留近期对话轮次,将更早的对话存入数据库,并通过检索机制在需要时把相关过往信息带回。这在完整性、效率与性能之间取得平衡。

Short/Long-term Memory

短期/长期记忆

有了上述架构理解,接下来看看如何在这些约束内实现高效的短期记忆系统。

在 LLM 中实现短期记忆系统

短期记忆系统在当前会话内管理信息,主要依赖上下文窗口。我将其视为模型的工作记忆——模型在处理当前对话时主动持有的信息。

下面来看看如何最大化这个有限却至关重要的记忆空间。

上下文内学习

上下文内学习指模型根据提示中的示例或指令来调整行为的能力。您通过在上下文窗口中展示范例来“教学”,而非进行微调。

机制很直接:

  • 包含目标行为的示例,模型便能学习其模式。
  • 例如情感分类,提供若干文本-情感配对作为示例,然后给出新文本。模型据此归纳并应用该模式。

这种方法的优势包括:

  • 无需再训练即可快速适配任务
  • 通过修改提示灵活改变行为
  • 用少量示例教授特定领域任务。

局限性包括:示例过多时受“中间遗失”影响而效果下降、token 成本增加,且性能难以匹敌微调模型。

上下文内学习展示了短期记忆的可能性,但信息究竟如何被“写入”供模型使用?下面探讨记忆形成的机制。

记忆的写入与存储

LLM 系统中的记忆形成可以是有意识(显式)或无意识(隐式)的。

  • 显式形成包括明确指示系统记住信息,或实现从对话中提取关键信息并进行存储的机制。
  • 隐式形成则通过对话流程自动发生。随着消息在上下文窗口中累积,它们隐式地提供记忆。

许多框架会自动维护对话缓冲区,无需显式操作即可形成隐式记忆。挑战在于如何管理这种累积,确保相关信息得以保留,同时修剪不那么重要的细节。

短期记忆满足的是即时对话需求,那么当您需要信息在当前会话之外持续存在时怎么办?这就需要长期记忆方案。

LLM 的长期记忆解决方案

长期记忆使 LLM 能够跨会话维持信息。

短期记忆是短暂的,会在对话结束后消失;而长期记忆会持久存在,使您的 AI 能够随着时间推移记住用户偏好、过往交互与积累的知识。

我将重点介绍两种方法:将信息存于外部的基于文本的记忆系统,以及优化模型访问先前计算结果的键值缓存。

基于文本的记忆系统

基于文本的记忆将对话历史与用户信息存储在数据库或向量库中。获取环节包括捕捉相关信息、偏好、决策、事实或情境细节。

记忆管理需要压缩与组织。通过摘要技术将对话压缩为要点;通过层级化结构按主题、时间或相关性来组织记忆。

利用环节聚焦检索。向量相似度搜索按语义找到相关记忆;基于时间的检索优先最近信息;相关性评分用于对记忆按重要性排序。

基于文本的系统解决了“存什么”的问题,但“如何更高效地取回”同样重要。这正是键值缓存发挥作用的地方。

键值缓存与注意力优化

键值(KV)缓存可提升 token 生成效率。在文本生成过程中,模型需要对先前所有 token 进行注意力计算。KV 缓存会存储这些中间计算结果,以便在生成后续 token 时复用,而无需重新计算。

Key-value Caching and Attention Optimization

键值缓存与注意力优化

收益显著:降低计算成本,带来更快响应与更低资源占用。不过,缓存的键值对会占用 GPU 显存。对于极长上下文,KV 缓存的大小本身也会成为约束。

虽然 KV 缓存优化了模型使用上下文窗口的方式,但并不能解决记忆容量有限这一根本问题。这时,检索增强生成(RAG)提供了互补方案。

检索增强生成(RAG)

近年来我认为最有意思的进展之一是检索增强生成(RAG)。RAG 架起内部与外部记忆的桥梁,将 LLM 的记忆扩展到上下文窗口之外。

RAG 并非只依赖模型训练所学或当下上下文能够容纳的内容,而是在需要时动态从外部来源拉取相关信息。我们进一步深入了解 RAG。

连接内部与外部记忆

RAG 架构包含两个主要组件:用于从外部知识库中搜索相关信息的检索器,以及基于查询与检索到的上下文生成响应的生成器(LLM)。

当查询到来时,检索器会从向量数据库或知识库中找到相关文档。检索到的文档会被注入上下文窗口,为响应提供具体且有根有据的信息。

RAG 的优势包括:通过引用真实文档来减少幻觉,通过访问训练数据之外的最新信息来提升准确性,并在无需再训练的情况下纳入专有知识。

但也存在挑战:如果检索文档本身有误,可能导致幻觉;若检索返回的信息不相关,会出现相关性问题;此外还需应对管理向量数据库的复杂性。

当我们回到先前讨论的基础限制——上下文窗口约束——RAG 的真正威力便显现出来。

RAG 如何缓解上下文窗口问题

RAG 通过有选择地检索相关信息,将上下文扩展到窗口大小之外。与其维护完整的对话历史,不如将其外部存储,并在需要时检索相关部分,从而在上下文窗口限制内有效支持几乎无限长度的对话。

改进上下文窗口的策略包括:混合检索(将语义搜索与元数据过滤结合)、重排序检索结果以优先更相关文档,以及递归检索(用模型的初步响应引导进一步检索)。

RAG 是一种实用、可用于生产的记忆扩展方法,但研究社区仍在通过新颖架构不断突破,重新想象模型在更基础层面如何处理记忆。

先进的 LLM 记忆架构

新型架构与受神经科学启发的系统正在提升 LLM 的记忆能力。这些前沿方法重新构思了模型处理长上下文信息的方式,超越传统 Transformer 的局限,打造更高效且更接近人类的记忆系统。

新型神经架构

诸如 Mamba 和循环记忆 Transformer 等架构优化了记忆效率。Mamba 采用状态空间模型替代注意力机制,使序列长度的扩展从二次缩放降为线性缩放,在可比资源下处理远更长的序列。

Mamba Block

Mamba 模块

循环记忆 Transformer 在标准 Transformer 上引入循环连接以维持长期状态,使信息能通过习得的记忆机制在即时上下文窗口之外持续存在。

这些架构创新在研究层面引人入胜,但面向生产的解决方案是什么?答案是外部记忆平台。

外部记忆系统

诸如Mem0 和Zep 等平台提供可用于生产的外部记忆解决方案。Mem0 提供托管的记忆层,可自动提取、存储与检索相关信息;Zep 专注会话记忆,内置摘要、事实提取与向量搜索。

尽管这些平台提供了务实方案,但也有研究者从一个意想不到的来源汲取灵感:人类大脑如何形成与管理记忆。

受神经科学启发的记忆增强

CAMELoT(Consolidated Associative Memory Enhanced Long Transformer,巩固式关联记忆增强长 Transformer)将神经科学原理应用于 LLM 记忆,实现巩固、Novelty(新异)检测与新近性加权。这些原则与人类记忆系统相呼应,带来更自然的记忆行为。

CAMELoT Pipeline

CAMELoT 流程

在这些神经科学原则之上,另一种方法(如 Laminar)则专注于人类如何记住不同经历与事件。

面向 LLM 的情景记忆

Larimar使 LLM 能够维持清晰分隔的记忆片段。与其将所有过往信息一视同仁,情景记忆将信息组织为离散事件。这有助于上下文长度的泛化:模型可引用特定过往片段,而无需加载完整历史。

Larimar Architecture

Larimar 架构

这些先进架构展示了巨大潜力,但也引入了新的复杂性。接下来我们审视在实现记忆系统时会遇到的实际挑战及其应对策略。

克服 LLM 记忆的局限

即便拥有复杂架构,我发现记忆系统仍会面临需要谨慎缓解的挑战。了解这些障碍及其解决方案,对于构建可靠、可被用户信任的生产系统至关重要。

常见挑战

灾难性遗忘是指模型丢失先前学到的信息。解决方案包括记忆巩固、加强重要记忆、构建记忆层级以保留关键信息,以及定期刷新记忆。

除遗忘外,另一关键挑战是当记忆系统主动误导模型时。幻觉(生成似是而非但错误的信息)会被有缺陷的记忆加剧。缓解措施包括来源归因、对检索记忆进行置信度评分与核验步骤。

最后,存储用户对话与偏好会引发重要的隐私问题。存储用户数据时,隐私与安全考量至关重要。请实施数据加密、自动清除旧数据的保留策略,以及访问控制,确保用户只能访问自己的记忆。

集成

集成记忆需要深思熟虑的 API 设计。核心模式包括有状态集成(记忆系统在请求间保持状态)与无状态集成(每个请求包含必要的标识信息)。

高效的记忆管理采用修剪(移除最旧或最不相关的消息)、删除(移除特定条目)与摘要(压缩消息)。这些模式可在预算内维持记忆,同时保留必要的上下文。

理解这些理论模式与挑战很有价值,但真正的考验在于实现。下面将这些概念转化为可应用于您项目的实践准则。

LLM 记忆系统最佳实践

以下是我看到开发者充分发挥 LLM 记忆系统价值的一些做法。

Token 预算

理解您的 token 预算是有效管理上下文的起点。计算系统提示、记忆与响应所需的 token,确保总量不超限。采用层级化的数据结构,把重要信息放在模型更易关注的位置——开头或结尾。

准备数据

同样重要的是在数据进入记忆系统前如何进行数据准备。数据准备至关重要。按语义将长文档切分为块,而非按任意 token 限制切分。块之间适度重叠以保持上下文连贯。为每个块附加元数据以支持过滤检索。

测试与度量

系统运行后,您需要方法来评估其是否有效。记忆评估需跟踪召回准确率、幻觉率与用户满意度等指标;同时监控记忆系统延迟、token 使用量与检索相关性。

制定检索策略

最后,您的检索策略应随用户问题的复杂度而自适应。对简单查询使用关键词搜索,复杂问题采用语义相似度搜索。实现记忆命名空间,以用户、主题或时间段组织信息。

结论

大型语言模型的记忆,使这些模型从无状态的文本生成器,转变为能感知上下文的 AI 助手,能够进行连贯且个性化的互动。在本教程中,我已从上下文窗口到先进架构,系统讲解了 LLM 的记忆基础。

我认为要点在于:首先以管理良好的上下文窗口与对话缓冲来满足即时需求;其次通过 RAG 在参数化记忆之外实现可扩展的知识访问;在生产中善用外部记忆平台;并通过指标与用户反馈持续评估记忆效果。

随着 LLM 能力进步,记忆系统也将愈发复杂。对实践者而言,关键是构建服务于用户需求的记忆系统:保持相关上下文、适度遗忘,并实现自然交互,使 AI 应用真正有用。

若想继续学习,建议查看以下资源:

LLM 记忆常见问答

LLM 的主要记忆类型有哪些?

LLM 使用语义记忆(外部存储的事实与知识)、情景记忆(过往对话历史)、程序性记忆(系统指令),以及在 LangChain 等框架中实现的缓冲与摘要等多种会话记忆形式。

LLM 的短期记忆与长期记忆有何区别?

短期记忆在当前会话内依赖上下文窗口运行;而长期记忆通过将信息存入外部数据库或向量库并在需要时检索,从而跨会话持续存在。

检索增强生成(RAG)如何扩展 LLM 记忆?

RAG 会从外部知识库动态检索相关信息并注入上下文窗口,使 LLM 能够访问超出其上下文窗口或训练数据范围的、几乎不受限的信息。

上下文窗口中的“中间遗失”问题是什么?

研究表明,LLM 更关注上下文窗口的开头与结尾信息,中间内容的注意力较低,这意味着更长的上下文并不保证更好的信息利用效果。

有哪些可用于生产的 LLM 记忆实现工具?

Mem0 与 Zep 等平台提供托管的外部记忆解决方案,具备自动提取、存储与检索功能;而 LangChain 等框架则提供多种会话记忆实现,配置较少即可集成。

Benito Martin

作者

Benito Martin

作为 Martin Data Solutions 的创始人兼自由职业数据科学家、ML 与 AI 工程师,我在回归、分类、NLP、LLM、RAG、神经网络、集成方法和计算机视觉等领域拥有多元项目经验。

  • 成功交付多项端到端机器学习项目,覆盖数据清洗、分析、建模与在 AWS 和 GCP 上的部署,提供具备影响力且可扩展的解决方案。
  • 使用 Streamlit 和 Gradio 构建交互式、可扩展的网页应用,服务于不同行业场景。
  • 教授并指导数据科学与数据分析学员,通过个性化学习路径促进其职业成长。
  • 为企业级需求设计检索增强生成(RAG)应用课程内容。
  • 撰写高影响力的 AI 与 ML 技术博客,涵盖 MLOps、向量数据库和 LLM 等主题,并获得显著关注。

在我参与的每个项目中,我都会应用最新的软件工程与 DevOps 实践,如 CI/CD、代码规范检查、格式化、模型监控、实验追踪以及健壮的错误处理。我致力于交付完整的解决方案,将数据洞察转化为切实可行的策略,帮助企业成长,并充分发挥数据科学、机器学习与 AI 的价值。

主题