尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

大模型长期记忆增强:从上下文窗口到RAG工程实践

大模型长期记忆增强:从上下文窗口到RAG工程实践 之前在做一个 AI 知识助手时我遇到一个很典型的问题用户在第一轮对话里明确说了“我目前在用 Java 17团队最近在迁移 Spring Boot 3”但等聊到第十轮时助手完全忘了这回事又给出针对 Java 8 的老旧建议。用户非常无语我也很无奈——因为大模型本身确实“记不住”它的所有理解都依赖于当前请求携带的上下文。这也是很多 AI 应用从 Demo 走向生产时必须面对的一道坎如何让大模型拥有长期记忆。本文就围绕“Augmenting Long-Term Memory增强长期记忆”这个主题从概念、原理到代码实现完整拆解一套可落地的长期记忆增强方案。无论你是在做大模型应用开发、Agent 设计还是想优化 RAG 系统的上下文效果这篇文章都能给你一条清晰的实践路径。在开始之前先说明本文讨论的范围我们不会讲大模型内部参数怎么改也不会讲怎么微调模型权重而是聚焦在外部记忆系统的工程实现上——也就是通过检索、存储、摘要和注入方式让大模型在推理时能“想起”更早之前的信息。这是当前成本最低、效果最可控的长期记忆增强方案。1. 为什么大模型需要长期记忆增强1.1 大模型的上下文窗口限制大模型本身是一个“无状态”的预测引擎。你给它一段输入文本它根据训练得到的模式预测下一个 token并依次生成回复。这种机制决定了模型不会自动保存“上一次说了什么”。为了让多轮对话表现得更自然开发者通常会把历史消息拼接到当前请求里一起发送给模型。这也是所谓“上下文窗口”的由来。但问题在于上下文窗口是有限的。常见的模型上下文长度有 4K、8K、32K甚至更高但即使支持 200K 的模型也不能无限塞入历史内容。原因有三点输入序列越长计算开销越大响应延迟越高。大量无关或重复的历史内容会稀释模型对关键信息的注意力。当历史消息真的超过窗口上限时系统必须丢弃一部分内容而丢弃的往往是“最早的信息”也就是用户最初提到的偏好和背景。所以上下文窗口提供的是“短期记忆”而不是真正的“长期记忆”。1.2 短期记忆与长期记忆的区别在认知科学中人类记忆本身就分为短期记忆和长期记忆。短期记忆容量有限只能维持几十秒到几分钟长期记忆则几乎不受容量限制可以跨天、跨月甚至跨年保存。在 AI 应用里我们可以做一个类似的切分记忆类型实现方式生命周期典型容量短期记忆对话上下文拼接单次会话受上下文窗口限制工作记忆当前任务相关临时信息会话或任务期间较小目标明确长期记忆外部存储 检索注入跨会话、跨天理论上无上限参数记忆模型权重中的知识训练后固定极大但无法定向更新这里最容易踩的坑是把“长期记忆”等同于“更大的上下文窗口”。虽然增大窗口确实能装更多历史但它没有解决信息的选择性问题。长期记忆增强的核心不是“装更多”而是“记住重要的、忘记无关的、随时找得到”。1.3 长期记忆增强的常见应用场景实际业务中以下几类场景特别依赖长期记忆增强个性化 AI 助手记住用户的职业、语言偏好、饮食禁忌、常用工具链在多轮对话中保持一致。企业知识助手将历史工单、产品文档、内部 FAQ 归档为长期记忆新员工提问时能检索到旧问题的解决方案。自动化 Agent 任务编排Agent 在执行复杂任务时需要记住中间步骤、状态变更和约束条件避免重复执行或遗忘分支。教育陪练系统系统通过长期记忆追踪学生的学习进度、薄弱知识点从而制定个性化练习计划。客户支持系统结合用户历史工单和购买记录提供连贯的售后服务而不是让用户每次都复述问题背景。在这些场景里单纯靠“把所有历史拼进 Prompt”是不够的。我们需要一个结构化的外部记忆层。2. 长期记忆系统的核心组成为了方便理解我将长期记忆系统拆成四个核心模块。2.1 记忆的采集与写入记忆不是凭空产生的。系统要从对话、用户操作、外部数据库中采集有价值的信息然后进行格式化与清洗。采集阶段需要解决两个问题哪些信息值得写入记忆以什么形式写入记忆以 AI 助手为例如果你直接把所有原始对话都写入向量库会出现大量噪音。比如用户说“今天天气不错”这种信息通常不值得长期保存。更合理的做法是在对话结束后重新做一轮信息抽取提取出结构化事实和长期偏好。在实际项目中采集阶段常见的设计方式包括规则抽取针对邮箱、手机号、日期、地点等固定格式信息用正则或 NER 模型抽取。LLM 抽取让大模型对对话记录进行结构化提取输出 JSON 格式的用户画像或事实列表。显式声明用户主动说“请记住我喜欢用 Python”此时将这句话作为高置信度记忆写入。2.2 记忆的存储结构化与向量化存储层决定了记忆的检索效率和扩展能力。长期记忆至少有两种存储形态往往是组合使用存储形态适用数据检索方式典型实现结构化存储用户画像、偏好标签、ID 映射SQL / 精确匹配MySQL、PostgreSQL、Redis向量存储对话片段、文档片段、语义记忆向量相似度检索FAISS、Milvus、pgvector、ChromaDB摘要存储会话摘要、长期结论精确映射 向量检索文本文件、Redis、向量库结构化存储适合“用户会明确去改”的信息比如姓名、会员等级、语言偏好。向量存储适合“用于语义召回”的信息比如“用户之前提到过他在用某个开源框架做数据同步”。向量化的过程就是把文本变成高维浮点数数组。语义相近的文本在向量空间中的距离也更近。这样即使查询词与原文不完全一致也能通过相似度命中。2.3 记忆的检索与注入记忆写入存储之后什么时候被读取以什么方式注入 Prompt是决定效果好坏的关键环节。常见检索策略包括基于当前用户问题做向量检索召回相关记忆。基于当前会话关键词做混合检索结合词汇匹配与语义匹配。基于时间衰减优先召回近期发生的记忆。基于记忆类型过滤比如只召回“用户偏好”类记忆。检索结果注入时要注意三点注入位置通常在系统提示词或上下文开头作为模型的背景知识。注入内容需要标注来源和置信度避免模型混淆“记忆事实”和“当前对话内容”。注入数量要有上限一般取 top 3 ~ top 10避免无关记忆干扰。2.4 记忆的更新与遗忘长期记忆不能只增不改。如果用户说“我不用 Java 了正在学 Go”系统就应该更新之前的“Java”记忆而不是让两条矛盾信息同时存在。记忆更新策略要区分场景类型策略示例覆盖新记忆直接替换同键值旧记忆用户联系方式变更合并新旧记忆并存补充上下文用户新增一种编程语言版本化保留历史版本支持回溯企业知识库文档更新过期删除设置 TTL 或配置遗忘规则临时任务的中间状态遗忘机制也很重要。如果一个记忆长期未被检索命中或触发应当允许系统通过定期任务清理保证存储层的数据质量。3. 环境准备与项目结构说完了理论下面进入实战环节。我们将用 Python 实现一个带长期记忆增强的问答助手 Demo。整体思路不依赖重量级框架而用最直接的方式展示完整链路对话信息抽取 → 向量化 → 存储 → 检索 → 注入 → 问答。版本需要根据你的项目实际情况调整本文示例以常见环境为例重点演示配置思路。3.1 环境依赖需要安装以下 Python 库pip install sentence-transformers faiss-cpu numpy openai说明一下各库的用途sentence-transformers将文本转换为 embedding 向量。我们优先使用本地模型避免额外的 API 调用。faiss-cpuMeta 开源的向量检索库用于存储向量和做相似度检索。numpy向量数据处理。openai用于调用大模型生成回复。如果你不需要真实调用 LLM也可以先用模板字符串模拟不影响对记忆机制的理解。如果你希望使用 OpenAI 的 Embedding 接口可以这样替换from openai import OpenAI client OpenAI() def get_embedding(text): resp client.embeddings.create( modeltext-embedding-3-small, inputtext ) return resp.data[0].embedding使用在线 API 需要申请并配置 API Key。为了降低使用门槛下面的示例默认采用 sentence-transformers 的本地模型。3.2 项目结构整个 Demo 的文件结构如下long-term-memory-demo/ ├── config.py # 常量与配置 ├── memory_store.py # 长期记忆存储与检索 ├── memory_extract.py # 对话记忆抽取 ├── assistant.py # 带记忆注入的对话助手 └── main.py # 命令行交互入口3.3 数据说明我们不会引入外部数据集而是通过一段人工构造的模拟对话来演示效果。对话中包含用户的职业信息、语言偏好、项目背景等内容便于验证长期记忆是否生效。4. 基于 RAG 的长期记忆增强实战这一节是本文核心。我会分 4 步实现一个完整的长期记忆增强问答助手。4.1 记忆写入对话记录拆块与向量化先创建config.py定义向量模型名称和存储路径。# 文件路径long-term-memory-demo/config.py EMBEDDING_MODEL_NAME paraphrase-multilingual-MiniLM-L12-v2 VECTOR_INDEX_PATH ./faiss_index.index MEMORY_META_PATH ./memory_meta.json TOP_K 5注意paraphrase-multilingual-MiniLM-L12-v2是一个多语言 embedding 模型支持中文语义检索。首次运行时会自动下载模型文件需要保持网络畅通。然后创建memory_store.py这是整个长期记忆系统的核心。它负责将文本片段向量化、写入 FAISS 索引、保存元数据并支持检索。# 文件路径long-term-memory-demo/memory_store.py import json import numpy as np import faiss from sentence_transformers import SentenceTransformer from config import EMBEDDING_MODEL_NAME, VECTOR_INDEX_PATH, MEMORY_META_PATH, TOP_K class MemoryStore: def __init__(self): self.model SentenceTransformer(EMBEDDING_MODEL_NAME) self.index None self.meta [] self._load_or_create_index() def _load_or_create_index(self): 加载已有索引或创建新的索引。 try: self.index faiss.read_index(VECTOR_INDEX_PATH) with open(MEMORY_META_PATH, r, encodingutf-8) as f: self.meta json.load(f) print(f[MemoryStore] 已加载 {len(self.meta)} 条历史记忆) except Exception: self.index faiss.IndexFlatIP(self.model.get_sentence_embedding_dimension()) print([MemoryStore] 已创建空索引) def _save(self): 持久化索引和元数据。 faiss.write_index(self.index, VECTOR_INDEX_PATH) with open(MEMORY_META_PATH, w, encodingutf-8) as f: json.dump(self.meta, f, ensure_asciiFalse, indent2) def add_memory(self, text: str, memory_type: str dialogue, metadata: dict None): 写入一条长期记忆。 Args: text: 要记忆的文本内容。 memory_type: 记忆类型如 preference、fact、dialogue。 metadata: 附加的元数据如时间、来源等。 vector self.model.encode([text], normalize_embeddingsTrue) self.index.add(np.array(vector, dtypenp.float32)) item { id: len(self.meta), text: text, type: memory_type, metadata: metadata or {} } self.meta.append(item) self._save() print(f[MemoryStore] 已写入记忆 #{item[id]}: {text}) def search(self, query: str, top_k: int TOP_K): 根据查询文本检索最相关的记忆。 if self.index.ntotal 0: return [] query_vector self.model.encode([query], normalize_embeddingsTrue) scores, indices self.index.search( np.array(query_vector, dtypenp.float32), kmin(top_k, self.index.ntotal) ) results [] for score, idx in zip(scores[0], indices[0]): if idx 0: continue results.append({ score: float(score), text: self.meta[idx][text], type: self.meta[idx][type], metadata: self.meta[idx][metadata] }) return results if __name__ __main__: store MemoryStore() store.add_memory(用户使用 Java 17 开发微服务, memory_typefact) store.add_memory(用户偏好 Python 进行数据处理, memory_typepreference) results store.search(用户喜欢什么编程语言) for r in results: print(r)代码中有几个关键点需要解释faiss.IndexFlatIP是内积索引搭配normalize_embeddingsTrue时内积等价于余弦相似度。每条记忆都会分配一个自增 id元数据单独保存在 JSON 文件中方便后续扩展。_save()方法在每次写入后都做持久化。生产环境可以考虑批量写入减少 IO 频率。运行这一段后你会看到类似输出[MemoryStore] 已创建空索引 [MemoryStore] 已写入记忆 #0: 用户使用 Java 17 开发微服务 [MemoryStore] 已写入记忆 #1: 用户偏好 Python 进行数据处理这表示记忆已经成功写入向量库。4.2 记忆检索相关性查询在上面的代码中search方法已经实现了检索逻辑。核心步骤是将查询文本编码成向量。调用index.search在向量索引中查找最近的 top_k 个结果。将命中的 id 映射回元数据返回带分数结果。这里有一个比较容易忽略的问题IndexFlatIP是最基础的暴力检索实现数据量较小时效果很好但当记忆条数达到百万级别时检索延迟会明显上升。生产环境应替换为 IVF、HNSW 等近似最近邻索引。下面是一个用 HNSW 创建索引的示例思路# 说明这是一个生产环境可选的索引替换示例需要按实际数据量调参 import faiss dim 384 quantizer faiss.IndexFlatIP(dim) index faiss.IndexHNSWFlat(dim, 32) index.hnsw.efConstruction 200 index.hnsw.efSearch 64当记忆量较大时HNSW 在检索速度和精度之间提供了更好的平衡。4.3 记忆注入构造增强 Prompt有了检索结果还需要把它们整理成模型可以理解的语言。下面创建assistant.py其中定义build_prompt_with_memory方法用来将记忆注入到系统提示词中。# 文件路径long-term-memory-demo/assistant.py from memory_store import MemoryStore def format_memories(memories): 将记忆列表格式化为 Prompt 片段。 if not memories: return 暂无长期记忆。 lines [] for mem in memories: type_desc { preference: [偏好], fact: [事实], dialogue: [对话] }.get(mem[type], [记忆]) lines.append(f{type_desc} {mem[text]}) return \n.join(lines) def build_prompt_with_memory(user_question, memories, recent_historyNone): 构造带长期记忆的 Prompt。 memory_block format_memories(memories) system_prompt f你是用户的长期 AI 助手。请基于长期记忆回答用户的问题。 ## 长期记忆 {memory_block} ## 回答要求 1. 如果长期记忆中有相关信息请优先使用它。 2. 不要编造长期记忆中不存在的事实。 3. 如果记忆与当前问题冲突以最新记忆为准。 if recent_history: history_block \n.join(recent_history) user_content f## 最近对话 {history_block} ## 当前问题 {user_question} else: user_content f## 当前问题\n{user_question} return [ {role: system, content: system_prompt}, {role: user, content: user_content} ] class LongTermAssistant: def __init__(self): self.memory_store MemoryStore() self.recent_history [] def ask(self, question): 检索记忆并回答。这里用简化逻辑演示 Prompt 构造。 memories self.memory_store.search(question) prompt build_prompt_with_memory(question, memories, self.recent_history) # 真实项目中这里会调用 LLM例如 # response openai_client.chat.completions.create(...) # 为了演示我们直接打印构造好的 Prompt。 response f[模拟回复] 已检索到 {len(memories)} 条长期记忆请调用 LLM 生成最终回答。 return response, prompt, memories在上面的代码中build_prompt_with_memory返回的是标准的 Chat 消息数组。如果你使用的是 OpenAI SDK可以直接透传给chat.completions.create。这里需要解释一个设计点为什么要把记忆放在系统提示词中而不是放在用户消息里因为系统提示词在 ChatGPT 类模型中通常具有更高的指令优先级适合承载“背景知识”和“行为约束”。放在用户消息中也能生效但容易被模型当作普通对话上下文对待重要性不够稳定。4.4 整合带长期记忆的问答 Demo最后创建main.py启动一个命令行交互程序。用户可以输入问题程序会先检索长期记忆再拼接 Prompt。# 文件路径long-term-memory-demo/main.py from memory_store import MemoryStore from assistant import build_prompt_with_memory def seed_mock_memories(store: MemoryStore): 写入一些模拟的长期记忆方便演示。 store.add_memory(用户目前负责一个订单中台项目技术栈是 Java 17 Spring Boot 3, memory_typefact) store.add_memory(用户偏好使用 Python 脚本处理临时数据和报表, memory_typepreference) store.add_memory(用户所在团队计划在下个季度引入消息队列 Kafka, memory_typefact) store.add_memory(用户之前反馈过生产环境的日志查询响应太慢希望做日志链路追踪优化, memory_typedialogue) def main(): store MemoryStore() seed_mock_memories(store) print(已启动带长期记忆的问答助手输入 exit 退出。\n) while True: question input(你) if question.lower() in {exit, quit, q}: break memories store.search(question) prompt build_prompt_with_memory(question, memories) print(\n[系统] 检索到的长期记忆) for mem in memories: print(f - ({mem[score]:.3f}) {mem[text]}) print(\n[系统] 构造的 Prompt) for msg in prompt: print(f [{msg[role]}]) print(msg[content]) print( ---) print() if __name__ __main__: main()运行方式cd long-term-memory-demo python main.py输入测试问题你我们在日志排查方面有没有过什么历史经验你会在输出中看到长期记忆检索命中了“生产环境的日志查询响应太慢”这一条并且构造出的 Prompt 中包含了这条记忆。这就是长期记忆增强的完整链路。对比测试如果你去掉检索和注入环节直接让模型回答“我们在日志排查方面有没有过什么历史经验”模型只能随机编一个答案因为它根本没有这次的对话背景。长期记忆的作用在这里体现得非常明显。5. 进阶记忆摘要与分层记忆管理上面的 Demo 是一个最小可运行版本。真实项目中还需要处理更复杂的问题比如记忆冲突、历史过长、记忆质量低等。本小节介绍三个进阶方向。5.1 会话摘要压缩当一次会话的对话轮次很多时直接把原始记录全部写入记忆并不可取。更常见的方式是在会话结束后让大模型生成一段摘要再将摘要作为新的记忆写入。示例实现思路如下import openai client openai.OpenAI() def summarize_conversation(messages): 将一组对话消息压缩成摘要。 text \n.join([f{m[role]}: {m[content]} for m in messages]) resp client.chat.completions.create( modelgpt-4o-mini, messages[ {role: system, content: 请用 3-5 句话提炼这段对话中关于用户的事实、偏好和重要背景。}, {role: user, content: text} ] ) return resp.choices[0].message.content生成摘要后再调用memory_store.add_memory(summary, memory_typesummary)完成写入。这里要注意的是摘要会丢失细节。因此实际项目中通常采用「原始记忆 摘要记忆」双层结构重要的原始片段保留在向量库里摘要负责长期趋势和背景信息。5.2 分层记忆分层记忆的设计灵感来自人类记忆模型。你可以将记忆划分为层级特点存储时间核心记忆用户身份、关键偏好永久保存永久工作记忆当前会话上下文任务状态会话期间情景记忆具体事件的历史记录一段时间语义记忆从历史中归纳出的知识长期在代码实现中可以通过给每条记忆增加level字段来实现分层store.add_memory( 用户是后端开发工程师, memory_typefact, metadata{level: core} ) store.add_memory( 2024-05-12 用户询问过日志链路追踪方案, memory_typeepisode, metadata{level: episodic, timestamp: 2024-05-12} )检索时可以对核心记忆设置更高的权重或者根据不同场景选择性地注入不同层级。5.3 记忆冲突处理当记忆库中存在矛盾信息时必须设计冲突处理规则。例如时间戳优先以更新时间最近的一条为准。显式确认优先用户主动说“请记住”的内容置信度高于自动抽取内容。来源优先级结构化用户画像 对话抽取 系统猜测。冲突检测可以在写入阶段做也可以通过定期任务扫描。简单实现方式def detect_conflict(existing_memories, new_memory_text): 简单冲突检测关键词级别。生产环境建议用 embedding 相似度。 conflict_keywords [不喜欢, 不用, 换用, 不再是] for mem in existing_memories: if any(kw in new_memory_text for kw in conflict_keywords): return True return False当检测到冲突时可以主动询问用户确认或者将旧记忆标记为deprecated在检索时过滤掉。6. 常见问题与排查思路长期记忆系统在落地过程中会遇到很多实际问题。下面整理一份常见问题表格并给出排查思路。问题现象常见原因解决思路检索不到相关记忆embedding 模型对中文/领域术语支持不佳更换多语言模型或领域模型增加同义词扩展检索结果不相关top_k 过大或索引中噪音太多降低 top_k增加记忆类型过滤旧记忆和新记忆冲突没有设计更新策略增加时间戳和覆盖机制上下文仍然超出窗口注入的记忆太多加上历史消息过长限制注入数量改用摘要替代原始对话每次对话都重复写入相同记忆缺少记忆去重逻辑写入前先检索相似记忆判断是否存在重复向量库文件越来越大长期累积且没有清理机制配置 TTL 或定期归档过期记忆本地 embedding 模型推理太慢模型参数量大、CPU 推理换用量化模型或使用 GPU 部署或改 API 调用生产环境多实例部署时记忆不一致没有共享存储使用 Milvus、pgvector 等外部向量数据库6.1 高频问题首次运行下载模型很慢如果你使用 sentence-transformers首次运行时需要从 Hugging Face 下载模型。网络较慢时可以换用国内镜像源或者提前把模型下载到本地目录后指定加载路径model SentenceTransformer( ./models/paraphrase-multilingual-MiniLM-L12-v2 )6.2 高频问题检索结果数量不稳定faiss.IndexFlatIP.search的返回结果数量取决于索引中已有的向量总数。如果索引为空ntotal为 0search会直接报错。所以检索前一定要加判断if self.index.ntotal 0: return []已有代码中的实现已经包含了这个保护逻辑但是在其他项目中很容易遗漏。6.3 高频问题真实 LLM 调用后效果不佳如果 Prompt 已经正确构造但模型回答仍然不使用记忆通常是系统提示词中的指令不够清晰。建议在提示词中加上“输出时如果引用了记忆信息请标注来源”例如如果你在回答中使用了长期记忆信息请在结尾用「参考记忆 #编号」标注。这样可以方便定位问题到底出在检索环节还是模型没有遵循指令。7. 工程落地建议与最佳实践长期记忆增强不是简单加一个向量库就完事。要把它做成稳定的生产功能还需要关注以下几个方面。7.1 记忆数据的安全与权限长期记忆往往包含用户的个人信息、偏好、甚至机密业务信息。因此在工程上必须做到记忆数据严格按用户维度隔离A 用户不能检索到 B 用户的记忆。涉及敏感字段时进行加密存储。支持用户查看、导出和删除自己的记忆数据。在采集和写入前明确告知用户该数据将被用于记忆增强。在生产环境中最简单的隔离方式是在每条记忆的元数据中加入user_id字段检索时先过滤该字段。# 检索时带上 user_id 过滤防止跨用户数据泄露 def search_by_user(self, query: str, user_id: str, top_k: int TOP_K): all_results self.search(query, top_ktop_k * 5) filtered [r for r in all_results if r[metadata].get(user_id) user_id] return filtered[:top_k]这个方案虽然并不完美但能提供一个基础的数据隔离逻辑。正式实现时建议直接选用支持元数据过滤的向量数据库例如 Milvus 或 pgvector。7.2 检索质量优化检索质量直接决定长期记忆的效果。你可以从以下角度持续优化混合检索用「向量检索 关键词检索」并行召回再做融合排序。重排序对候选记忆使用 cross-encoder 模型重新打分保留高置信度结果。反馈闭环用户点赞、踩或主动修改记忆的日志用来定期评估检索质量。记忆类型的权重调整用户偏好类记忆权重应高于普通对话片段。7.3 成本与性能控制每次对记忆库做向量化调用都会产生时间和资金成本。建议采用以下策略对话不实时写入而是通过异步任务在会话结束后批量处理。优先使用本地 embedding 模型或采购支持批量处理的 API。对写入的内容做去重和长度限制避免无效数据膨胀。对高频用户的记忆做缓存减少重复检索。7.4 可观测性与测试长期记忆是典型的“没有标准答案”的模块必须建立有效的评估方式。我建议维护一组测试用例至少覆盖旧偏好被新偏好覆盖。不同用户的记忆不串线。检索结果与问题语义相关。注入记忆后模型回答更准确。高峰期检索延迟满足 SLA。把这些测试用例集成到 CI 中每次改动记忆策略或 embedding 模型时自动运行回归。7.5 不要忽略人性化的遗忘设计长期记忆并非越全越好。如果助手总是提起用户半年前的陈旧偏好用户体验会很奇怪。你需要设计合理的“遗忘”机制对临时性记忆设置有效期比如“下周三要交周报”这类任务应该自动过期。对长期不活跃的记忆逐步降低检索权重。允许用户手动删除或纠正记忆。一个好的长期记忆系统不应该只做加法还要会做减法。8. 总结与下一步学习路线本文围绕“Augmenting Long-Term Memory”完整梳理了大模型长期记忆增强的背景、原理和工程实现。我们从上下文窗口的局限出发讨论了短期记忆与长期记忆的区别然后拆解了一个长期记忆系统的四个核心模块采集、存储、检索、更新。紧接着用一个最小可运行的 Python Demo 演示了基于 FAISS 和 sentence-transformers 的长期记忆链路最后给出了分层记忆、冲突处理、质量优化和权限隔离等进阶建议。接下来如果你想继续深入可以按这个顺序学习熟悉常见的向量数据库如 Milvus、pgvector、ChromaDB理解它们各自的索引类型和部署方式。学习 RAG 的进阶优化方法包括混合检索、重排序、上下文压缩。研究 Agent 记忆框架的设计思路比如 MemGPT 中的分层记忆思想和摘要机制。尝试将长期记忆与业务系统打通例如把用户画像、工单历史、业务标签纳入记忆系统。长期记忆增强是一个实践性很强的方向光看概念远远不够。建议你照着上面的代码搭建一个最小 Demo然后逐步替换成真实模型和真实数据。只有亲手跑通一次“写入 → 检索 → 注入 → 回答”的闭环你才能真正理解这套系统里每个环节的价值。如果本文对你有帮助可以收藏备用。如果在实践过程中遇到问题也欢迎在评论区交流讨论。
返回列表