Agent记忆模式的5个方向

发布时间:2026/5/27 3:39:19

Agent记忆模式的5个方向 本文目录一、前言二、实战拆解如何设计这5个工具三、工具列表四、工具1向量存储工具五、工具2记忆检索工具六、工具3记忆管理工具七、工具4语义搜索工具八、工具5记忆摘要工具九、思考与建议十、总结与下一步一、前言1.1 本节内容简介本文将详细讲解5个实用记忆工具的实现每个工具都有完整代码和运行示例你可以直接复制到项目中使用。1.2 为什么要学习本节内容从零到一每个工具都是完整可运行的实战导向基于真实的记忆管理场景可复用这些工具可以直接用到你的项目中二、实战拆解如何设计这5个工具在开始写代码之前让我们先思考一下如何把长期记忆模式这个大任务拆解成多个小工具2.1 问题分析我们要构建一个智能记忆系统需要解决向量存储把文本转换成向量并持久化存储记忆检索根据查询找到最相关的记忆记忆管理管理记忆的增删改查语义搜索在语义层面搜索记忆记忆摘要生成记忆的摘要2.2 设计思路从复杂到简单整体思路先建立基础的向量存储奠定基础再分别实现各个专业功能最后用工具链把它们整合起来为什么这样设计单一职责每个工具只做一件事简单可靠可复用工具可以独立使用也可以组合使用易测试每个工具可以独立运行和验证易扩展未来想加新工具也很容易2.3 工具分工设计工具解决什么问题为什么需要它输入输出向量存储工具文本无法持久化把文本转成向量存储文本内容向量存储完成记忆检索工具找不到相关记忆根据查询找到最相关的查询文本相关记忆列表记忆管理工具记忆太多难以管理方便管理增删改查管理命令操作结果语义搜索工具只能关键词搜索语义层面的理解搜索查询文本语义匹配结果记忆摘要工具记忆太多看不完快速了解记忆概况所有记忆记忆摘要文本2.4 数据流向设计输入内容 ↓ [工具1] vector_store → 存储向量 ↓ [工具2] memory_retriever → 检索相关记忆 [工具3] memory_manager → 管理记忆 [工具4] semantic_search → 语义搜索 ↓ [工具5] memory_summarizer → 生成记忆摘要三、工具列表序号工具名称文件功能描述1向量存储工具tool_1_vector_store.py向量数据库操作2记忆检索工具tool_2_memory_retriever.py从向量库检索记忆3记忆管理工具tool_3_memory_manager.py管理记忆的增删改查4语义搜索工具tool_4_semantic_search.py语义级别的搜索5记忆摘要工具tool_5_memory_summarizer.py生成记忆摘要四、工具1向量存储工具4.1 思考为什么需要向量存储文本信息无法直接高效地搜索和比较需要转换成向量表示。就像图书馆需要给每本书编索引没有索引找书要翻遍整个图书馆有索引通过索引号快速定位向量存储让AI也能把文本转成向量高效存储和检索持久化保存4.2 功能说明将文本内容转换成向量并存储到向量数据库中。4.3 完整代码from langchain.tools import tool import json import os from datetime import datetime # 简单的向量存储用字典模拟实际项目中可用FAISS/Chroma等 memory_store { vectors: {}, metadata: {}, next_id: 1 } # 简单的文本向量化用字符级统计模拟实际项目可用OllamaEmbeddings等 def simple_text_to_vector(text): 简单的文本向量化模拟 vector {} text_lower text.lower() # 统计关键词出现次数 keywords [用户, 喜欢, 记得, 重要, 项目, 问题, 建议, 需求] for keyword in keywords: vector[keyword] text_lower.count(keyword) # 统计基本字符 vector[length] len(text) vector[words] len(text.split()) return vector tool def vector_store(text: str, metadata: dict None) - str: 将文本存储到向量数据库 参数: text: 要存储的文本内容 metadata: 可选的元数据如时间戳、标签等 返回: 存储结果包含记忆ID global memory_store # 生成记忆ID memory_id fmemory_{memory_store[next_id]} memory_store[next_id] 1 # 向量化文本 vector simple_text_to_vector(text) # 存储向量和元数据 memory_store[vectors][memory_id] vector if metadata is None: metadata {} metadata[created_at] datetime.now().isoformat() metadata[text] text memory_store[metadata][memory_id] metadata # 简单的持久化保存到文件 try: with open(output_memory.txt, w, encodingutf-8) as f: f.write(fMemory ID: {memory_id}\n) f.write(fText: {text}\n) f.write(fMetadata: {json.dumps(metadata, ensure_asciiFalse, indent2)}\n) f.write(- * 60 \n) except: pass return f记忆存储成功记忆ID: {memory_id} if __name__ __main__: print( * 60) print(工具1向量存储工具) print( * 60) # 测试数据 test_texts [ 用户喜欢Python编程, 用户从事AI领域工作, 用户对LangChain感兴趣, 用户希望学习向量数据库, 用户记得我们上次聊的项目 ] print(f\n将要存储{len(test_texts)}条记忆...\n) for i, text in enumerate(test_texts): print(f[{i1}/{len(test_texts)}] 正在存储: {text}) result vector_store.invoke({ text: text, metadata: {category: user_info} }) print(f {result}\n) print( * 60) print(f向量存储工具测试完成共存储了{len(test_texts)}条记忆) print( * 60)4.4 运行方式cd 04_long_term_memory ..\venv_py38\Scripts\python.exe tool_1_vector_store.py五、工具2记忆检索工具5.1 思考为什么需要记忆检索记忆存储了很多但需要能快速找到相关的信息。就像你想找某个笔记需要搜索功能没有检索一条一条看效率很低有检索输入关键词快速定位记忆检索让AI也能根据查询找到相关记忆支持相似度匹配快速高效5.2 功能说明根据查询文本从向量库中检索最相关的记忆。5.3 完整代码from langchain.tools import tool import json # 使用与工具1相同的向量存储 memory_store { vectors: {}, metadata: {}, next_id: 1 } # 简单的向量相似度计算 def simple_similarity(vector1, vector2): 简单的相似度计算 common_keys set(vector1.keys()) set(vector2.keys()) if not common_keys: return 0 # 简单的匹配计数 score 0 for key in common_keys: if vector1.get(key, 0) 0 and vector2.get(key, 0) 0: score 1 return score # 简单的文本向量化与工具1保持一致 def simple_text_to_vector(text): vector {} text_lower text.lower() keywords [用户, 喜欢, 记得, 重要, 项目, 问题, 建议, 需求] for keyword in keywords: vector[keyword] text_lower.count(keyword) vector[length] len(text) vector[words] len(text.split()) return vector tool def memory_retriever(query: str, top_k: int 3) - str: 从向量库中检索相关记忆 参数: query: 查询文本 top_k: 返回的最相关记忆数量 返回: 相关记忆列表 global memory_store if not memory_store[vectors]: return 向量库为空暂无记忆可检索 # 向量化查询 query_vector simple_text_to_vector(query) # 计算相似度 results [] for memory_id, vector in memory_store[vectors].items(): score simple_similarity(query_vector, vector) metadata memory_store[metadata].get(memory_id, {}) results.append({ memory_id: memory_id, score: score, text: metadata.get(text, ), created_at: metadata.get(created_at, ) }) # 按相似度排序 results.sort(keylambda x: x[score], reverseTrue) top_results results[:top_k] # 格式化输出 output [] output.append(f查询: {query}) output.append(f找到 {len(top_results)} 条相关记忆:\n) for i, result in enumerate(top_results): output.append(f[{i1}] (相似度: {result[score]})) output.append(f {result[text]}) if result.get(created_at): output.append(f 时间: {result[created_at]}) output.append() return \n.join(output) if __name__ __main__: print( * 60) print(工具2记忆检索工具) print( * 60) # 先添加一些测试记忆 print(\n正在添加测试记忆...) test_memories [ 用户喜欢Python编程, 用户从事AI领域工作, 用户对LangChain感兴趣, 用户希望学习向量数据库, 用户记得我们上次聊的项目 ] for text in test_memories: memory_id fmemory_{len(memory_store[vectors]) 1} memory_store[vectors][memory_id] simple_text_to_vector(text) memory_store[metadata][memory_id] {text: text, created_at: 2026-05-21} print(f已添加{len(test_memories)}条记忆\n) # 测试查询 test_queries [ 用户喜欢什么, 用户的工作是什么, LangChain相关的记忆 ] for query in test_queries: print( * 60) result memory_retriever.invoke({query: query, top_k: 3}) print(result) print(\n * 60) print(记忆检索工具测试完成) print( * 60)5.4 运行方式cd 04_long_term_memory ..\venv_py38\Scripts\python.exe tool_2_memory_retriever.py六、工具3记忆管理工具6.1 思考为什么需要记忆管理记忆多了之后需要能方便地管理它们。就像你需要一个文件管理器查看所有文件删除不需要的文件搜索特定文件记忆管理让AI也能查看所有记忆删除不需要的记忆清空所有记忆6.2 功能说明管理记忆的增删改查操作。6.3 完整代码from langchain.tools import tool import json # 使用与工具1相同的向量存储 memory_store { vectors: {}, metadata: {}, next_id: 1 } # 简单的文本向量化与工具1保持一致 def simple_text_to_vector(text): vector {} text_lower text.lower() keywords [用户, 喜欢, 记得, 重要, 项目, 问题, 建议, 需求] for keyword in keywords: vector[keyword] text_lower.count(keyword) vector[length] len(text) vector[words] len(text.split()) return vector tool def memory_manager(command: str, memory_id: str None, text: str None) - str: 管理记忆的增删改查 参数: command: 命令类型list/add/delete/clear memory_id: 要操作的记忆IDdelete时需要 text: 要添加的文本内容add时需要 返回: 操作结果 global memory_store if command list: # 列出所有记忆 if not memory_store[metadata]: return 当前没有记忆 output [] output.append(f共有 {len(memory_store[metadata])} 条记忆:\n) for idx, (mid, metadata) in enumerate(memory_store[metadata].items(), 1): output.append(f[{idx}] ID: {mid}) output.append(f {metadata.get(text, )[:50]}...) if metadata.get(created_at): output.append(f 时间: {metadata.get(created_at)}) output.append() return \n.join(output) elif command add: # 添加记忆 if not text: return 添加记忆时需要提供text参数 new_id fmemory_{memory_store[next_id]} memory_store[next_id] 1 memory_store[vectors][new_id] simple_text_to_vector(text) memory_store[metadata][new_id] { text: text, created_at: 2026-05-21 } return f记忆添加成功ID: {new_id} elif command delete: # 删除记忆 if not memory_id: return 删除记忆时需要提供memory_id参数 if memory_id in memory_store[vectors]: del memory_store[vectors][memory_id] del memory_store[metadata][memory_id] return f记忆 {memory_id} 删除成功 else: return f记忆 {memory_id} 不存在 elif command clear: # 清空所有记忆 count len(memory_store[vectors]) memory_store[vectors].clear() memory_store[metadata].clear() memory_store[next_id] 1 return f已清空所有 {count} 条记忆 else: return f未知命令: {command}支持的命令list/add/delete/clear if __name__ __main__: print( * 60) print(工具3记忆管理工具) print( * 60) # 添加一些测试记忆 print(\n正在添加测试记忆...) test_texts [记忆1, 记忆2, 记忆3] for text in test_texts: memory_id fmemory_{memory_store[next_id]} memory_store[next_id] 1 memory_store[vectors][memory_id] simple_text_to_vector(text) memory_store[metadata][memory_id] {text: text, created_at: 2026-05-21} print(f已添加{len(test_texts)}条记忆\n) # 测试各种命令 commands [ (list, None, None), (add, None, 新添加的记忆), (list, None, None), (delete, memory_1, None), (list, None, None) ] for cmd, mid, text in commands: print( * 60) print(f执行命令: {cmd}) print( * 60) result memory_manager.invoke({ command: cmd, memory_id: mid, text: text }) print(result) print() print( * 60) print(记忆管理工具测试完成) print( * 60)6.4 运行方式cd 04_long_term_memory ..\venv_py38\Scripts\python.exe tool_3_memory_manager.py七、工具4语义搜索工具7.1 思考为什么需要语义搜索普通的关键词搜索只能匹配字面无法理解意思。就像搜索开心也能找到快乐的相关内容关键词搜索只找包含开心的语义搜索能理解意思找相关的语义搜索让AI也能理解语义找到相关但不包含关键词的内容更智能的搜索体验7.2 功能说明进行语义级别的搜索理解文本的含义。7.3 完整代码from langchain.tools import tool import json # 使用与工具1相同的向量存储 memory_store { vectors: {}, metadata: {}, next_id: 1 } # 简单的文本向量化与工具1保持一致 def simple_text_to_vector(text): vector {} text_lower text.lower() keywords [用户, 喜欢, 记得, 重要, 项目, 问题, 建议, 需求] for keyword in keywords: vector[keyword] text_lower.count(keyword) vector[length] len(text) vector[words] len(text.split()) return vector # 简单的语义匹配 def simple_semantic_match(query, text): 简单的语义匹配模拟 query_lower query.lower() text_lower text.lower() # 同义词映射 synonyms { 喜欢: [喜欢, 喜爱, 爱好, 感兴趣], 记得: [记得, 记住, 回忆, 想起], 项目: [项目, 工程, 计划, 方案], 问题: [问题, 疑问, 难题, 困难] } score 0 # 检查同义词 for word, syns in synonyms.items(): if any(s in query_lower for s in syns) and any(s in text_lower for s in syns): score 2 # 检查关键词匹配 keywords [用户, 重要, 建议, 需求] for keyword in keywords: if keyword in query_lower and keyword in text_lower: score 1 return score tool def semantic_search(query: str, top_k: int 3) - str: 进行语义级别的搜索 参数: query: 查询文本 top_k: 返回的最相关结果数量 返回: 语义匹配结果 global memory_store if not memory_store[metadata]: return 向量库为空暂无记忆可搜索 # 进行语义匹配 results [] for memory_id, metadata in memory_store[metadata].items(): text metadata.get(text, ) score simple_semantic_match(query, text) results.append({ memory_id: memory_id, score: score, text: text, created_at: metadata.get(created_at, ) }) # 按匹配度排序 results.sort(keylambda x: x[score], reverseTrue) top_results results[:top_k] # 格式化输出 output [] output.append(f语义搜索: {query}) output.append(f找到 {len(top_results)} 条相关记忆:\n) for i, result in enumerate(top_results): output.append(f[{i1}] (匹配度: {result[score]})) output.append(f {result[text]}) output.append() return \n.join(output) if __name__ __main__: print( * 60) print(工具4语义搜索工具) print( * 60) # 添加测试记忆 test_memories [ 用户喜欢Python编程, 用户喜爱AI技术, 用户对LangChain感兴趣, 用户记得那个项目, 用户回忆起了上次的讨论 ] for text in test_memories: memory_id fmemory_{memory_store[next_id]} memory_store[next_id] 1 memory_store[vectors][memory_id] simple_text_to_vector(text) memory_store[metadata][memory_id] {text: text, created_at: 2026-05-21} print(f已添加{len(test_memories)}条记忆\n) # 测试语义搜索 test_queries [ 用户爱好什么, 用户想起了什么, 工程相关的内容 ] for query in test_queries: print( * 60) result semantic_search.invoke({query: query, top_k: 3}) print(result) print(\n * 60) print(语义搜索工具测试完成) print( * 60)7.4 运行方式cd 04_long_term_memory ..\venv_py38\Scripts\python.exe tool_4_semantic_search.py八、工具5记忆摘要工具8.1 思考为什么需要记忆摘要记忆多了很难快速了解记忆的概况。就像你需要一个目录来了解整本书没有摘要要看完所有记忆才知道有什么有摘要快速了解记忆的主要内容记忆摘要让AI也能快速了解记忆概况统计记忆数量和分类生成简洁的摘要8.2 功能说明生成所有记忆的摘要和统计信息。8.3 完整代码from langchain.tools import tool import json from datetime import datetime # 使用与工具1相同的向量存储 memory_store { vectors: {}, metadata: {}, next_id: 1 } # 简单的文本向量化与工具1保持一致 def simple_text_to_vector(text): vector {} text_lower text.lower() keywords [用户, 喜欢, 记得, 重要, 项目, 问题, 建议, 需求] for keyword in keywords: vector[keyword] text_lower.count(keyword) vector[length] len(text) vector[words] len(text.split()) return vector tool def memory_summarizer() - str: 生成记忆摘要 参数: 无 返回: 记忆摘要文本 global memory_store if not memory_store[metadata]: return 当前没有记忆可摘要 # 统计信息 metadata_list list(memory_store[metadata].values()) texts [m.get(text, ) for m in metadata_list] # 统计关键词 keywords { 用户: 0, 喜欢: 0, 记得: 0, 重要: 0, 项目: 0, 问题: 0, 建议: 0, 需求: 0 } for text in texts: text_lower text.lower() for keyword in keywords: if keyword in text_lower: keywords[keyword] 1 # 生成摘要 output [] output.append(# 记忆摘要) output.append() output.append(f- **总记忆数**: {len(texts)} 条) output.append(f- **统计时间**: {datetime.now().strftime(%Y-%m-%d %H:%M:%S)}) output.append() output.append(## 关键词统计) for keyword, count in keywords.items(): if count 0: output.append(f- {keyword}: {count} 次) output.append() output.append(## 记忆预览前5条) for i, text in enumerate(texts[:5]): output.append(f[{i1}] {text}) if len(texts) 5: output.append(f... 还有 {len(texts) - 5} 条记忆) output.append() output.append(## 全部记忆列表) for i, (mid, metadata) in enumerate(memory_store[metadata].items(), 1): output.append(f[{i}] {metadata.get(text, )[:60]}...) return \n.join(output) if __name__ __main__: print( * 60) print(工具5记忆摘要工具) print( * 60) # 添加测试记忆 test_memories [ 用户喜欢Python编程, 用户从事AI领域工作, 用户对LangChain感兴趣, 用户记得我们上次聊的项目, 用户有一个重要需求, 用户建议我们再讨论一下, 用户问了一个技术问题 ] for text in test_memories: memory_id fmemory_{memory_store[next_id]} memory_store[next_id] 1 memory_store[vectors][memory_id] simple_text_to_vector(text) memory_store[metadata][memory_id] {text: text, created_at: 2026-05-21} print(f已添加{len(test_memories)}条记忆\n) # 生成摘要 print( * 60) print(生成记忆摘要:) print( * 60) result memory_summarizer.invoke({}) print(result) # 保存到文件 with open(output_summary.txt, w, encodingutf-8) as f: f.write(result) print(\n摘要已保存到 output_summary.txt) print(\n * 60) print(记忆摘要工具测试完成) print( * 60)8.4 运行方式cd 04_long_term_memory ..\venv_py38\Scripts\python.exe tool_5_memory_summarizer.py九、思考与建议9.1 回到你的业务看完这5个工具的实现先别急着写代码花5分钟想想你的工作中有没有类似的记忆管理需求比如你需要记住用户的偏好你需要存储和检索重要信息你需要个性化服务如果有这套思路正好可以用在你的工作里别急着追求完美架构先从解决一个具体的小问题开始。9.2 可以尝试的小练习不用贪多挑一个你觉得最有用的尝试如果你想练习工具开发把你手边需要存储的信息用类似的方式写成一个工具不用追求功能完整能跑通就行如果你想在现有基础上扩展比如你需要更多的元数据可以在工具1里加更多字段或者你需要更精确的检索可以改进工具2的相似度算法如果你想验证学习效果尝试把我们的5个工具改写成处理你自己的业务数据比如你的业务是电商可以改成存储用户的购物偏好9.3 一些实用建议关于工具拆分一开始不用纠结拆成几个工具才对怎么顺手怎么来等觉得不方便了再调整很多时候3-5个工具是比较舒服的粒度关于技术实现我们用了简单的字典模拟向量库你完全可以用FAISS、Chroma等真正的向量数据库也可以用OllamaEmbeddings来做真正的向量化重要的是思路不是具体技术关于代码质量一开始可以写得糙一点能跑通最重要等用起来了再慢慢优化和重构我们的示例代码也不是完美代码只是提供一个思路9.4 从小处着手不要想着我要做一套大而全的记忆系统而是找一个最小的痛点比如我需要记住用户的基本信息做一个最小可用的工具能解决这个痛点就行不用考虑其他在使用中迭代用起来发现哪里不方便再改有新需求了再加新工具这才是做工具的正确姿势 十、总结与下一步10.1 本文要点要点说明✅ 掌握了5个工具的完整实现从向量存储到记忆摘要✅ 理解了工具设计思路单一职责、可复用、易测试✅ 每个工具都可以独立运行有完整的测试代码 参考资源资源链接LangChain Memory Docshttps://python.langchain.com/docs/modules/memory/FAISS Documentationhttps://github.com/facebookresearch/faiss点赞 关注更新不迷路

相关新闻