2026/2/12 7:19:27
网站建设
项目流程
网站名称价格,中国建筑工程网承包企业管理系统,wordpress 添加账号,济南网站建设是什么意思记忆#xff08;Memory#xff09;是AI智能体必备的能力之一。随着对话轮数与深度的增加#xff0c;如何让AI智能体“记住”过去的上下文#xff0c;是实现精准理解与个性化AI系统的关键。由于LLM存在上下文长度限制#xff0c;如果不对记忆进行优化#xff0c;长对话很容…记忆Memory是AI智能体必备的能力之一。随着对话轮数与深度的增加如何让AI智能体“记住”过去的上下文是实现精准理解与个性化AI系统的关键。由于LLM存在上下文长度限制如果不对记忆进行优化长对话很容易带来两个问题遗忘早期信息导致理解偏差过度消耗大量计算资源与成本尽管有Mem0等优秀的开源框架我们仍然有必要从原理上来理解不同的Memory策略这有助于在项目中评估、选择与实现最合适的Memory方案。本文将剖析8种常见的AI记忆方案分析其原理、特点和场景并用模拟代码帮助理解。全量记忆不遗忘任何内容滑动窗口固定长度的截断相关性过滤遗忘次要信息摘要/压缩提炼关键信息向量数据库语义检索记忆知识图谱结构化记忆分层记忆短期与长期结合类OS内存管理模拟Swap原理01全量记忆不遗忘任何内容全量记忆模式是最基础、最容易实现的记忆策略。其核心理念是不遗忘任何历史上下文每轮对话都将用户输入与智能体响应完整记录并在后续请求中将全部历史上下文一并发送给LLM进行推理。【基本实现】将每轮对话按顺序累积在“对话历史”中每次回复时都将完整历史作为上下文提供给模型。以下是简单的模拟代码为了帮助理解本文针对每种模式简单的模拟实现基本的“添加记忆”与“检索记忆”的过程。实际应用需自行完善。history [] def add_message(user_input, ai_response): turn { user: user_input, assistant: ai_response } history.append(turn) def get_context(query): return concat_all(history)【特点分析】优点实现简单无需复杂算法完整保留了所有细节信息不丢失。缺点对话稍长可能会触发上下文长度上限模型需要处理越来越多的文本导致响应变慢且成本升高。一旦超过模型上下文窗口早期内容不得不被截断重要信息可能丢失。此外长期保留大量不相关旧信息也可能干扰模型判断。【适合场景】仅适用于对话轮次很少或者内容短的场景比如简单QA或一次性问答。在这些情况下全量记忆确保即使用户提及之前的话题智能体也不会遗漏。但很显然在大多数实际应用中这种策略不可持续。02滑动窗口固定长度记忆针对全量记忆的弊端最简单的改进是限制记忆长度人类对话中我们往往只关注最近的信息旧话题慢慢就淡忘了。滑动窗口策略正是模仿这种特性只保留最近的若干轮对话将更早的内容遗忘以控制上下文长度。【基本原理】维护一个固定大小的队列作为对话窗口每当有新对话加入时如果超过窗口大小就从队首移除最旧的一条。模拟实现代码如下memory []WINDOW_SIZE 3 # 最多保留 3 轮完整对话 def add_message(user_input, ai_response): turn { user: user_input, assistant: ai_response } memory.append(turn) if len(memory) WINDOW_SIZE: memory.pop(0) # 移除最早一轮问答 def get_context(query): return concat_all(memory) # 返回最近几轮对话这样无论对话多长传给模型的上下文始终是最近的N次交互记录 。窗口向前滑动新进旧出实现对过往对话的截断。【特点分析】优点实现非常简单开销低不需要引入外部存储确保模型上下文始终在设定大小内响应速度和成本相对可控 。缺点健忘性强一旦窗口滑过旧信息就永久丢失无法支持真正的长期记忆 。如果用户稍后又提及早前内容智能体因已遗忘就无法关联。此外窗口大小也难以抉择太小会过早遗忘历史太大又降低了节省上下文的意义。【适用场景】滑动窗口适用于**短对话场景或对历史依赖不强的任务。例如FAQ助手、简单闲聊机器人等不需要长久记住早先话题 。本质上你需要考虑取舍通过遗忘来换取性能和成本但不适合需要长程依赖的对话。03相关性过滤遗忘次要信息人类会选择性记忆对无关紧要的事很快忘掉。类似地智能体的记忆也可以有所取舍优先保留重要信息丢弃无用细节。相关性过滤策略就是基于信息的重要程度来管理记忆而不是简单的抛弃旧记忆。【基本原理】系统为每条记忆分配一个“重要性”或“相关性”评分Score根据评分高低决定保留或清除。当新信息进入导致容量超限时自动删除评分最低的记忆 。评分可以依据多种因素与当前对话主题的相关程度、最近被提及的频率、信息本身的重要度例如包含用户关键偏好的句子打高分等。实现时可用一个列表或优先队列按分值排序。模拟如下memory []MAX_ITEMS 25 def add_message(user_input, ai_response): item { user: user_input, assistant: ai_response, score: evaluate(user_input, ai_response), } memory.append(item) if len(memory) MAX_ITEMS: # 找出得分最低的项 to_remove min(memory, keylambda x: x[score]) memory.remove(to_remove) def get_context(query): # 返回按对话顺序排列的高分记忆 return concat_all(sorted(memory, keylambda x: x[order]))【特点分析】优点保证关键知识不会遗忘因为重要内容打分更高。相比盲目的窗口截断这种策略更“智能”能腾出空间的同时尽量不丢关键信息。缺点如何准确评估“重要性”是难点可能需要额外模型计算语义相关度或预定义规则。评分机制不完善时可能误判重要性删错记忆。此外它不像滑动窗口那样可预测会给调试和理解上带来复杂性。【适用场景】适合信息密集且需要筛选的场景如知识型对话机器人或研究助理工具。在这些应用中用户提供的大量信息需要智能体加以取舍。例如一个智能医学助手从患者冗长描述中挑出病史要点存储。04摘要/压缩提炼关键信息有没有办法在不丢失重要信息的前提下缩短对话长度摘要策略由此诞生。其动机是像人类做笔记一样将冗长的对话内容去除无用的信息寒暄、闲聊、重复信息等浓缩成关键要点事实、关键数据、兴趣爱好等保存 。这样既保留了核心信息又能大量节省上下文窗口空间缓解记忆无限增长的问题。在实际实现中可以结合滑动窗口策略超出窗口的对话才进行摘要与压缩。【基本原理】在对话过程中定期将较早的对话内容生成摘要与压缩并用这个摘要代替原始详细内容存入记忆。摘要可以由一个LLM生成。例如每当对话超过预定长度窗口大小时把最早的几轮对话拿出来总结模拟如下memory []summary NoneMAX_LEN 10 # 最多保留 10 轮问答 def add_message(user_input, ai_response): turn { user: user_input, assistant: ai_response } memory.append(turn) if len(memory) MAX_LEN: old_turns memory[:-5] summary_text summarize(old_turns) summary merge(summary, summary_text) memory.clear() memory.append({summary: summary}) memory.extend(memory[-5:]) def get_context(query): return concat_all(memory) # 返回摘要 最近对话轮这里示意了一种运行摘要的机制持续累计和更新一个摘要来代表早期的对话历史。每当记忆长度超标就把早期内容做摘要和压缩再与后续对话共同作为新的上下文 。这样模型上下文始终包含“近期对话 旧对话摘要”。【特点分析】优点大幅节省上下文长度长期记忆能力强——理论上通过不断摘要早期信息的要点可一直保留 。同时摘要内容精炼有助于模型聚焦关键信息。缺点摘要质量取决于LLM也可能遗漏细节或引入信息偏差。如果摘要不准确后续智能体基于摘要的生成可能出错。此外生成摘要本身需要耗费额外计算对实时对话有延迟影响。【适用场景】摘要记忆适用于长对话且需要保留上下文要点的场景智能体需记住用户的关键信息姓名、喜好、诉求等但不必逐字记住用户每句话。比如一个AI心理陪伴助手。AI可以采用摘要策略每次对话结束后将本次谈话要点总结存储。下次可以通过之前的摘要回顾用户曾提到的主要问题和情绪变化从而提供连续性的回应。05向量数据库语义检索记忆对于海量长期记忆一个理想方案是将知识存入一个外部数据库在需要时再调取。这类似人类查笔记或资料库。向量数据库记忆策略利用向量化嵌入Embedding将对话内容在向量库存储并在需要时通过语义检索相关记忆 。其动机在于突破LLM上下文窗口限制实现近乎无限的外部长时间记忆。【基本原理】将每次对话嵌入后存入向量数据库如 Chroma、Pinecone 等 。当需要记忆时把当前对话内容也向量化并在数据库中搜索语义相近的记忆片段将最相关的若干条取出添加到模型的上下文。模拟如下# 初始化向量存储memory VectorStore() def add_message(user_input, ai_response): turn { user: user_input, assistant: ai_response } embedding embed(turn) memory.add(embedding, turn) def get_context(query): q_embedding embed(query) results memory.search(q_embedding, top_k3) return concat_all(results) # 返回语义最相关的对话轮【特点分析】优点语义级别的智能检索能根据内容语义而非关键词匹配相关记忆 。存储容量大向量数据库可无限扩展以支持真正的长期记忆且检索效率高。缺点 依赖嵌入模型质量若向量表示不好检索结果也可能风马牛不相及 。向量存储与搜索有一定的计算代价当记忆库很大时每次相似度计算也会消耗算力 。另外需要部署维护额外的数据库服务增加系统复杂度。【适用场景】需要长期记忆的对话系统如个性化助理等。这类系统往往需要记住用户跨会话提供的信息也非常适合在聊天之外存储知识或用户背景因为有向量库让记忆检索具备类似RAG的效果。比如 一个法律咨询AI当用户提问复杂法律问题时AI可以同时检索出相关的记忆和法律知识用来做增强生成。06知识图谱结构化记忆纯粹依赖向量相似度的记忆系统往往将知识视作离散内容缺乏对知识之间关系的理解 。知识图谱记忆策略旨在以结构化方式存储和组织记忆信息通过显式的实体、属性和关系来增强智能体的长期结构化记忆和推理能力 。【基本原理】智能体将对话和交互中提及的实体、属性和关系这样的事实信息提取出来逐步构建起一个知识图谱。比如对话中有“小刘加入了阿里巴巴公司”那么提取三元组(小刘, 就职于, 阿里巴公司)。除此之外还可以记录事件发生的时间等形成时序知识图谱以处理随时间变化的知识 。当需要记忆检索时智能体可以查询知识图谱比如先找到相关联的节点、沿关系链追溯信息甚至进行路径上的逻辑推理最后将查询或推理出的信息加入上下文。graph KnowledgeGraph() # 初始化知识图谱对象def add_message(user_input, ai_response): # 将一轮对话转化为结构化三元组 (实体1, 关系, 实体2) full_text fUser: {user_input}\nAI: {ai_response} triples extract_triples(full_text) # LLM提取三元组 for s, r, o in triples: graph.add_edge(s.strip(), o.strip(), relationr.strip())def get_context(query): # 提取查询中可能涉及的实体 entities extract_entities(query) context [] for e in entities: context graph.query(e) # 查询图谱中与实体相关的信息 return context【特点分析】优点 将记忆结构化后智能体能进行更精细的检索和推理 。结构化记忆使AI不再只按相似度找段落而是可基于图谱回答复杂问题如基于多跳关系推理。知识图谱还具有可解释性查询路径清晰可追溯这在需要准确溯源的应用中很有价值。缺点 构建和维护成本高需要借助LLM抽取知识可能出错或不完整图谱规模大时也会面临查询性能和存储问题。同时知识图谱擅长明确事实推理但对于模糊语义的匹配可能还需要配合向量搜索。【适用场景】适合知识密集型应用和需要跨事件推理的智能体。例如企业客户支持AI需要理解用户历史提问与账户、订单等信息的关联或科研助理AI需要梳理论文中的概念关系等。07分层记忆短期与长期结合人类记忆是有层级分工的有的内容转瞬即忘如刚听到的一句话有的会短时间记住如今天开会要点而真正重要的内容如家庭住址、生日会长期保留。分层记忆策略旨在构建类似“人脑”的记忆结构将不同类型、重要程度的信息存入不同层级的存储系统让智能体在面对不同场景时都能“对症下药”。【基本原理】该策略将记忆系统划分为多个层级工作记忆短期保存最近几轮对话更新频繁、容量小通过滑动窗口维护。长期记忆可检索将重要信息嵌入后保存支持跨会话、长期检索。提升机制比如当用户在对话中说出类似“记住我XXX”、“我总是”、“我过敏”等关键信息时也可借助LLM系统会将这轮信息提升进长期记忆以供未来使用。检索时系统会从短期记忆获取当前上下文再从长期记忆中基于语义相关性搜索历史记忆组合出丰富的提示内容交给LLM处理。这种策略本质上是滑动窗口向量库 重要性判断的组合策略。short_term SlidingWindow(max_turns2) # 最近几轮对话long_term VectorDatabase(k2) # 可检索的长期嵌入记忆promotion_keywords [记住, 总是, 从不, 我过敏, 我的ID是, 我喜欢, 我讨厌] def add_message(user_input, ai_response): short_term.add(user_input, ai_response) # 如果用户的输入中包含提示记忆的关键词则提升至长期记忆实际中策略可以更复杂 if any(keyword in user_input for keyword in promotion_keywords): summary summarize(user_input ai_response) vector embed(summary) long_term.add(vector, summary) def get_context(query): # 获取短期上下文 recent short_term.get_context() # 向长期记忆查询相关内容 vector_query embed(query) related long_term.search(vector_query) # 拼接上下文作为提示输入 return f【长期记忆】\n concat(related) \n\n【当前上下文】\n concat(recent)【特点分析】**优点**可以结合短期记忆与长期记忆优势近期信息及时响应历史信息可按需检索而且即使短期记忆滚动遗忘但长期的重要记忆依然可查。*缺点******这种策略实现上更复杂需要涉及多个模块窗口管理、嵌入、召回等且*调优成本更高比如关键词或重要性的判断**、嵌入质量、检索精准性、组合上下文策略均需调试。【适用场景】适合需要长期上下文感知的智能体系统。比如企业客服Agent用户先前的订单、偏好需要记住再或者个人助理类AI跨天甚至跨月记住日程安排、家庭成员信息或者教学/医疗场景中需要回顾过往重要的问答、诊断建议、学习习惯等。08类OS内存管理模拟记忆Swap在计算机中操作系统通过“主内存 硬盘”的组合机制高效地管理有限的物理内存RAM与大容量但较慢的磁盘Disk。如果借鉴这种机制也可以为智能体构建一种类OS内存管理的记忆系统将有限的上下文窗口当作RAM使用而将超出上下文的信息保存到外部存储中Page Out必要时再“交换”回来Page In。这种模式与分层记忆模式有点类似但区别在于分层记忆只将关键信息进入二级记忆而这里只要是窗口外的就会Page Out分层记忆从二级存储直接检索相关记忆而这里需要Page In后变成活动记忆【基本原理】该策略分为两个层级活动记忆使用一个滑动窗口保存最近的对话。访问速度快但容量有限。被动记忆当活动记忆满了最旧的内容会被“交换”至外部存储。这些信息虽然不直接在模型当前上下文中但仍可随时检索。这种策略有一个“页故障”的机制当用户提问中包含关键词而这些关键词所需的信息不在当前RAM中系统就会触发“Page Fault”从被动记忆中搜索匹配内容并“page in”上下文再供LLM使用。该策略本质上模拟了OS的虚拟内存管理原理即“冷热数据分层”的上下文利用。模拟如下active_memory Deque(maxlen2) # 快速但小的上下文窗口passive_memory {} # 持久存储的被动记忆turn_id 0 # 每轮对话唯一标识 def add_message(user_input, ai_response): global turn_id turn fUser: {user_input}\nAI: {ai_response} if len(active_memory) 2: old_id, old_turn active_memory.popleft() passive_memory[old_id] old_turn # pageout到被动存储 active_memory.append((turn_id, turn)) turn_id 1 def get_context(query): context \n.join([x[1] for x in active_memory]) # 当前活动记忆上下文 paged_in #这里共关键词模拟判断需要pagein的记忆实际应用策略更复杂 for id, turn in passive_memory.items(): if any(word in turn.lower() for word in query.lower().split() if len(word) 3): #需执行page in的动作略 paged_in f\n(Paged in from Turn {id}): {turn} return f### Active Memory (RAM):\n{context}\n\n### Paged-In from Disk:\n{paged_in}【特点分析】优点该策略最大优势在于结构清晰且符合计算机原理。它通过将对话拆分成“热数据当前上下文”和“冷数据外部存储”两层管理有效缓解上下文窗口限制同时还能在关键时刻回忆过去的重要信息大大提高记忆系统的灵活性和扩展性。缺点实现上需要模拟“page in/out”逻辑并确保触发时机比如根据关键词或向量相似的准确性。如果触发机制设计不佳可能会出现信息召回不及时或漏召的情况从而影响对话连贯性。同时“分页”机制要求设计良好的上下文拼接逻辑。【适用场景】适用于上下文窗口受限但又需要长期记忆的智能体系统。它能够在保持对话响应速度的同时保留大量历史信息适合低延迟对话、时间跨度较大的任务型助手以及需要随时回溯旧信息的场景当用户提出涉及过往内容的问题时系统可以像操作系统一样将“被交换出去”的记忆及时“唤醒”实现高效又节省资源的记忆管理。普通人如何抓住AI大模型的风口领取方式在文末为什么要学习大模型目前AI大模型的技术岗位与能力培养随着人工智能技术的迅速发展和应用 大模型作为其中的重要组成部分 正逐渐成为推动人工智能发展的重要引擎 。大模型以其强大的数据处理和模式识别能力 广泛应用于自然语言处理 、计算机视觉 、 智能推荐等领域 为各行各业带来了革命性的改变和机遇 。目前开源人工智能大模型已应用于医疗、政务、法律、汽车、娱乐、金融、互联网、教育、制造业、企业服务等多个场景其中应用于金融、企业服务、制造业和法律领域的大模型在本次调研中占比超过30%。随着AI大模型技术的迅速发展相关岗位的需求也日益增加。大模型产业链催生了一批高薪新职业人工智能大潮已来不加入就可能被淘汰。如果你是技术人尤其是互联网从业者现在就开始学习AI大模型技术真的是给你的人生一个重要建议最后只要你真心想学习AI大模型技术这份精心整理的学习资料我愿意无偿分享给你但是想学技术去乱搞的人别来找我在当前这个人工智能高速发展的时代AI大模型正在深刻改变各行各业。我国对高水平AI人才的需求也日益增长真正懂技术、能落地的人才依旧紧缺。我也希望通过这份资料能够帮助更多有志于AI领域的朋友入门并深入学习。真诚无偿分享vx扫描下方二维码即可加上后会一个个给大家发【附赠一节免费的直播讲座技术大佬带你学习大模型的相关知识、学习思路、就业前景以及怎么结合当前的工作发展方向等欢迎大家~】大模型全套学习资料展示自我们与MoPaaS魔泊云合作以来我们不断打磨课程体系与技术内容在细节上精益求精同时在技术层面也新增了许多前沿且实用的内容力求为大家带来更系统、更实战、更落地的大模型学习体验。希望这份系统、实用的大模型学习路径能够帮助你从零入门进阶到实战真正掌握AI时代的核心技能01教学内容从零到精通完整闭环【基础理论 →RAG开发 → Agent设计 → 模型微调与私有化部署调→热门技术】5大模块内容比传统教材更贴近企业实战大量真实项目案例带你亲自上手搞数据清洗、模型调优这些硬核操作把课本知识变成真本事02适学人群应届毕业生无工作经验但想要系统学习AI大模型技术期待通过实战项目掌握核心技术。零基础转型非技术背景但关注AI应用场景计划通过低代码工具实现“AI行业”跨界。业务赋能突破瓶颈传统开发者Java/前端等学习Transformer架构与LangChain框架向AI全栈工程师转型。vx扫描下方二维码即可【附赠一节免费的直播讲座技术大佬带你学习大模型的相关知识、学习思路、就业前景以及怎么结合当前的工作发展方向等欢迎大家~】本教程比较珍贵仅限大家自行学习不要传播更严禁商用03入门到进阶学习路线图大模型学习路线图整体分为5个大的阶段04视频和书籍PDF合集从0到掌握主流大模型技术视频教程涵盖模型训练、微调、RAG、LangChain、Agent开发等实战方向新手必备的大模型学习PDF书单来了全是硬核知识帮你少走弯路不吹牛真有用05行业报告白皮书合集收集70报告与白皮书了解行业最新动态0690份面试题/经验AI大模型岗位面试经验总结谁学技术不是为了赚$呢找个好的岗位很重要07 deepseek部署包技巧大全由于篇幅有限只展示部分资料并且还在持续更新中…真诚无偿分享vx扫描下方二维码即可加上后会一个个给大家发【附赠一节免费的直播讲座技术大佬带你学习大模型的相关知识、学习思路、就业前景以及怎么结合当前的工作发展方向等欢迎大家~】