修复记忆更新bug
This commit is contained in:
@@ -141,7 +141,7 @@
|
|||||||
|
|
||||||
## 📌 注意事项
|
## 📌 注意事项
|
||||||
|
|
||||||
SengokuCola纯编程外行,面向cursor编程,很多代码史一样多多包涵
|
SengokuCola~~纯编程外行,面向cursor编程,很多代码写得不好多多包涵~~已得到大脑升级
|
||||||
> [!WARNING]
|
> [!WARNING]
|
||||||
> 本应用生成内容来自人工智能模型,由 AI 生成,请仔细甄别,请勿用于违反法律的用途,AI生成内容不代表本人观点和立场。
|
> 本应用生成内容来自人工智能模型,由 AI 生成,请仔细甄别,请勿用于违反法律的用途,AI生成内容不代表本人观点和立场。
|
||||||
|
|
||||||
|
|||||||
@@ -438,21 +438,39 @@ class Hippocampus:
|
|||||||
|
|
||||||
def sync_memory_from_db(self):
|
def sync_memory_from_db(self):
|
||||||
"""从数据库同步数据到内存中的图结构"""
|
"""从数据库同步数据到内存中的图结构"""
|
||||||
|
current_time = datetime.datetime.now().timestamp()
|
||||||
|
need_update = False
|
||||||
|
|
||||||
# 清空当前图
|
# 清空当前图
|
||||||
self.memory_graph.G.clear()
|
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:
|
for node in nodes:
|
||||||
concept = node['concept']
|
concept = node['concept']
|
||||||
memory_items = node.get('memory_items', [])
|
memory_items = node.get('memory_items', [])
|
||||||
# 确保memory_items是列表
|
|
||||||
if not isinstance(memory_items, list):
|
if not isinstance(memory_items, list):
|
||||||
memory_items = [memory_items] if memory_items else []
|
memory_items = [memory_items] if memory_items else []
|
||||||
|
|
||||||
# 获取时间信息
|
# 检查时间字段是否存在
|
||||||
created_time = node.get('created_time', datetime.datetime.now().timestamp())
|
if 'created_time' not in node or 'last_modified' not in node:
|
||||||
last_modified = node.get('last_modified', datetime.datetime.now().timestamp())
|
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,
|
self.memory_graph.G.add_node(concept,
|
||||||
@@ -461,15 +479,31 @@ class Hippocampus:
|
|||||||
last_modified=last_modified)
|
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:
|
for edge in edges:
|
||||||
source = edge['source']
|
source = edge['source']
|
||||||
target = edge['target']
|
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())
|
if 'created_time' not in edge or 'last_modified' not in edge:
|
||||||
last_modified = edge.get('last_modified', datetime.datetime.now().timestamp())
|
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:
|
if source in self.memory_graph.G and target in self.memory_graph.G:
|
||||||
@@ -477,6 +511,9 @@ class Hippocampus:
|
|||||||
strength=strength,
|
strength=strength,
|
||||||
created_time=created_time,
|
created_time=created_time,
|
||||||
last_modified=last_modified)
|
last_modified=last_modified)
|
||||||
|
|
||||||
|
if need_update:
|
||||||
|
logger.success("已为缺失的时间字段进行补充")
|
||||||
|
|
||||||
async def operation_forget_topic(self, percentage=0.1):
|
async def operation_forget_topic(self, percentage=0.1):
|
||||||
"""随机选择图中一定比例的节点和边进行检查,根据时间条件决定是否遗忘"""
|
"""随机选择图中一定比例的节点和边进行检查,根据时间条件决定是否遗忘"""
|
||||||
|
|||||||
Reference in New Issue
Block a user