告别碎片化记忆:用 MemOS 为 LangChain Agent 构建结构化“记忆图谱”
在构建 AI Agent 的过程中,开发者常陷入一个困境:LangChain 内置的 Memory 模块(如 ConversationBufferMemory、VectorStoreRetrieverMemory)虽然开箱即用,却难以支撑复杂、长期、多轮的智能交互。
- 对话历史只是线性堆砌,无法提取关键事实;
- 向量检索依赖关键词匹配,容易丢失上下文关联;
- Agent 无法主动“回忆”过去用户提到的偏好、任务状态或实体关系;
- 多会话之间完全隔离,无法形成持续演进的“用户画像”。
简言之:LangChain 的 Memory 是“日志”,不是“记忆”。
而真正的智能体,需要的是可推理、可关联、可更新的知识网络——这正是 MemOS(Memory Operating System) 要解决的问题。
本文将带你从 LangChain Memory 的局限出发,探索如何基于 MemOS 思想,为 Agent 构建一个专属的“记忆图谱”,让 AI 真正“记得住、理得清、用得上”。
一、LangChain Memory 的三大短板
1. 线性存储,缺乏结构
ConversationSummaryMemory 虽能压缩历史,但仍是扁平文本;Agent 无法快速定位“用户上次说的项目截止日期是哪天”。
2. 被动检索,无主动推理
VectorStoreRetrieverMemory 只在用户提问时触发相似检索,无法主动关联“用户昨天提到要去上海出差”和“今天问航班信息”。
3. 会话孤岛,无长期记忆
每次新会话都是“失忆”重启,除非手动持久化,否则无法积累用户行为模式。
💡 本质问题:LangChain Memory 设计初衷是“对话上下文管理”,而非“认知记忆系统”。
二、什么是 MemOS?Agent 的“第二大脑”
MemOS 并非某个具体库,而是一种记忆架构范式——它借鉴人类记忆机制,将记忆分为:
- 短期记忆(Working Memory):当前任务上下文;
- 长期记忆(Long-term Memory):结构化事实、用户画像、经验规则;
- 元记忆(Meta-Memory):关于“什么该记、何时回忆”的策略。
其核心载体,是动态演进的知识图谱(Knowledge Graph),而非原始对话日志。
例如,当用户说:
“我下周三要和张总在上海开会,记得提醒我提前订高铁。”
MemOS 会自动提取并存储为图谱节点与关系:
[User] --(has_meeting_on)--> [2025-04-09]
[2025-04-09] --(location)--> [Shanghai]
[2025-04-09] --(with)--> [Zhang (role: 总经理)]
[User] --(needs_reminder_for)--> [Book high-speed train to Shanghai]
后续任何相关查询(如“明天行程?”“怎么去上海?”),Agent 都能通过图谱推理精准响应。
三、实战:在 LangChain 中集成 MemOS 式记忆图谱
步骤 1:选择图数据库作为记忆后端
推荐使用轻量级图库:
- Neo4j(功能强,适合生产)
- NetworkX + SQLite(轻量,适合原型)
- LlamaIndex + PropertyGraph(新兴方案)
步骤 2:构建记忆提取管道(Memory Ingestion Pipeline)
利用 LLM 从对话中抽取结构化三元组:
from langchain.prompts import PromptTemplate
from langchain_core.output_parsers import JsonOutputParser
extraction_prompt = PromptTemplate.from_template("""
你是一个记忆提取器。请从以下对话中提取关键事实,输出为 JSON 列表,每项包含 subject, predicate, object。
对话:
{history}
输出格式:
[{"subject": "...", "predicate": "...", "object": "..."}]
""")
parser = JsonOutputParser()
extractor_chain = extraction_prompt | llm | parser
步骤 3:写入图谱(以 Neo4j 为例)
from neo4j import GraphDatabase
def store_memory_triplets(triplets):
with driver.session() as session:
for t in triplets:
session.run("""
MERGE (s:Entity {name: $sub})
MERGE (o:Entity {name: $obj})
MERGE (s)-[r:`{pred}`]->(o)
ON CREATE SET r.created_at = timestamp()
ON MATCH SET r.updated_at = timestamp()
""", sub=t['subject'], pred=t['predicate'].replace(' ', '_'), obj=t['object'])
步骤 4:Agent 查询时融合图谱记忆
在 LangChain Agent 的 tools 或 retriever 中加入图谱查询:
def query_user_facts(user_id, question):
# 将自然语言问题转为 Cypher 查询(可用 LLM 辅助)
cypher = llm.invoke(f"根据问题生成 Neo4j Cypher: {question}")
result = graph.query(cypher)
return format_result(result)
然后在 prompt 中注入:
已知用户相关信息:
{graph_retrieved_facts}
请基于以上信息回答:{input}
四、进阶能力:让记忆“活”起来
- 记忆衰减机制:为图谱边设置 TTL,过期事实自动弱化;
- 冲突检测:当新事实与旧记忆矛盾(如“张总离职了”),触发确认流程;
- 主动回忆:Agent 在任务规划阶段主动查询图谱(如“用户有无过敏史?”用于订餐);
- 跨会话记忆:通过 user_id 关联所有会话,构建终身用户知识图谱。
五、与 LangChain 原生 Memory 协同
MemOS 并非要取代 LangChain Memory,而是分层协作:
- 短期上下文:仍用
ConversationBufferWindowMemory(最近 5 轮); - 长期知识:由 MemOS 图谱提供;
- 检索增强:向量库用于模糊语义搜索,图谱用于精确关系推理。
两者结合,形成“快+准”的记忆体系。
结语:记忆,是 Agent 从“工具”走向“伙伴”的分水岭
LangChain 让我们快速搭建 Agent,但若只依赖其原生 Memory,Agent 始终是个“健忘的助手”。
而 MemOS 式的记忆图谱,则赋予它持续学习、深度理解、个性化服务的能力。
未来,真正有价值的 AI Agent,不在于能调多少工具,而在于能否记住你是谁、你需要什么、以及你们共同经历的故事。
🌟 开源参考:
- Microsoft AutoGen 的
GroupChat+ 自定义记忆模块- Stanford Mobile Agent 的
MemoryBank- LlamaIndex 的
PropertyGraphIndex(实验性)
现在,是时候给你的 Agent 装上一颗会思考的“记忆大脑”了。
更多推荐

所有评论(0)