【免费下载链接】Agent_Memory_TechniquesAgent memory for LLMs: 30 runnable Jupyter notebooks covering conversation buffers, vector stores, knowledge graphs, episodic and semantic memory, MemGPT, Mem0, Letta, Zep, Graphiti, LoCoMo benchmarks, and production patterns.项目地址https://gitcode.com/gh_mirrors/ag/Agent_Memory_Techniques点击查看免费下载Agent_Memory_Techniques 是收录 30 个 LLM Agent 记忆技术的开源项目本文核心是 5 大记忆检索模式全对比语义搜索、时间衰减、混合评分、MMR 与重排序。面向新手、几乎无代码帮你快速选型。 为什么检索决定 Agent Memory 的价值想象一位图书管理员回答研究问题他不会只查一个目录而是先按标题精确查找再按主题翻找书架最后请教同事补充不明显的关联。每种方法都能抓住其他方法漏掉的东西。存储记忆是容易的部分难的是检索——在 Agent 需要记忆的那一刻找到对的那条。最朴素的做法是把问题转成向量和所有记忆算余弦相似度取 Top-K。它对简单场景够用但实际会栽在三处精确术语抓不到问latest Python可能漏掉升级到 Python 3.11这条记忆结果重复多条记忆语义相近时返回的是同一件事的 5 个变体相关 ≠ 高度相关候选池一大沾边的也会混进 Top-K。开源项目 Agent_Memory_Techniques 用 30 个可运行的 Jupyter Notebook 系统演示了 Agent Memory 技术其中20 号模块Memory Retrieval Patterns和18 号模块Temporal Memory恰好覆盖本文要对比的 5 大记忆检索模式。先看全景分类 5大记忆检索模式一张表速览模式一句话原理擅长短板在检索流水线中的位置语义搜索向量 余弦相似度同义改写、语义理解精确关键词、缩写第一阶段几乎所有流水线的基础时间衰减越新的记忆得分越高半衰期最新状态类动态信息会误伤永久事实对相关性分数做时间加权混合评分BM25 关键词 语义RRF 融合版本号、缩写、领域术语每阶段都增加延迟两路检索之后MMR相关性 × 多样性的平衡选点去重、结果多样化λ 参数需要调取最终 Top-K 之前重排序Cross-encoder 逐对精读打分提升 Top-K 精度50-200ms 延迟/候选第二阶段的精筛下面逐个拆解。1️⃣ 语义搜索Semantic Search按意思找记忆它做了什么嵌入Embedding模型把一段文本变成一组数字向量意思相近的文本向量方向就相近。语义搜索的流程只有三步把查询文本和每条记忆都变成向量计算查询与每条记忆的余弦相似度-1 到 11 表示方向完全一致按分数排序取 Top-K 注入 Agent 的上下文窗口。项目里的公共工具函数就放在 utils/helpers.py 的cosine_similarity中语义搜索的完整演示在 06_vector_store_memory/vector_store_memory.ipynb。优点与坑✅优点能听懂换一种说法。问我们为什么选这个数据库即使没人说过一模一样的话也能命中技术决策那条记忆。⚠️坑 1精确关键词失灵。Redis cache TTL 这种术语型查询纯向量搜索容易漂移——这正是 20 号 Notebook 里用它做对比实验的原因。⚠️坑 2结果趋同。多条记忆说了类似的事Top-K 会被它们的变体占满。规模提示记忆少于 50 条时余弦相似度基本够用后面的进阶模式收益很小。2️⃣ 时间衰减Temporal Decay让 Agent 记住最新的它做了什么普通向量检索把所有记忆当成同样新鲜于是 Agent 可能引用三个月前的旧决定。18 号模块Temporal Memory的做法是给每条记忆盖上时间戳检索时按年龄打折。核心是衰减函数常用指数衰减分数 e^(−λ × 年龄)其中 λ ln2 / 半衰期。所谓半衰期就是记忆分数掉到一半所需的时间默认7 天半衰期168 小时一周前的记忆得分是今天的 50%线性衰减则匀速下降在 2 倍半衰期时归零最终分数是混合评分最终分 (1 − w) × 语义相似度 w × 新鲜度分新鲜度权重w代码里叫recency_weight默认 0.3。完整实现含 30 天项目跟踪示例在 18_temporal_memory/temporal_memory.ipynb。优点与坑✅优点回答项目最近什么状态上周发生了什么这类问题不再引用过时信息还能支持时间范围查询和as of还原某个历史时刻的认知。⚠️坑永久事实会被误伤——数学公式、API 文档、用户姓名这类常青信息不该随时间贬值需要豁免衰减或设很长的半衰期。⚠️坑每次查询都要给所有候选算衰减分10 万条以上的大记忆库会增加延迟。与 19 号模块的区别Forgetting and Decay 是永久删除低于阈值的记忆时间衰减只是降排名记忆还在需要时可重新激活。3️⃣ 混合评分Hybrid ScoringBM25 关键词 RRF 融合它做了什么语义搜索漏掉的词交给BM25补上。BM25Best Matching 25是信息检索领域的经典关键词算法按词频这个词出现多不多和逆文档频率这个词在全部记忆里稀不稀罕打分天生擅长版本号、缩写、罕见术语。两路检索各出一张排名榜后用RRFReciprocal Rank Fusion倒数排名融合合并成一张对每条记忆累加1 / (k 排名)k通常取 60。打个比方两位朋友各推荐一桌餐厅同时出现在两张榜单且排名都不差的餐厅最终得分最高。RRF 的美妙在于它只看排名、不看原始分——两路分数尺度不同也无所谓无需手动调权重。20 号 Notebook 里的演示查询 Redis cache TTL 正是 BM25 的主场词词都精确纯语义搜索反而容易偏。优点与坑✅优点同时抓住意思和用词官方 README 给出的典型收益是召回率提升 15-30%⚠️坑每多一个阶段就多一点延迟且k值、候选数量等参数需要按领域调小记忆库50 条基本白做。4️⃣ MMR最大边际相关性别让 5 条记忆说同一件事它做了什么想象做歌单你不会连排 5 首伤感情歌即使每首都好——你要的是多样性。MMRMaximal Marginal Relevance把同样的想法搬进检索每次从候选里挑一条标准是MMR 分 λ × 与查询的相关度 − (1 − λ) × 与已选结果的最大相似度λ 1.0只看相关性不管重复λ 0.0只看和已选的有多不同实践中 0.5 ~ 0.7 比较稳。20 号 Notebook 里专门做了 λ 扫描实验0.3 / 0.5 / 0.7 / 0.9可以直观看到结果从高度聚焦滑向高度多样。优点与坑✅优点Agent 最终看到的是一个更宽的认知面而不是同一件事的复读机⚠️坑λ 太偏多样会召回相关但不重要的记忆需要结合自己的数据调。5️⃣ 重排序Re-rankingCross-encoder 给头部结果二次面试它做了什么招聘面试分两轮简历筛选快但粗面谈慢但准。检索也一样——第一阶段语义搜索 / BM25比较的是预先算好的向量快但只是粗筛Cross-encoder 重排序器把查询记忆这对文本一起喂给模型逐词精读给出更准的相关性分。因为要把整个候选对通读一遍Cross-encoder 对全库跑太慢所以流水线里只让它审一小撮头部候选。20 号 Notebook 的实现是融合后取top_k × 3个候选送进去精筛后留top_k × 2。优点与坑✅优点Top-K 的精度明显提升能抓住嵌入相似度察觉不到的细微相关信号⚠️坑它是延迟最贵的一环每候选 50-200msHyDE 之类的查询改写还会再加一次完整 LLM 调用。全流水线约 200-500ms对比纯语义搜索的 20-50ms——实时聊天场景可能要砍掉这个阶段。 组合拳一条完整的记忆检索流水线五个模式不是单选题20 号模块把它们组装成了HybridRetriever五阶段流水线可选HyDE 查询改写让 LLM 先写一段假设答案再拿答案去搜。短问题和长记忆之间的词汇鸿沟就被这段答案搭成了桥。注意假设答案写错了搜索方向会跟着偏所以它只适合开放式问题并行双路检索语义搜索 BM25 同时跑RRF 混合评分两张榜单融成一张Cross-encoder 重排序精筛头部候选MMR 取 Top-K边保相关、边保多样。如果想加时间衰减把衰减乘数挂在重排序之后即可相关度 × 新鲜度20 与 18 两个模块是官方推荐的组合搭档。 怎么选5 大检索模式选型指南你的场景推荐组合理由简单聊天机器人记忆 50 条仅语义搜索余弦相似度够用别过度设计技术问答多缩写/版本号语义 BM25RRF关键词精确匹配是刚需要回答最新状态 / 最近变化再叠时间衰减新旧事实需要区分权重记忆内容大量相似、结果重复再叠 MMR去重、扩视野答案精度要求高客服、研究助手再叠重排序头部精度最值钱大记忆库数百~数千条完整五阶段流水线多阶段收益随候选池增大不想自己拼装24-27 号 Notebook 演示的框架大多内置了这些能力Zep 内部做混合检索Graphiti 对知识图谱做时间感知检索Mem0 提供托管式记忆检索。先看 25_mem0_patterns/mem0_patterns.ipynb 或 27_zep_memory/zep_memory.ipynb 感受一下开箱即用是什么体验 代码与文档在哪里资料路径检索模式完整 NotebookHybridRetriever 全流程memory_retrieval_patterns.ipynb检索模式讲解文档20_memory_retrieval_patterns/README.md时间衰减完整 Notebook衰减函数 时间线temporal_memory.ipynb时间衰减讲解文档18_temporal_memory/README.md语义搜索基础向量存储vector_store_memory.ipynb30 个技术横向对比总表docs/comparison.md术语表BM25、RRF、MMR 等docs/glossary.md关键词索引docs/topics.md学习路径docs/learning_path.md公共工具函数含余弦相似度utils/helpers.py示例对话数据data/sample_conversation.json依赖清单rank_bm25、sentence-transformers 等requirements.txt❓ 常见问题Q1记忆库多大时才值得上完整流水线候选池大到语义搜索开始明显漏才值得一般是数百条以上。50 条以内单路余弦相似度就是最优解——20 号模块的官方 FAQ 也明确说给 100 条的记忆库堆流水线属于过度工程。Q2时间衰减和重排序能一起用吗能而且是推荐组合。官方 FAQ 的写法是在重排序阶段之后乘上时间衰减系数得到相关度 × 新鲜度的最终排序配合 Semantic Memory 还可以给事实打 stable/volatile 标签让永久信息绕过衰减。Q3这和直接用向量存储06 号模块有什么区别06 号是单阶段语义检索是地基20 号是它的扩展版——在语义检索之上加了关键词检索、RRF 融合、重排序和 MMR。先学会 06再进 20是最顺的学习顺序两个模块难度均为 Intermediate分别约 40 分钟和 35 分钟。写在最后存下记忆只完成了 Agent Memory 的一半工作检索策略决定了另一半的价值从单路语义搜索起步等遇到漏关键词、结果重复、引用旧闻这些具体症状时再按需叠加 BM25 混合评分、重排序、MMR 或时间衰减——这正是 20 号 Notebook 里retrieve()方法把每个阶段都做成可开关参数的用意。跑一遍 memory_retrieval_patterns.ipynb五种模式在同一组项目记忆上的差异你十分钟就能看到。赞分享【免费下载链接】Agent_Memory_TechniquesAgent memory for LLMs: 30 runnable Jupyter notebooks covering conversation buffers, vector stores, knowledge graphs, episodic and semantic memory, MemGPT, Mem0, Letta, Zep, Graphiti, LoCoMo benchmarks, and production patterns.项目地址https://gitcode.com/gh_mirrors/ag/Agent_Memory_Techniques点击查看免费下载相关推荐OpenClaw 记忆搜索Memory Search完全指南混合检索、Embedding 供应商与排序调优OpenClaw 记忆搜索Memory Search完全指南混合检索、Embedding 供应商与排序调优 OpenClaw 的 memory_searcAI 应用AI Agent交互助手后端即时通讯网关OpenMemory性能优化终极指南记忆衰减、评分算法与检索动态全解析OpenMemory性能优化终极指南记忆衰减、评分算法与检索动态全解析 OpenMemory是一款为LLM应用打造的本地持久化记忆存储解决方案支持ClaudAgent 记忆人工智能大模型MCP 服务AI AgentRAG后端前端大麦抢票自动化完整指南从环境搭建到首次运行只需 10 分钟大麦抢票自动化完整指南从环境搭建到首次运行只需 10 分钟 还在开售瞬间刷新到手指抽筋却只看到已售罄三个字吗 ticket purchase 是一个基GUI 自动化RPA创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考