Skip to content

0. 为什么需要记忆?

传统大模型的局限性

  • 大语言模型(LLM)本质上是无状态的:每次响应仅基于当前输入的提示词(prompt),不会自动记住之前的交互内容。
  • 若缺乏记忆机制,用户在多轮对话中必须重复提供背景信息,体验割裂且效率低下。

真实场景的连续性需求

  • 智能客服 / 问答助手:需理解用户的追问上下文(如“刚才说的那个方案还有其他选项吗?”)。
  • 医疗 / 教育系统:需持续跟踪病人的病情进展、学生的知识掌握情况等长期状态。
  • 个性化服务:如记住用户偏好、历史行为,提供定制化建议。

记忆的核心价值

  • 通过将历史交互信息显式注入 prompt,弥补 LLM 无记忆的缺陷;
  • 使系统具备上下文感知能力,实现连贯、高效、个性化的交互。

1. 记忆的应用场景

多轮对话系统

  • 智能客服、虚拟助理、聊天机器人等需要维持对话逻辑连贯性的场景。

用户画像与长期跟踪

  • 智能医疗:记录病史、用药记录、症状变化;
  • 教育平台:跟踪学习进度、错题记录、知识薄弱点;
  • 电商/推荐系统:保存用户兴趣偏好、浏览/购买历史。

2. 记忆的类型

短期记忆(Short-term Memory)

  • 生命周期:仅在当前会话内有效;
  • 特点:高保真、低延迟,用于维持对话流畅性;
  • 典型实现:缓存最近几轮对话,直接拼入 prompt。

长期记忆(Long-term Memory)

  • 生命周期:跨会话持久化存储;
  • 特点:支持个性化、历史追溯,但需处理存储与检索效率;
  • 典型实现:结构化数据库 + 向量数据库结合。

长短期记忆对比

维度短期记忆长期记忆
生命周期仅当前会话跨会话、长期持久化
实现方式缓存(如 Redis),全量拼入 prompt定期摘要归档或主动触发写入
存储策略每个 session_id 对应一个对话缓存,设上限;超限后触发摘要或去重结构化数据存 MySQL/图数据库,语义记忆存向量库(如 FAISS、Chroma)
内容类型最近几轮原始对话多会话摘要、用户特征、偏好、关键事件
主要用途保证当前对话连贯性支持个性化、历史上下文理解
使用策略优先使用,必选按需检索,附加使用

3. 记忆的实现手段

Prompt 缓存记忆(Context Window Injection)

  • 将历史对话直接拼接到当前 prompt 中;
  • 实现简单,但受模型上下文长度(token 限制)制约;
  • 适用于短期记忆。

向量记忆(Vector-based Memory)

  • 将历史对话或摘要嵌入为向量,存入向量数据库;
  • 推理时,根据当前问题的语义检索最相关的历史片段
  • 模拟人类“联想回忆”机制,适合长期、海量记忆管理。

4. 记忆的选取策略

为避免信息过载并提升相关性,需对记忆进行智能筛选:

1. 任务相关性过滤

  • 仅选取与当前任务类型匹配的记忆(如医疗问诊只加载病历相关记忆)。

2. 语义相似度召回

  • 使用 embedding 计算当前问题与历史记忆的相似度,召回 top-K 相关项。

3. 时效性优先

  • 近期记忆权重更高,优先使用(如最近 24 小时 > 一周前)。

4. 动态 Token 配额

  • 根据问题复杂度分配记忆 token:
    • 简单问题:2K token;
    • 复杂推理:可达 8K token。

5. Token 裁剪机制

  • 设定记忆总 token 上限;
  • 超出时自动触发摘要压缩去重,确保 prompt 不溢出。

5. 记忆过长的处理方案

当对话历史过长、超出上下文窗口时,需进行压缩与优化:

摘要压缩(Summarization)

  • 使用轻量级 LLM 对历史对话生成摘要;
  • 保留核心信息,大幅减少 token 消耗。

语义去重(Deduplication)

  • 向量聚类:对历史片段做 embedding + KMeans 聚类,每类保留代表性样本;
  • 相似度过滤:若新记忆与某旧记忆的余弦相似度 > 阈值(如 0.9),视为重复,丢弃。

记忆过期淘汰

  • 采用类似 LRU(Least Recently Used) 的缓存淘汰策略;
  • 自动清除长时间未使用或低价值的旧记忆。

分层处理策略

  • 短期(最近 3 轮):原始对话全量保留;
  • 中期(3~20 轮):摘要后保留;
  • 长期(>20 轮):仅保留关键事件或用户画像信息。

6. 记忆中存在矛盾如何处理?

1. 时效优先原则

  • 默认以最新记忆为准,覆盖旧信息(如用户更新了联系方式)。

2. 冲突显式处理

  • 在 prompt 中加入指令,如:

    “若历史信息存在矛盾,请优先采用最新内容;若无法判断,请向用户澄清。”

  • 引导 LLM 主动识别冲突并追问用户确认,避免错误推理。

3. 保留多版本(可选)

  • 对关键信息(如诊断结论)保留多个版本及时间戳,供后续审计或回溯。

7. RAG 与记忆的区别与联系

核心区别

维度RAG(Retrieval-Augmented Generation)记忆(Memory)
目的引入外部领域知识(如文档、知识库)记录用户交互历史(你是谁、做过什么)
数据来源静态知识库、企业文档、网页等动态生成的对话日志、用户行为
解决的问题“模型不知道这个领域知识”“模型不记得你之前说过什么”

协同关系

  • 可结合使用
    • 记忆 获取用户上下文(如“我上次问过糖尿病饮食”);
    • RAG 检索最新医学指南;
    • 两者共同构建个性化 + 专业性的回答。
  • 典型架构:Memory → 用户上下文 + RAG → 领域知识 → LLM 生成最终回复。

