修复记忆更新bug
This commit is contained in:
@@ -141,7 +141,7 @@
|
||||
|
||||
## 📌 注意事项
|
||||
|
||||
SengokuCola纯编程外行,面向cursor编程,很多代码史一样多多包涵
|
||||
SengokuCola~~纯编程外行,面向cursor编程,很多代码写得不好多多包涵~~已得到大脑升级
|
||||
> [!WARNING]
|
||||
> 本应用生成内容来自人工智能模型,由 AI 生成,请仔细甄别,请勿用于违反法律的用途,AI生成内容不代表本人观点和立场。
|
||||
|
||||
|
||||
@@ -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:
|
||||
@@ -478,6 +512,9 @@ class Hippocampus:
|
||||
created_time=created_time,
|
||||
last_modified=last_modified)
|
||||
|
||||
if need_update:
|
||||
logger.success("已为缺失的时间字段进行补充")
|
||||
|
||||
async def operation_forget_topic(self, percentage=0.1):
|
||||
"""随机选择图中一定比例的节点和边进行检查,根据时间条件决定是否遗忘"""
|
||||
all_nodes = list(self.memory_graph.G.nodes())
|
||||
|
||||
Reference in New Issue
Block a user