修复了数据库无法读取记忆和知识的问题,以及图片保存问题
This commit is contained in:
@@ -246,7 +246,7 @@ class EmojiManager:
|
|||||||
# 即使表情包已存在,也检查是否需要同步到images集合
|
# 即使表情包已存在,也检查是否需要同步到images集合
|
||||||
description = existing_emoji.get('discription')
|
description = existing_emoji.get('discription')
|
||||||
# 检查是否在images集合中存在
|
# 检查是否在images集合中存在
|
||||||
existing_image = image_manager.db.db.images.find_one({'hash': image_hash})
|
existing_image = image_manager.db.images.find_one({'hash': image_hash})
|
||||||
if not existing_image:
|
if not existing_image:
|
||||||
# 同步到images集合
|
# 同步到images集合
|
||||||
image_doc = {
|
image_doc = {
|
||||||
@@ -256,7 +256,7 @@ class EmojiManager:
|
|||||||
'description': description,
|
'description': description,
|
||||||
'timestamp': int(time.time())
|
'timestamp': int(time.time())
|
||||||
}
|
}
|
||||||
image_manager.db.db.images.update_one(
|
image_manager.db.images.update_one(
|
||||||
{'hash': image_hash},
|
{'hash': image_hash},
|
||||||
{'$set': image_doc},
|
{'$set': image_doc},
|
||||||
upsert=True
|
upsert=True
|
||||||
@@ -318,7 +318,7 @@ class EmojiManager:
|
|||||||
'description': description,
|
'description': description,
|
||||||
'timestamp': int(time.time())
|
'timestamp': int(time.time())
|
||||||
}
|
}
|
||||||
image_manager.db.db.images.update_one(
|
image_manager.db.images.update_one(
|
||||||
{'hash': image_hash},
|
{'hash': image_hash},
|
||||||
{'$set': image_doc},
|
{'$set': image_doc},
|
||||||
upsert=True
|
upsert=True
|
||||||
|
|||||||
@@ -88,13 +88,13 @@ def get_cloest_chat_from_db(db, length: int, timestamp: str):
|
|||||||
list: 消息记录列表,每个记录包含时间和文本信息
|
list: 消息记录列表,每个记录包含时间和文本信息
|
||||||
"""
|
"""
|
||||||
chat_records = []
|
chat_records = []
|
||||||
closest_record = db.db.messages.find_one({"time": {"$lte": timestamp}}, sort=[('time', -1)])
|
closest_record = db.messages.find_one({"time": {"$lte": timestamp}}, sort=[('time', -1)])
|
||||||
|
|
||||||
if closest_record:
|
if closest_record:
|
||||||
closest_time = closest_record['time']
|
closest_time = closest_record['time']
|
||||||
chat_id = closest_record['chat_id'] # 获取chat_id
|
chat_id = closest_record['chat_id'] # 获取chat_id
|
||||||
# 获取该时间戳之后的length条消息,保持相同的chat_id
|
# 获取该时间戳之后的length条消息,保持相同的chat_id
|
||||||
chat_records = list(db.db.messages.find(
|
chat_records = list(db.messages.find(
|
||||||
{
|
{
|
||||||
"time": {"$gt": closest_time},
|
"time": {"$gt": closest_time},
|
||||||
"chat_id": chat_id # 添加chat_id过滤
|
"chat_id": chat_id # 添加chat_id过滤
|
||||||
@@ -128,7 +128,7 @@ async def get_recent_group_messages(db, chat_id:str, limit: int = 12) -> list:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
# 从数据库获取最近消息
|
# 从数据库获取最近消息
|
||||||
recent_messages = list(db.db.messages.find(
|
recent_messages = list(db.messages.find(
|
||||||
{"chat_id": chat_id},
|
{"chat_id": chat_id},
|
||||||
).sort("time", -1).limit(limit))
|
).sort("time", -1).limit(limit))
|
||||||
|
|
||||||
@@ -162,7 +162,7 @@ async def get_recent_group_messages(db, chat_id:str, limit: int = 12) -> list:
|
|||||||
|
|
||||||
|
|
||||||
def get_recent_group_detailed_plain_text(db, chat_stream_id: int, limit: int = 12, combine=False):
|
def get_recent_group_detailed_plain_text(db, chat_stream_id: int, limit: int = 12, combine=False):
|
||||||
recent_messages = list(db.db.messages.find(
|
recent_messages = list(db.messages.find(
|
||||||
{"chat_id": chat_stream_id},
|
{"chat_id": chat_stream_id},
|
||||||
{
|
{
|
||||||
"time": 1, # 返回时间字段
|
"time": 1, # 返回时间字段
|
||||||
|
|||||||
@@ -349,7 +349,7 @@ class Hippocampus:
|
|||||||
def sync_memory_to_db(self):
|
def sync_memory_to_db(self):
|
||||||
"""检查并同步内存中的图结构与数据库"""
|
"""检查并同步内存中的图结构与数据库"""
|
||||||
# 获取数据库中所有节点和内存中所有节点
|
# 获取数据库中所有节点和内存中所有节点
|
||||||
db_nodes = list(self.memory_graph.db.db.graph_data.nodes.find())
|
db_nodes = list(self.memory_graph.db.graph_data.nodes.find())
|
||||||
memory_nodes = list(self.memory_graph.G.nodes(data=True))
|
memory_nodes = list(self.memory_graph.G.nodes(data=True))
|
||||||
|
|
||||||
# 转换数据库节点为字典格式,方便查找
|
# 转换数据库节点为字典格式,方便查找
|
||||||
@@ -377,7 +377,7 @@ class Hippocampus:
|
|||||||
'created_time': created_time,
|
'created_time': created_time,
|
||||||
'last_modified': last_modified
|
'last_modified': last_modified
|
||||||
}
|
}
|
||||||
self.memory_graph.db.db.graph_data.nodes.insert_one(node_data)
|
self.memory_graph.db.graph_data.nodes.insert_one(node_data)
|
||||||
else:
|
else:
|
||||||
# 获取数据库中节点的特征值
|
# 获取数据库中节点的特征值
|
||||||
db_node = db_nodes_dict[concept]
|
db_node = db_nodes_dict[concept]
|
||||||
@@ -385,7 +385,7 @@ class Hippocampus:
|
|||||||
|
|
||||||
# 如果特征值不同,则更新节点
|
# 如果特征值不同,则更新节点
|
||||||
if db_hash != memory_hash:
|
if db_hash != memory_hash:
|
||||||
self.memory_graph.db.db.graph_data.nodes.update_one(
|
self.memory_graph.db.graph_data.nodes.update_one(
|
||||||
{'concept': concept},
|
{'concept': concept},
|
||||||
{'$set': {
|
{'$set': {
|
||||||
'memory_items': memory_items,
|
'memory_items': memory_items,
|
||||||
@@ -396,7 +396,7 @@ class Hippocampus:
|
|||||||
)
|
)
|
||||||
|
|
||||||
# 处理边的信息
|
# 处理边的信息
|
||||||
db_edges = list(self.memory_graph.db.db.graph_data.edges.find())
|
db_edges = list(self.memory_graph.db.graph_data.edges.find())
|
||||||
memory_edges = list(self.memory_graph.G.edges(data=True))
|
memory_edges = list(self.memory_graph.G.edges(data=True))
|
||||||
|
|
||||||
# 创建边的哈希值字典
|
# 创建边的哈希值字典
|
||||||
@@ -428,11 +428,11 @@ class Hippocampus:
|
|||||||
'created_time': created_time,
|
'created_time': created_time,
|
||||||
'last_modified': last_modified
|
'last_modified': last_modified
|
||||||
}
|
}
|
||||||
self.memory_graph.db.db.graph_data.edges.insert_one(edge_data)
|
self.memory_graph.db.graph_data.edges.insert_one(edge_data)
|
||||||
else:
|
else:
|
||||||
# 检查边的特征值是否变化
|
# 检查边的特征值是否变化
|
||||||
if db_edge_dict[edge_key]['hash'] != edge_hash:
|
if db_edge_dict[edge_key]['hash'] != edge_hash:
|
||||||
self.memory_graph.db.db.graph_data.edges.update_one(
|
self.memory_graph.db.graph_data.edges.update_one(
|
||||||
{'source': source, 'target': target},
|
{'source': source, 'target': target},
|
||||||
{'$set': {
|
{'$set': {
|
||||||
'hash': edge_hash,
|
'hash': edge_hash,
|
||||||
@@ -451,7 +451,7 @@ class Hippocampus:
|
|||||||
self.memory_graph.G.clear()
|
self.memory_graph.G.clear()
|
||||||
|
|
||||||
# 从数据库加载所有节点
|
# 从数据库加载所有节点
|
||||||
nodes = list(self.memory_graph.db.db.graph_data.nodes.find())
|
nodes = list(self.memory_graph.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', [])
|
||||||
@@ -468,7 +468,7 @@ class Hippocampus:
|
|||||||
if 'last_modified' not in node:
|
if 'last_modified' not in node:
|
||||||
update_data['last_modified'] = current_time
|
update_data['last_modified'] = current_time
|
||||||
|
|
||||||
self.memory_graph.db.db.graph_data.nodes.update_one(
|
self.memory_graph.db.graph_data.nodes.update_one(
|
||||||
{'concept': concept},
|
{'concept': concept},
|
||||||
{'$set': update_data}
|
{'$set': update_data}
|
||||||
)
|
)
|
||||||
@@ -485,7 +485,7 @@ class Hippocampus:
|
|||||||
last_modified=last_modified)
|
last_modified=last_modified)
|
||||||
|
|
||||||
# 从数据库加载所有边
|
# 从数据库加载所有边
|
||||||
edges = list(self.memory_graph.db.db.graph_data.edges.find())
|
edges = list(self.memory_graph.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']
|
||||||
@@ -501,7 +501,7 @@ class Hippocampus:
|
|||||||
if 'last_modified' not in edge:
|
if 'last_modified' not in edge:
|
||||||
update_data['last_modified'] = current_time
|
update_data['last_modified'] = current_time
|
||||||
|
|
||||||
self.memory_graph.db.db.graph_data.edges.update_one(
|
self.memory_graph.db.graph_data.edges.update_one(
|
||||||
{'source': source, 'target': target},
|
{'source': source, 'target': target},
|
||||||
{'$set': update_data}
|
{'$set': update_data}
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -56,13 +56,13 @@ def get_cloest_chat_from_db(db, length: int, timestamp: str):
|
|||||||
list: 消息记录字典列表,每个字典包含消息内容和时间信息
|
list: 消息记录字典列表,每个字典包含消息内容和时间信息
|
||||||
"""
|
"""
|
||||||
chat_records = []
|
chat_records = []
|
||||||
closest_record = db.db.messages.find_one({"time": {"$lte": timestamp}}, sort=[('time', -1)])
|
closest_record = db.messages.find_one({"time": {"$lte": timestamp}}, sort=[('time', -1)])
|
||||||
|
|
||||||
if closest_record and closest_record.get('memorized', 0) < 4:
|
if closest_record and closest_record.get('memorized', 0) < 4:
|
||||||
closest_time = closest_record['time']
|
closest_time = closest_record['time']
|
||||||
group_id = closest_record['group_id']
|
group_id = closest_record['group_id']
|
||||||
# 获取该时间戳之后的length条消息,且groupid相同
|
# 获取该时间戳之后的length条消息,且groupid相同
|
||||||
records = list(db.db.messages.find(
|
records = list(db.messages.find(
|
||||||
{"time": {"$gt": closest_time}, "group_id": group_id}
|
{"time": {"$gt": closest_time}, "group_id": group_id}
|
||||||
).sort('time', 1).limit(length))
|
).sort('time', 1).limit(length))
|
||||||
|
|
||||||
@@ -74,7 +74,7 @@ def get_cloest_chat_from_db(db, length: int, timestamp: str):
|
|||||||
return ''
|
return ''
|
||||||
|
|
||||||
# 更新memorized值
|
# 更新memorized值
|
||||||
db.db.messages.update_one(
|
db.messages.update_one(
|
||||||
{"_id": record["_id"]},
|
{"_id": record["_id"]},
|
||||||
{"$set": {"memorized": current_memorized + 1}}
|
{"$set": {"memorized": current_memorized + 1}}
|
||||||
)
|
)
|
||||||
@@ -323,7 +323,7 @@ class Hippocampus:
|
|||||||
self.memory_graph.G.clear()
|
self.memory_graph.G.clear()
|
||||||
|
|
||||||
# 从数据库加载所有节点
|
# 从数据库加载所有节点
|
||||||
nodes = self.memory_graph.db.db.graph_data.nodes.find()
|
nodes = self.memory_graph.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', [])
|
||||||
@@ -334,7 +334,7 @@ class Hippocampus:
|
|||||||
self.memory_graph.G.add_node(concept, memory_items=memory_items)
|
self.memory_graph.G.add_node(concept, memory_items=memory_items)
|
||||||
|
|
||||||
# 从数据库加载所有边
|
# 从数据库加载所有边
|
||||||
edges = self.memory_graph.db.db.graph_data.edges.find()
|
edges = self.memory_graph.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']
|
||||||
@@ -371,7 +371,7 @@ class Hippocampus:
|
|||||||
使用特征值(哈希值)快速判断是否需要更新
|
使用特征值(哈希值)快速判断是否需要更新
|
||||||
"""
|
"""
|
||||||
# 获取数据库中所有节点和内存中所有节点
|
# 获取数据库中所有节点和内存中所有节点
|
||||||
db_nodes = list(self.memory_graph.db.db.graph_data.nodes.find())
|
db_nodes = list(self.memory_graph.db.graph_data.nodes.find())
|
||||||
memory_nodes = list(self.memory_graph.G.nodes(data=True))
|
memory_nodes = list(self.memory_graph.G.nodes(data=True))
|
||||||
|
|
||||||
# 转换数据库节点为字典格式,方便查找
|
# 转换数据库节点为字典格式,方便查找
|
||||||
@@ -394,7 +394,7 @@ class Hippocampus:
|
|||||||
'memory_items': memory_items,
|
'memory_items': memory_items,
|
||||||
'hash': memory_hash
|
'hash': memory_hash
|
||||||
}
|
}
|
||||||
self.memory_graph.db.db.graph_data.nodes.insert_one(node_data)
|
self.memory_graph.db.graph_data.nodes.insert_one(node_data)
|
||||||
else:
|
else:
|
||||||
# 获取数据库中节点的特征值
|
# 获取数据库中节点的特征值
|
||||||
db_node = db_nodes_dict[concept]
|
db_node = db_nodes_dict[concept]
|
||||||
@@ -403,7 +403,7 @@ class Hippocampus:
|
|||||||
# 如果特征值不同,则更新节点
|
# 如果特征值不同,则更新节点
|
||||||
if db_hash != memory_hash:
|
if db_hash != memory_hash:
|
||||||
# logger.info(f"更新节点内容: {concept}")
|
# logger.info(f"更新节点内容: {concept}")
|
||||||
self.memory_graph.db.db.graph_data.nodes.update_one(
|
self.memory_graph.db.graph_data.nodes.update_one(
|
||||||
{'concept': concept},
|
{'concept': concept},
|
||||||
{'$set': {
|
{'$set': {
|
||||||
'memory_items': memory_items,
|
'memory_items': memory_items,
|
||||||
@@ -416,10 +416,10 @@ class Hippocampus:
|
|||||||
for db_node in db_nodes:
|
for db_node in db_nodes:
|
||||||
if db_node['concept'] not in memory_concepts:
|
if db_node['concept'] not in memory_concepts:
|
||||||
# logger.info(f"删除多余节点: {db_node['concept']}")
|
# logger.info(f"删除多余节点: {db_node['concept']}")
|
||||||
self.memory_graph.db.db.graph_data.nodes.delete_one({'concept': db_node['concept']})
|
self.memory_graph.db.graph_data.nodes.delete_one({'concept': db_node['concept']})
|
||||||
|
|
||||||
# 处理边的信息
|
# 处理边的信息
|
||||||
db_edges = list(self.memory_graph.db.db.graph_data.edges.find())
|
db_edges = list(self.memory_graph.db.graph_data.edges.find())
|
||||||
memory_edges = list(self.memory_graph.G.edges())
|
memory_edges = list(self.memory_graph.G.edges())
|
||||||
|
|
||||||
# 创建边的哈希值字典
|
# 创建边的哈希值字典
|
||||||
@@ -445,12 +445,12 @@ class Hippocampus:
|
|||||||
'num': 1,
|
'num': 1,
|
||||||
'hash': edge_hash
|
'hash': edge_hash
|
||||||
}
|
}
|
||||||
self.memory_graph.db.db.graph_data.edges.insert_one(edge_data)
|
self.memory_graph.db.graph_data.edges.insert_one(edge_data)
|
||||||
else:
|
else:
|
||||||
# 检查边的特征值是否变化
|
# 检查边的特征值是否变化
|
||||||
if db_edge_dict[edge_key]['hash'] != edge_hash:
|
if db_edge_dict[edge_key]['hash'] != edge_hash:
|
||||||
logger.info(f"更新边: {source} - {target}")
|
logger.info(f"更新边: {source} - {target}")
|
||||||
self.memory_graph.db.db.graph_data.edges.update_one(
|
self.memory_graph.db.graph_data.edges.update_one(
|
||||||
{'source': source, 'target': target},
|
{'source': source, 'target': target},
|
||||||
{'$set': {'hash': edge_hash}}
|
{'$set': {'hash': edge_hash}}
|
||||||
)
|
)
|
||||||
@@ -461,7 +461,7 @@ class Hippocampus:
|
|||||||
if edge_key not in memory_edge_set:
|
if edge_key not in memory_edge_set:
|
||||||
source, target = edge_key
|
source, target = edge_key
|
||||||
logger.info(f"删除多余边: {source} - {target}")
|
logger.info(f"删除多余边: {source} - {target}")
|
||||||
self.memory_graph.db.db.graph_data.edges.delete_one({
|
self.memory_graph.db.graph_data.edges.delete_one({
|
||||||
'source': source,
|
'source': source,
|
||||||
'target': target
|
'target': target
|
||||||
})
|
})
|
||||||
@@ -487,9 +487,9 @@ class Hippocampus:
|
|||||||
topic: 要删除的节点概念
|
topic: 要删除的节点概念
|
||||||
"""
|
"""
|
||||||
# 删除节点
|
# 删除节点
|
||||||
self.memory_graph.db.db.graph_data.nodes.delete_one({'concept': topic})
|
self.memory_graph.db.graph_data.nodes.delete_one({'concept': topic})
|
||||||
# 删除所有涉及该节点的边
|
# 删除所有涉及该节点的边
|
||||||
self.memory_graph.db.db.graph_data.edges.delete_many({
|
self.memory_graph.db.graph_data.edges.delete_many({
|
||||||
'$or': [
|
'$or': [
|
||||||
{'source': topic},
|
{'source': topic},
|
||||||
{'target': topic}
|
{'target': topic}
|
||||||
|
|||||||
@@ -115,13 +115,13 @@ def get_cloest_chat_from_db(db, length: int, timestamp: str):
|
|||||||
list: 消息记录字典列表,每个字典包含消息内容和时间信息
|
list: 消息记录字典列表,每个字典包含消息内容和时间信息
|
||||||
"""
|
"""
|
||||||
chat_records = []
|
chat_records = []
|
||||||
closest_record = db.db.messages.find_one({"time": {"$lte": timestamp}}, sort=[('time', -1)])
|
closest_record = db.messages.find_one({"time": {"$lte": timestamp}}, sort=[('time', -1)])
|
||||||
|
|
||||||
if closest_record and closest_record.get('memorized', 0) < 4:
|
if closest_record and closest_record.get('memorized', 0) < 4:
|
||||||
closest_time = closest_record['time']
|
closest_time = closest_record['time']
|
||||||
group_id = closest_record['group_id']
|
group_id = closest_record['group_id']
|
||||||
# 获取该时间戳之后的length条消息,且groupid相同
|
# 获取该时间戳之后的length条消息,且groupid相同
|
||||||
records = list(db.db.messages.find(
|
records = list(db.messages.find(
|
||||||
{"time": {"$gt": closest_time}, "group_id": group_id}
|
{"time": {"$gt": closest_time}, "group_id": group_id}
|
||||||
).sort('time', 1).limit(length))
|
).sort('time', 1).limit(length))
|
||||||
|
|
||||||
@@ -133,7 +133,7 @@ def get_cloest_chat_from_db(db, length: int, timestamp: str):
|
|||||||
return ''
|
return ''
|
||||||
|
|
||||||
# 更新memorized值
|
# 更新memorized值
|
||||||
db.db.messages.update_one(
|
db.messages.update_one(
|
||||||
{"_id": record["_id"]},
|
{"_id": record["_id"]},
|
||||||
{"$set": {"memorized": current_memorized + 1}}
|
{"$set": {"memorized": current_memorized + 1}}
|
||||||
)
|
)
|
||||||
@@ -163,7 +163,7 @@ class Memory_cortex:
|
|||||||
default_time = datetime.datetime.now().timestamp()
|
default_time = datetime.datetime.now().timestamp()
|
||||||
|
|
||||||
# 从数据库加载所有节点
|
# 从数据库加载所有节点
|
||||||
nodes = self.memory_graph.db.db.graph_data.nodes.find()
|
nodes = self.memory_graph.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', [])
|
||||||
@@ -180,7 +180,7 @@ class Memory_cortex:
|
|||||||
created_time = default_time
|
created_time = default_time
|
||||||
last_modified = default_time
|
last_modified = default_time
|
||||||
# 更新数据库中的节点
|
# 更新数据库中的节点
|
||||||
self.memory_graph.db.db.graph_data.nodes.update_one(
|
self.memory_graph.db.graph_data.nodes.update_one(
|
||||||
{'concept': concept},
|
{'concept': concept},
|
||||||
{'$set': {
|
{'$set': {
|
||||||
'created_time': created_time,
|
'created_time': created_time,
|
||||||
@@ -196,7 +196,7 @@ class Memory_cortex:
|
|||||||
last_modified=last_modified)
|
last_modified=last_modified)
|
||||||
|
|
||||||
# 从数据库加载所有边
|
# 从数据库加载所有边
|
||||||
edges = self.memory_graph.db.db.graph_data.edges.find()
|
edges = self.memory_graph.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']
|
||||||
@@ -212,7 +212,7 @@ class Memory_cortex:
|
|||||||
created_time = default_time
|
created_time = default_time
|
||||||
last_modified = default_time
|
last_modified = default_time
|
||||||
# 更新数据库中的边
|
# 更新数据库中的边
|
||||||
self.memory_graph.db.db.graph_data.edges.update_one(
|
self.memory_graph.db.graph_data.edges.update_one(
|
||||||
{'source': source, 'target': target},
|
{'source': source, 'target': target},
|
||||||
{'$set': {
|
{'$set': {
|
||||||
'created_time': created_time,
|
'created_time': created_time,
|
||||||
@@ -256,7 +256,7 @@ class Memory_cortex:
|
|||||||
current_time = datetime.datetime.now().timestamp()
|
current_time = datetime.datetime.now().timestamp()
|
||||||
|
|
||||||
# 获取数据库中所有节点和内存中所有节点
|
# 获取数据库中所有节点和内存中所有节点
|
||||||
db_nodes = list(self.memory_graph.db.db.graph_data.nodes.find())
|
db_nodes = list(self.memory_graph.db.graph_data.nodes.find())
|
||||||
memory_nodes = list(self.memory_graph.G.nodes(data=True))
|
memory_nodes = list(self.memory_graph.G.nodes(data=True))
|
||||||
|
|
||||||
# 转换数据库节点为字典格式,方便查找
|
# 转换数据库节点为字典格式,方便查找
|
||||||
@@ -280,7 +280,7 @@ class Memory_cortex:
|
|||||||
'created_time': data.get('created_time', current_time),
|
'created_time': data.get('created_time', current_time),
|
||||||
'last_modified': data.get('last_modified', current_time)
|
'last_modified': data.get('last_modified', current_time)
|
||||||
}
|
}
|
||||||
self.memory_graph.db.db.graph_data.nodes.insert_one(node_data)
|
self.memory_graph.db.graph_data.nodes.insert_one(node_data)
|
||||||
else:
|
else:
|
||||||
# 获取数据库中节点的特征值
|
# 获取数据库中节点的特征值
|
||||||
db_node = db_nodes_dict[concept]
|
db_node = db_nodes_dict[concept]
|
||||||
@@ -288,7 +288,7 @@ class Memory_cortex:
|
|||||||
|
|
||||||
# 如果特征值不同,则更新节点
|
# 如果特征值不同,则更新节点
|
||||||
if db_hash != memory_hash:
|
if db_hash != memory_hash:
|
||||||
self.memory_graph.db.db.graph_data.nodes.update_one(
|
self.memory_graph.db.graph_data.nodes.update_one(
|
||||||
{'concept': concept},
|
{'concept': concept},
|
||||||
{'$set': {
|
{'$set': {
|
||||||
'memory_items': memory_items,
|
'memory_items': memory_items,
|
||||||
@@ -301,10 +301,10 @@ class Memory_cortex:
|
|||||||
memory_concepts = set(node[0] for node in memory_nodes)
|
memory_concepts = set(node[0] for node in memory_nodes)
|
||||||
for db_node in db_nodes:
|
for db_node in db_nodes:
|
||||||
if db_node['concept'] not in memory_concepts:
|
if db_node['concept'] not in memory_concepts:
|
||||||
self.memory_graph.db.db.graph_data.nodes.delete_one({'concept': db_node['concept']})
|
self.memory_graph.db.graph_data.nodes.delete_one({'concept': db_node['concept']})
|
||||||
|
|
||||||
# 处理边的信息
|
# 处理边的信息
|
||||||
db_edges = list(self.memory_graph.db.db.graph_data.edges.find())
|
db_edges = list(self.memory_graph.db.graph_data.edges.find())
|
||||||
memory_edges = list(self.memory_graph.G.edges(data=True))
|
memory_edges = list(self.memory_graph.G.edges(data=True))
|
||||||
|
|
||||||
# 创建边的哈希值字典
|
# 创建边的哈希值字典
|
||||||
@@ -332,11 +332,11 @@ class Memory_cortex:
|
|||||||
'created_time': data.get('created_time', current_time),
|
'created_time': data.get('created_time', current_time),
|
||||||
'last_modified': data.get('last_modified', current_time)
|
'last_modified': data.get('last_modified', current_time)
|
||||||
}
|
}
|
||||||
self.memory_graph.db.db.graph_data.edges.insert_one(edge_data)
|
self.memory_graph.db.graph_data.edges.insert_one(edge_data)
|
||||||
else:
|
else:
|
||||||
# 检查边的特征值是否变化
|
# 检查边的特征值是否变化
|
||||||
if db_edge_dict[edge_key]['hash'] != edge_hash:
|
if db_edge_dict[edge_key]['hash'] != edge_hash:
|
||||||
self.memory_graph.db.db.graph_data.edges.update_one(
|
self.memory_graph.db.graph_data.edges.update_one(
|
||||||
{'source': source, 'target': target},
|
{'source': source, 'target': target},
|
||||||
{'$set': {
|
{'$set': {
|
||||||
'hash': edge_hash,
|
'hash': edge_hash,
|
||||||
@@ -350,7 +350,7 @@ class Memory_cortex:
|
|||||||
for edge_key in db_edge_dict:
|
for edge_key in db_edge_dict:
|
||||||
if edge_key not in memory_edge_set:
|
if edge_key not in memory_edge_set:
|
||||||
source, target = edge_key
|
source, target = edge_key
|
||||||
self.memory_graph.db.db.graph_data.edges.delete_one({
|
self.memory_graph.db.graph_data.edges.delete_one({
|
||||||
'source': source,
|
'source': source,
|
||||||
'target': target
|
'target': target
|
||||||
})
|
})
|
||||||
@@ -365,9 +365,9 @@ class Memory_cortex:
|
|||||||
topic: 要删除的节点概念
|
topic: 要删除的节点概念
|
||||||
"""
|
"""
|
||||||
# 删除节点
|
# 删除节点
|
||||||
self.memory_graph.db.db.graph_data.nodes.delete_one({'concept': topic})
|
self.memory_graph.db.graph_data.nodes.delete_one({'concept': topic})
|
||||||
# 删除所有涉及该节点的边
|
# 删除所有涉及该节点的边
|
||||||
self.memory_graph.db.db.graph_data.edges.delete_many({
|
self.memory_graph.db.graph_data.edges.delete_many({
|
||||||
'$or': [
|
'$or': [
|
||||||
{'source': topic},
|
{'source': topic},
|
||||||
{'target': topic}
|
{'target': topic}
|
||||||
|
|||||||
@@ -176,7 +176,7 @@ class KnowledgeLibrary:
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
current_hash = self.calculate_file_hash(file_path)
|
current_hash = self.calculate_file_hash(file_path)
|
||||||
processed_record = self.db.db.processed_files.find_one({"file_path": file_path})
|
processed_record = self.db.processed_files.find_one({"file_path": file_path})
|
||||||
|
|
||||||
if processed_record:
|
if processed_record:
|
||||||
if processed_record.get("hash") == current_hash:
|
if processed_record.get("hash") == current_hash:
|
||||||
@@ -197,14 +197,14 @@ class KnowledgeLibrary:
|
|||||||
"split_length": knowledge_length,
|
"split_length": knowledge_length,
|
||||||
"created_at": datetime.now()
|
"created_at": datetime.now()
|
||||||
}
|
}
|
||||||
self.db.db.knowledges.insert_one(knowledge)
|
self.db.knowledges.insert_one(knowledge)
|
||||||
result["chunks_processed"] += 1
|
result["chunks_processed"] += 1
|
||||||
|
|
||||||
split_by = processed_record.get("split_by", []) if processed_record else []
|
split_by = processed_record.get("split_by", []) if processed_record else []
|
||||||
if knowledge_length not in split_by:
|
if knowledge_length not in split_by:
|
||||||
split_by.append(knowledge_length)
|
split_by.append(knowledge_length)
|
||||||
|
|
||||||
self.db.db.processed_files.update_one(
|
self.db.knowledges.processed_files.update_one(
|
||||||
{"file_path": file_path},
|
{"file_path": file_path},
|
||||||
{
|
{
|
||||||
"$set": {
|
"$set": {
|
||||||
@@ -322,7 +322,7 @@ class KnowledgeLibrary:
|
|||||||
{"$project": {"content": 1, "similarity": 1, "file_path": 1}}
|
{"$project": {"content": 1, "similarity": 1, "file_path": 1}}
|
||||||
]
|
]
|
||||||
|
|
||||||
results = list(self.db.db.knowledges.aggregate(pipeline))
|
results = list(self.db.knowledges.aggregate(pipeline))
|
||||||
return results
|
return results
|
||||||
|
|
||||||
# 创建单例实例
|
# 创建单例实例
|
||||||
@@ -346,7 +346,7 @@ if __name__ == "__main__":
|
|||||||
elif choice == '2':
|
elif choice == '2':
|
||||||
confirm = input("确定要删除所有知识吗?这个操作不可撤销!(y/n): ").strip().lower()
|
confirm = input("确定要删除所有知识吗?这个操作不可撤销!(y/n): ").strip().lower()
|
||||||
if confirm == 'y':
|
if confirm == 'y':
|
||||||
knowledge_library.db.db.knowledges.delete_many({})
|
knowledge_library.db.knowledges.delete_many({})
|
||||||
console.print("[green]已清空所有知识![/green]")
|
console.print("[green]已清空所有知识![/green]")
|
||||||
continue
|
continue
|
||||||
elif choice == '1':
|
elif choice == '1':
|
||||||
|
|||||||
Reference in New Issue
Block a user