diff --git a/README.md b/README.md index f4ebca07d..f919e8902 100644 --- a/README.md +++ b/README.md @@ -141,7 +141,7 @@ ## 📌 注意事项 -SengokuCola纯编程外行,面向cursor编程,很多代码史一样多多包涵 +SengokuCola~~纯编程外行,面向cursor编程,很多代码写得不好多多包涵~~已得到大脑升级 > [!WARNING] > 本应用生成内容来自人工智能模型,由 AI 生成,请仔细甄别,请勿用于违反法律的用途,AI生成内容不代表本人观点和立场。 diff --git a/src/plugins/memory_system/memory.py b/src/plugins/memory_system/memory.py index 0730f9e57..c02b4ba4f 100644 --- a/src/plugins/memory_system/memory.py +++ b/src/plugins/memory_system/memory.py @@ -438,21 +438,39 @@ class Hippocampus: def sync_memory_from_db(self): """从数据库同步数据到内存中的图结构""" + current_time = datetime.datetime.now().timestamp() + need_update = False + # 清空当前图 self.memory_graph.G.clear() # 从数据库加载所有节点 - nodes = self.memory_graph.db.db.graph_data.nodes.find() + nodes = list(self.memory_graph.db.db.graph_data.nodes.find()) for node in nodes: concept = node['concept'] memory_items = node.get('memory_items', []) - # 确保memory_items是列表 if not isinstance(memory_items, list): memory_items = [memory_items] if memory_items else [] - # 获取时间信息 - created_time = node.get('created_time', datetime.datetime.now().timestamp()) - last_modified = node.get('last_modified', datetime.datetime.now().timestamp()) + # 检查时间字段是否存在 + if 'created_time' not in node or 'last_modified' not in node: + need_update = True + # 更新数据库中的节点 + update_data = {} + if 'created_time' not in node: + update_data['created_time'] = current_time + if 'last_modified' not in node: + update_data['last_modified'] = current_time + + self.memory_graph.db.db.graph_data.nodes.update_one( + {'concept': concept}, + {'$set': update_data} + ) + logger.info(f"为节点 {concept} 添加缺失的时间字段") + + # 获取时间信息(如果不存在则使用当前时间) + created_time = node.get('created_time', current_time) + last_modified = node.get('last_modified', current_time) # 添加节点到图中 self.memory_graph.G.add_node(concept, @@ -461,15 +479,31 @@ class Hippocampus: last_modified=last_modified) # 从数据库加载所有边 - edges = self.memory_graph.db.db.graph_data.edges.find() + edges = list(self.memory_graph.db.db.graph_data.edges.find()) for edge in edges: source = edge['source'] target = edge['target'] - strength = edge.get('strength', 1) # 获取 strength,默认为 1 + strength = edge.get('strength', 1) - # 获取时间信息 - created_time = edge.get('created_time', datetime.datetime.now().timestamp()) - last_modified = edge.get('last_modified', datetime.datetime.now().timestamp()) + # 检查时间字段是否存在 + if 'created_time' not in edge or 'last_modified' not in edge: + need_update = True + # 更新数据库中的边 + update_data = {} + if 'created_time' not in edge: + update_data['created_time'] = current_time + if 'last_modified' not in edge: + update_data['last_modified'] = current_time + + self.memory_graph.db.db.graph_data.edges.update_one( + {'source': source, 'target': target}, + {'$set': update_data} + ) + logger.info(f"为边 {source} - {target} 添加缺失的时间字段") + + # 获取时间信息(如果不存在则使用当前时间) + created_time = edge.get('created_time', current_time) + last_modified = edge.get('last_modified', current_time) # 只有当源节点和目标节点都存在时才添加边 if source in self.memory_graph.G and target in self.memory_graph.G: @@ -477,6 +511,9 @@ class Hippocampus: strength=strength, created_time=created_time, last_modified=last_modified) + + if need_update: + logger.success("已为缺失的时间字段进行补充") async def operation_forget_topic(self, percentage=0.1): """随机选择图中一定比例的节点和边进行检查,根据时间条件决定是否遗忘"""