AI Agent记忆持久化:从向量检索到知识图谱
记忆持久化的核心挑战 Agent的会话记忆在对话结束后就消失了。要让Agent"记住"用户偏好、历史交互和学到的知识,需要将记忆持久化到外部存储。如何存储、如何检索、如何遗忘——这是记忆持久化的三大问题。 存储方案对比 方案一:向量数据库 最主流的记忆存储方案: class VectorMemory: def __init__(self, vector_db): self.db = vector_db async def store(self, content, metadata=None): embedding = await self.embed(content) self.db.insert({ "content": content, "embedding": embedding, "metadata": metadata, "timestamp": datetime.now() }) async def retrieve(self, query, top_k=5): query_vec = await self.embed(query) results = self.db.search(query_vec, top_k=top_k) return results 优点: 语义检索、灵活查询 缺点: 缺乏结构化关系、时间感知弱 方案二:关系数据库+摘要 class RelationalMemory: def __init__(self, db): self.db = db async def store_interaction(self, user_id, session_data): # 存储完整交互 self.db.insert("interactions", { "user_id": user_id, "session_id": session_data.id, "summary": await self.summarize(session_data), "key_points": json.dumps(session_data.key_points), "timestamp": session_data.start_time }) async def get_user_context(self, user_id): """获取用户上下文""" interactions = self.db.query( "SELECT * FROM interactions WHERE user_id = ? ORDER BY timestamp DESC LIMIT 10", [user_id] ) return self.build_context(interactions) 优点: 结构化、可精确查询 缺点: 无法语义检索 方案三:知识图谱 class GraphMemory: def __init__(self, graph_db): self.db = graph_db async def store_fact(self, subject, predicate, obj): """存储三元组""" self.db.run( "MERGE (s:Entity {name: $subject}) " "MERGE (o:Entity {name: $object}) " "MERGE (s)-[r:RELATION {type: $predicate}]->(o)", subject=subject, predicate=predicate, object=obj ) async def query_relations(self, entity): """查询实体关系""" return self.db.run( "MATCH (e:Entity {name: $entity})-[r]->(related) " "RETURN e, r, related", entity=entity ) 优点: 关系推理能力强、结构化 缺点: 构建成本高、灵活性低 ...