8. Agent中的记忆(Memory)模块通常如何实现?分为哪些类型?

AI Agent 的记忆模块负责存储、提取与更新任务相关的信息,常分为短期记忆、长期记忆和工作记忆三类。支持 Agent 保持上下文、利用经验、长期规划,是实现智能行为的关键。

实现方式包括滑动窗口、向量数据库、知识图谱等,核心操作包括读、写、更新和遗忘。

记忆模块对比

记忆类型作用常见实现方式特点/用途
短期记忆 (STM)存储当前上下文滑动窗口、对话摘要、原始历史快速、易忘
长期记忆 (LTM)存储持久知识/经验向量数据库、知识图谱、关系库、文件可扩展、需检索
工作记忆 (WM)暂存中间状态和变量临时变量、数据结构、执行状态动态、紧跟任务

核心操作

操作说明
写入提取关键信息 → 摘要/向量化 → 存入数据库
读取语义检索、时间回溯、重要性筛选、结构化查询
更新修改旧信息,如用户偏好、任务状态等
遗忘定期清理无用信息,保持高相关性

Agent 就像一个“笔记员”

  • 短期记忆 便利贴:记的是刚刚发生的事(随时可能丢)

  • 长期记忆 知识笔记本:存放过去经历、重点知识(需要目录检索)

  • 工作记忆 临时草稿区:当前任务中用到的变量(任务一结束就清空)

易错点提醒

  • 不要混淆短期记忆工作记忆:前者是上下文,后者是中间变量。

  • 长期记忆 ≠ 一定是向量库:也可以是知识图谱或数据库,关键是“可持久、可检索”。

  • 遗忘机制不是删除数据这么简单,而是策略性丢弃无用信息。

9. LangChain 中 Memory(记忆)组件详解

一、核心作用

LangChain 的 Memory 组件用于在 Chain(链)或 Agent 的多次交互之间维持状态,使 LLM 应用具备“记忆能力”,从而实现更连贯、上下文感知的对话体验。

具体作用包括:

  • 维持对话上下文:记住用户与 AI 之前的对话内容,使后续回复具备历史依据;
  • 存储关键信息:自动提取并保存用户偏好、实体信息(如姓名、地点)等;
  • 支持长期交互:在多轮甚至跨会话场景中积累和复用知识;
  • 提升用户体验:避免重复提问,实现个性化、流畅的交互流程。

二、常见 Memory 类型

LangChain 提供了多种 Memory 实现,适用于不同场景下的上下文管理需求:

1. 缓冲区类(Buffer-based)

适用于短期、简单上下文记忆。

  • ConversationBufferMemory

    • 存储完整的原始对话历史(用户输入 + AI 回复);
    • 优点:信息完整;
    • 缺点:随对话增长迅速消耗 Token,可能超出模型上下文窗口。
  • ConversationBufferWindowMemory

    • 仅保留最近 K 轮对话(滑动窗口);
    • 优点:控制 Token 使用;
    • 缺点:可能丢失早期但关键的信息。

2. 摘要类(Summary-based)

适用于需要压缩历史、节省 Token 的场景。

  • ConversationSummaryMemory

    • 使用 LLM 对历史对话动态生成摘要;
    • 每轮将新对话内容追加到摘要中;
    • 优点:Token 效率高;
    • 缺点:摘要可能丢失细节,且每次需调用 LLM 生成。
  • ConversationSummaryBufferMemory(混合型)

    • 结合缓冲区 + 摘要:保留最近 N 条原始消息,其余用摘要表示;
    • 信息保真度Token 效率 之间取得平衡。

3. 实体感知类(Entity-aware)

  • ConversationEntityMemory
    • 自动从对话中识别实体(如人名、地点、产品);
    • 为每个实体维护独立的记忆片段;
    • 后续提及该实体时,自动注入相关上下文;
    • 适合需要跟踪多实体状态的复杂对话。

4. 知识图谱类(Knowledge Graph)

  • ConversationKGMemory
    • 将对话中提取的实体及其关系构建成知识图谱;
    • 支持结构化存储与查询;
    • 适用于需要推理实体间关系的高级场景(如客服、智能助理)。

5. 向量存储类(Vector Store-backed)

  • 将对话片段或摘要嵌入为向量,存入向量数据库(如 FAISS、Chroma);
  • 每次交互时,根据当前问题语义检索最相关的过往记忆;
  • 优势:可扩展性强,适合海量历史数据;
  • 典型应用:长期记忆、个性化推荐、跨会话上下文恢复。

6. 组合记忆(Combined Memory)

  • 支持将多种 Memory 类型组合使用;
  • 例如:
    • BufferMemory(保留最近对话) + SummaryMemory(压缩早期历史);
    • EntityMemory + VectorStoreMemory(兼顾结构化与语义检索);
  • 通过 CombinedMemory 类实现灵活配置。

三、使用方式

  • 在创建 Chain 或 Agent 时,传入一个 Memory 实例(如 ConversationBufferMemory());
  • 组件会自动:
    • 读取历史记忆;
    • 更新新交互内容;
    • 注入相关上下文到 Prompt 中(通常作为 history 变量);
  • 开发者无需手动管理对话状态,LangChain 自动处理序列化与整合。

四、选型建议

需求场景推荐 Memory 类型
简单短对话ConversationBufferMemory
长对话 + Token 限制ConversationSummaryBufferMemory
需要跟踪用户/实体信息ConversationEntityMemory
结构化关系推理ConversationKGMemory
海量历史 + 语义检索向量存储记忆
复杂混合需求CombinedMemory 组合使用

关键权衡因素:Token 消耗、信息保真度、计算开销、实现复杂度。