LLM Agent 记忆相关论文阅读 - 12月
之前笔记都记在zotero里了,最近还是把博客捡起来吧
O-Mem 论文阅读记录
OPPO的工作
场景
这篇论文的场景是构建能够与人类进行长期、个性化交互的AI智能体(AI Agent)。随着 LLM 能力的增强,人们期望AI不仅能完成一次性任务,更能成为一个能够记住用户偏好、历史互动,并随之演进的长期伙伴。这种智能体需要在复杂的、长时间跨度的对话中保持上下文的连贯性,并根据用户的动态变化提供真正个性化的响应。
研究动机 (Research Motivation)
当前基于LLM的智能体虽然在生成类人回答方面潜力巨大,但在长期交互中存在明显短板,主要体现在难以维持上下文一致性以及无法动态地适应用户的个性化需求。研究的动机在于设计一个全新的、更高效、更像人类的记忆系统,来解决这些问题。作者认为,智能体的记忆不应仅仅是被动地存储历史对话,而应该主动地去理解“用户是一个什么样的人”以及“他/她经历了什么事”,从而构建一个动态、持续演进的用户画像,为智能体提供更深层次的个性化能力。
当前的挑战 (Current Challenges)
论文指出现有的记忆系统主要依赖“先分组后检索”(grouping-then-retrieval)的模式,这种模式存在几个核心问题:
- 过度依赖语义检索: 现有系统通常基于语义相似度来组织和检索记忆。这种方法可能会忽略掉那些虽然语义不直接相关,但对当前交互至关重要的信息。例如,在为用户规划周末活动时,系统可能只检索了与“活动”相关的记忆,却忽略了用户最近提到的“身体不适”或“项目截止日期”等关键背景信息。
- 检索噪声与效率低下: 基于消息分组的检索机制容易引入噪声。如果记忆分组不够优化,智能体为了获取足够的信息可能需要从多个不相关的分组中进行检索,这不仅降低了响应的质量,还显著增加了API调用的延迟和token消耗,导致效率低下。
- 缺乏动态、全面的用户理解: 大多数现有方法是被动地存储和嵌入历史交互数据,而不是主动地构建一个动态、多维度的用户模型。它们更多地是在回答“用户说了什么”,而不是去深入理解“用户是怎样一个人”。
具体方法 (The O-Mem Method)
为了解决上述挑战,论文提出了O-Mem,一个以人为中心的记忆框架,其核心是主动用户画像构建(Active User Profiling)。O-Mem模仿人类的记忆结构,包含三个协同工作的核心组件:
个性化记忆 (Persona Memory)
这是系统的长期记忆部分,负责构建和维护一个关于用户的整体画像。它包含两个子部分:
- 用户属性 (Persona Attributes, ): 存储用户的长期特征、偏好、性格等信息(例如,“喜欢复古家居”)。这些属性通过对多次交互中提取的相似信息进行LLM增强的聚类来形成和提炼。
- 事实事件 (Persona Fact Events, ): 记录用户经历过的具体、重要的事件(例如,“上周六在市中心的古董店看上了一盏灯和一张地毯”)。
属性更新过程尤为复杂,它采用了一种 LLM 增强的最近邻聚类方法:
- 大型语言模型将新属性 整合到临时列表 中
- 最近邻图 连接语义相似的属性
- 在图中识别出连通分量
- 大型语言模型聚合每个分量内的属性以形成精炼的
这种聚类方法确保了长期一致性,同时避免了用户画像中的冗余。
事实事件更新:LLM 生成关于如何将 整合到现有 中的记忆管理操作: ,然后通过 函数执行此操作。
工作记忆 (Working Memory)
负责维持对话的局部连贯性。它将交互内容按主题(Topic)进行索引,构建一个从主题到相关交互的映射字典 ( )。当用户开启一个新话题时,系统可以快速检索到与该主题相关的历史互动内容。
- 主题-交互对话索引(映射)
- 主题(Topic):LM 对用户输入的语义理解(例如:“天气”、“项目进展”)
情景记忆 (Episodic Memory):
负责基于线索的联想式回忆。它将交互内容中的关键词(Clue)作为索引,构建一个从关键词到相关交互的映射字典 ( )。这使得智能体可以根据当前对话中的某个特定词语,精确地回忆起包含该词语的原始场景。
- 关键词-交互对话索引(映射)
- 关键词(Clue):用户输入中的词语,基于统计学方法(基于词语在历史记录中的稀有度,TF-IDF)提取
工作流程
- 记忆构建(Encoding): 每当有新的用户交互时,O-Mem会用LLM同时提取出其中蕴含的用户属性、事件和主题。这些信息被用来分别更新个性化记忆、情景记忆和工作记忆。系统会通过LLM判断新信息是应该新增、更新还是忽略,以保持用户画像的一致性。
- 记忆检索(Retrieval): 当需要生成回应时,O-Mem会并行地从上述三个记忆组件中进行检索。它会根据当前的用户输入,分别从个性化记忆中检索相关的用户画像,从工作记忆中检索相关的主题上下文,从情景记忆中检索相关的具体事件。最后,将所有检索到的信息整合起来,一同输入给LLM,生成最终的、高度个性化和情境感知的回答。
实验简介 (Experiment Summary)
作者在三个基准测试集上对O-Mem进行了广泛评估:LoCoMo(长对话记忆挑战)、PERSONAMEM(个性化话题对话)以及自建的Personalized Deep Research Bench(个性化深度研究场景)。
- 性能对比: 实验结果表明,O-Mem在所有三个数据集上的表现均优于所有基线模型(包括LangMem、A-Mem、MemoryOS等)。例如,在LoCoMo上,O-Mem的F1分数比当时最强的基线LangMem高出近3%。尤其在需要复杂推理的任务(如时间推理、泛化到新场景)上,O-Mem的优势更为明显。
- 效率分析: O-Mem在性能领先的同时,展现出极高的效率。与性能最接近的基线LangMem相比,O-Mem将平均token消耗降低了94%(从80K降至1.5K),延迟降低了80%(从10.8秒降至2.4秒)。这得益于其结构化的信息表示和并行的检索机制,避免了对原始、冗长的历史记录进行暴力检索。
- 消融研究: 通过对三个记忆组件的消融实验证明,每个组件都对最终性能有独特的贡献。即使在控制总token预算相同的情况下,完整的O-Mem(包含三个组件)也显著优于任何组件的子集,证明了其设计的合理性和各部分之间的协同效应。
Insight (Key Takeaways)
- 记忆系统的价值重思: 论文引发了一个重要思考——精心设计的记忆系统其价值不仅在于提升性能,更在于在性能、效率和隐私之间取得平衡。直接对所有原始对话历史进行RAG(检索增强生成)虽然性能不差,但计算成本极其高昂且存在隐私风险。O-Mem通过构建抽象但结构化的用户画像,提供了一个兼顾性能和部署实用性的高效解决方案。
- 从被动存储到主动建模的范式转变: O-Mem最大的创新在于将记忆系统的核心任务从“记录用户说过什么”转变为“理解用户是谁”。这种主动、多维度的用户建模(个性、主题、情景)远比单一的语义向量检索更为强大和鲁棒。
- 效率即是能力: 在实际应用中,低延迟和低成本是决定一个系统能否被广泛部署的关键。O-Mem通过其精巧的设计实现了性能和效率的帕累托最优,证明了好的架构设计可以在不牺牲性能的前提下,大幅降低资源消耗。
- 结构化知识的重要性: O-Mem将非结构化的对话历史转化为了结构化的知识(用户属性、主题图谱、事件索引)。这种结构化的表示使得检索更精准、信息密度更高,从而在后续的LLM推理中实现了“好钢用在刀刃上”的效果,这也是其token效率极高的根本原因。
Memori — 为企业级 AI 构建“记忆层”
一个github项目,无论文,但是star很多,肯定有可取之处了
项目简介
现代大模型在短期对话内表现强劲,但缺乏长期记忆与持续个性化能力。Memori 是一个面向企业级 AI 的“记忆层”框架,负责把 LLM 交互转成可查询、可增强、可持久化的记忆(结构化事实、事件、偏好、语义三元组等),并在后续 LLM 调用时自动注入相关上下文,从而赋予模型长期、可控的记忆能力,帮助对话代理在跨会话、多轮次中保持一致性并记住重要信息。
问题陈述
- 缺乏长期记忆:LLM 的上下文窗口有限,难以在多会话或长期交互中保留用户历史、偏好与长期事实。
- 无结构的会话历史:直接把历史上下文拼接进 prompt 随着对话增长会变得低效且成本高。
- 产品级应用需要考虑记忆的生命周期、重要性排序、压缩与隐私合规
总体方法
总体工作流(高层):
- 写入路径(ingest):采集 -> 构建记忆结构 -> 写入/持久化(含向量化)
- 读取路径(recall):查询请求 -> 检索(语义/元数据过滤)-> 返回记忆对象 -> 注入到下游 LLM 下面按环节展开并对应实现文件。
具体:
- 记忆采集(Ingestion):当代理与用户交互或外部事件发生时,提取关键信息(实体、事件、摘要、情感、时间标记等)并格式化为“记忆条目”。
- 向量化与索引(Embedding + Vector DB):将记忆条目做 embedding(使用开源或云端模型),并存入向量数据库以支持语义检索。
- 检索策略(RAG/recall):在需要时基于相似度、时间窗口、记忆重要性策略检索相关记忆,并将其注入到生成模型的上下文或作为检索增强的提示组件。
- 记忆管理:对旧记忆进行压缩(summary)、过期或降级;按重要性排序以控制上下文注入成本。
- 隐私与访问控制:加密或基于策略的访问以保护敏感记忆。
主要组件(面向工程)
- SDK / Client:封装记忆写入、检索与删除接口,方便集成到应用。
- Embedding 层:对接 embedding 模型(本地或云端);支持批量转向量、向量化策略。
- 存储层:向量 DB(或抽象出来的持久层),支持相似度搜索、元数据过滤(时间/user/类型)。
- 管理/策略模块:决定何时将对话片段转为记忆、何种类型的记忆需要持久化、记忆权重/重要性评分。
- API/服务:对外提供 REST/gRPC 接口,允许外部系统查询或写入记忆。
- 部署/运维:容器化配置、CI、示例脚本(Makefile、docker-compose)。
创新点
- 结构化记忆模型:不仅保存原文对话,还把“记忆”做成结构化的、类型化的实体(而不是纯文本历史),有利于更精确的检索与决策。
- 生命周期与压缩策略:引入压缩与重要性评分来平衡成本与信息保留
- 对长期会话提供压缩(summarize-and-collapse)策略,适合长期使用场景,既保留关键信息又控制存储/检索成本
- 自动对记忆打分,检索时优先高分项以提升相关性与上下文质量
- 易用的 SDK 与部署体验:通过 docker-compose/Dockerfile 和示例快速上手,降低集成门槛。
- 隐私与可审计的记忆更改:提供删除/修改接口与审计日志。
Key takeaways
- 将“记忆”从简单的会话历史升级为有结构的、可检索的知识层,会显著提升跨会话一致性、个性化与长期用户体验。
- 语义向量检索是记忆系统的核心,但记忆管理策略(何时记、如何压缩、如何过期)决定成本与体验。
- 成本与新鲜度的折中很关键:实时保存每条对话并不现实,需要压缩与归档策略。
- 隐私与合规从设计初期就要考虑(删除、导出、访问控制),否则在产品化时会遇到大问题。
- 可观察性:对记忆写入、检索命中、以及对下游生成效果的影响进行度量,是持续优化记忆策略的关键。
