fix:解耦海马体,莲藕促销

This commit is contained in:
SengokuCola
2025-03-27 20:07:01 +08:00
parent dce1fdd9fd
commit 2812b0df3c
8 changed files with 116 additions and 37 deletions

View File

@@ -14,7 +14,8 @@ from .emoji_manager import emoji_manager
from .relationship_manager import relationship_manager
from ..willing.willing_manager import willing_manager
from .chat_stream import chat_manager
from ..memory_system.memory import hippocampus
# from ..memory_system.memory import hippocampus
from src.plugins.memory_system.Hippocampus import HippocampusManager
from .message_sender import message_manager, message_sender
from .storage import MessageStorage
from src.common.logger import get_module_logger
@@ -59,6 +60,22 @@ async def start_think_flow():
logger.error(f"启动大脑和外部世界失败: {e}")
raise
async def start_memory():
"""启动记忆系统"""
try:
start_time = time.time()
logger.info("开始初始化记忆系统...")
# 使用HippocampusManager初始化海马体
hippocampus_manager = HippocampusManager.get_instance()
hippocampus_manager.initialize(global_config=global_config)
end_time = time.time()
logger.success(f"记忆系统初始化完成,耗时: {end_time - start_time:.2f}")
except Exception as e:
logger.error(f"记忆系统初始化失败: {e}")
raise
@driver.on_startup
async def start_background_tasks():
@@ -79,6 +96,8 @@ async def start_background_tasks():
# 只启动表情包管理任务
asyncio.create_task(emoji_manager.start_periodic_check())
asyncio.create_task(start_memory())
@driver.on_startup
@@ -139,14 +158,14 @@ async def _(bot: Bot, event: NoticeEvent, state: T_State):
@scheduler.scheduled_job("interval", seconds=global_config.build_memory_interval, id="build_memory")
async def build_memory_task():
"""每build_memory_interval秒执行一次记忆构建"""
await hippocampus.operation_build_memory()
await HippocampusManager.get_instance().build_memory()
@scheduler.scheduled_job("interval", seconds=global_config.forget_memory_interval, id="forget_memory")
async def forget_memory_task():
"""每30秒执行一次记忆构建"""
print("\033[1;32m[记忆遗忘]\033[0m 开始遗忘记忆...")
await hippocampus.operation_forget_topic(percentage=global_config.memory_forget_percentage)
await HippocampusManager.get_instance().forget_memory(percentage=global_config.memory_forget_percentage)
print("\033[1;32m[记忆遗忘]\033[0m 记忆遗忘完成")

View File

@@ -12,7 +12,7 @@ from nonebot.adapters.onebot.v11 import (
FriendRecallNoticeEvent,
)
from ..memory_system.memory import hippocampus
from ..memory_system.Hippocampus import HippocampusManager
from ..moods.moods import MoodManager # 导入情绪管理器
from .config import global_config
from .emoji_manager import emoji_manager # 导入表情包管理器
@@ -129,7 +129,8 @@ class ChatBot:
# 根据话题计算激活度
topic = ""
interested_rate = await hippocampus.memory_activate_value(message.processed_plain_text) / 100
# interested_rate = await HippocampusManager.get_instance().memory_activate_value(message.processed_plain_text) / 100
interested_rate = 0.1
logger.debug(f"{message.processed_plain_text}的激活度:{interested_rate}")
# logger.info(f"\033[1;32m[主题识别]\033[0m 使用{global_config.topic_extract}主题: {topic}")

View File

@@ -3,7 +3,7 @@ import time
from typing import Optional
from ...common.database import db
from ..memory_system.memory import hippocampus, memory_graph
from ..memory_system.Hippocampus import HippocampusManager
from ..moods.moods import MoodManager
from ..schedule.schedule_generator import bot_schedule
from .config import global_config
@@ -79,19 +79,20 @@ class PromptBuilder:
start_time = time.time()
# 调用 hippocampus 的 get_relevant_memories 方法
relevant_memories = await hippocampus.get_relevant_memories(
text=message_txt, max_topics=3, similarity_threshold=0.5, max_memory_num=4
relevant_memories = await HippocampusManager.get_instance().get_memory_from_text(
text=message_txt, num=3, max_depth=2, fast_retrieval=True
)
memory_str = "\n".join(memory for topic, memories, _ in relevant_memories for memory in memories)
print(f"memory_str: {memory_str}")
if relevant_memories:
# 格式化记忆内容
memory_str = "\n".join(m["content"] for m in relevant_memories)
memory_prompt = f"你回忆起:\n{memory_str}\n"
# 打印调试信息
logger.debug("[记忆检索]找到以下相关记忆:")
for memory in relevant_memories:
logger.debug(f"- 主题「{memory['topic']}」[相似度: {memory['similarity']:.2f}]: {memory['content']}")
# for topic, memory_items, similarity in relevant_memories:
# logger.debug(f"- 主题「{topic}」[相似度: {similarity:.2f}]: {memory_items}")
end_time = time.time()
logger.info(f"回忆耗时: {(end_time - start_time):.3f}")
@@ -192,7 +193,7 @@ class PromptBuilder:
# print(f"\033[1;34m[调试]\033[0m 已从数据库获取群 {group_id} 的消息记录:{chat_talking_prompt}")
# 获取主动发言的话题
all_nodes = memory_graph.dots
all_nodes = HippocampusManager.get_instance().memory_graph.dots
all_nodes = filter(lambda dot: len(dot[1]["memory_items"]) > 3, all_nodes)
nodes_for_select = random.sample(all_nodes, 5)
topics = [info[0] for info in nodes_for_select]
@@ -245,7 +246,7 @@ class PromptBuilder:
related_info = ""
logger.debug(f"获取知识库内容,元消息:{message[:30]}...,消息长度: {len(message)}")
embedding = await get_embedding(message, request_type="prompt_build")
related_info += self.get_info_from_db(embedding, threshold=threshold)
related_info += self.get_info_from_db(embedding, limit=1, threshold=threshold)
return related_info