fix: 修复merge错误

This commit is contained in:
tcmofashi
2025-03-28 14:20:27 +08:00
parent 2602cbbf96
commit 002955359f
3 changed files with 94 additions and 67 deletions

View File

@@ -8,10 +8,13 @@ from .plugins.chat.emoji_manager import emoji_manager
from .plugins.chat.relationship_manager import relationship_manager
from .plugins.willing.willing_manager import willing_manager
from .plugins.chat.chat_stream import chat_manager
from .plugins.memory_system.memory import hippocampus
from .plugins.memory_system.Hippocampus import HippocampusManager
from .plugins.chat import auto_speak_manager
from .think_flow_demo.heartflow import subheartflow_manager
from .think_flow_demo.outer_world import outer_world
from .plugins.chat.message_sender import message_manager
from .plugins.chat.storage import MessageStorage
from .plugins.chat.config import global_config
from .plugins.config.config import global_config
from .plugins.chat.bot import chat_bot
from .common.logger import get_module_logger
@@ -22,6 +25,7 @@ class MainSystem:
def __init__(self):
self.llm_stats = LLMStatistics("llm_statistics.txt")
self.mood_manager = MoodManager.get_instance()
self.hippocampus_manager = HippocampusManager.get_instance()
self._message_manager_started = False
# 使用消息API替代直接的FastAPI实例
@@ -34,10 +38,7 @@ class MainSystem:
logger.debug(f"正在唤醒{global_config.BOT_NICKNAME}......")
# 其他初始化任务
await asyncio.gather(
self._init_components(), # 将原有的初始化代码移到这个新方法中
# api_task,
)
await asyncio.gather(self._init_components())
logger.success("系统初始化完成")
@@ -70,24 +71,43 @@ class MainSystem:
await chat_manager._initialize()
asyncio.create_task(chat_manager._auto_save_task())
# 使用HippocampusManager初始化海马体
self.hippocampus_manager.initialize(global_config=global_config)
# 初始化日程
await bot_schedule.initialize()
bot_schedule.print_schedule()
bot_schedule.initialize(
name=global_config.BOT_NICKNAME,
personality=global_config.PROMPT_PERSONALITY,
behavior=global_config.PROMPT_SCHEDULE_GEN,
interval=global_config.SCHEDULE_DOING_UPDATE_INTERVAL,
)
asyncio.create_task(bot_schedule.mai_schedule_start())
# 启动FastAPI服务器
self.app.register_message_handler(chat_bot.message_process)
try:
asyncio.create_task(outer_world.open_eyes())
logger.success("大脑和外部世界启动成功")
# 启动心流系统
asyncio.create_task(subheartflow_manager.heartflow_start_working())
logger.success("心流系统启动成功")
except Exception as e:
logger.error(f"启动大脑和外部世界失败: {e}")
raise
async def schedule_tasks(self):
"""调度定时任务"""
while True:
tasks = [
self.build_memory_task(),
self.forget_memory_task(),
self.merge_memory_task(),
# self.merge_memory_task(),
self.print_mood_task(),
self.generate_schedule_task(),
# self.generate_schedule_task(),
self.remove_recalled_message_task(),
emoji_manager.start_periodic_check(interval_MINS=global_config.EMOJI_CHECK_INTERVAL),
emoji_manager.start_periodic_check(),
self.app.run(),
]
await asyncio.gather(*tasks)
@@ -96,22 +116,22 @@ class MainSystem:
"""记忆构建任务"""
while True:
logger.info("正在进行记忆构建")
await hippocampus.operation_build_memory()
await HippocampusManager.get_instance().build_memory()
await asyncio.sleep(global_config.build_memory_interval)
async def forget_memory_task(self):
"""记忆遗忘任务"""
while True:
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 记忆遗忘完成")
await asyncio.sleep(global_config.forget_memory_interval)
async def merge_memory_task(self):
"""记忆整合任务"""
while True:
logger.info("正在进行记忆整合")
await asyncio.sleep(global_config.build_memory_interval + 10)
# async def merge_memory_task(self):
# """记忆整合任务"""
# while True:
# logger.info("正在进行记忆整合")
# await asyncio.sleep(global_config.build_memory_interval + 10)
async def print_mood_task(self):
"""打印情绪状态"""
@@ -119,13 +139,13 @@ class MainSystem:
self.mood_manager.print_mood_status()
await asyncio.sleep(30)
async def generate_schedule_task(self):
"""生成日程任务"""
while True:
await bot_schedule.initialize()
if not bot_schedule.enable_output:
bot_schedule.print_schedule()
await asyncio.sleep(7200)
# async def generate_schedule_task(self):
# """生成日程任务"""
# while True:
# await bot_schedule.initialize()
# if not bot_schedule.enable_output:
# bot_schedule.print_schedule()
# await asyncio.sleep(7200)
async def remove_recalled_message_task(self):
"""删除撤回消息任务"""

View File

@@ -8,7 +8,6 @@ from .chat.emoji_manager import emoji_manager
from .chat.relationship_manager import relationship_manager
from .moods.moods import MoodManager
from .willing.willing_manager import willing_manager
from .memory_system.Hippocampus import HippocampusManager
from .schedule.schedule_generator import bot_schedule
# 导出主要组件供外部使用

View File

@@ -5,15 +5,17 @@ from random import random as random_float
from typing import Dict
from ..config.config import global_config
from .message import MessageSending, MessageThinking, MessageSet, MessageRecv
from .message_base import UserInfo, Seg
from ..message.message_base import UserInfo, Seg
from .message_sender import message_manager
from ..moods.moods import MoodManager
from .llm_generator import ResponseGenerator
from src.common.logger import get_module_logger
from src.think_flow_demo.heartflow import subheartflow_manager
from ...common.database import db
logger = get_module_logger("auto_speak")
class AutoSpeakManager:
def __init__(self):
self._last_auto_speak_time: Dict[str, float] = {} # 记录每个聊天流上次自主发言的时间
@@ -38,13 +40,16 @@ class AutoSpeakManager:
async def _periodic_check(self):
"""定期检查是否需要自主发言"""
while True and global_config.enable_think_flow:
# 获取所有活跃的子心流
active_subheartflows = []
for chat_id, subheartflow in subheartflow_manager._subheartflows.items():
if subheartflow.is_active and subheartflow.current_state.willing > 0: # 只考虑活跃且意愿值大于0.5的子心流
if (
subheartflow.is_active and subheartflow.current_state.willing > 0
): # 只考虑活跃且意愿值大于0.5的子心流
active_subheartflows.append((chat_id, subheartflow))
logger.debug(f"发现活跃子心流 - 聊天ID: {chat_id}, 意愿值: {subheartflow.current_state.willing:.2f}")
logger.debug(
f"发现活跃子心流 - 聊天ID: {chat_id}, 意愿值: {subheartflow.current_state.willing:.2f}"
)
if not active_subheartflows:
logger.debug("当前没有活跃的子心流")
@@ -66,23 +71,23 @@ class AutoSpeakManager:
)
# 创建一个空的MessageRecv对象作为上下文
message = MessageRecv({
message = MessageRecv(
{
"message_info": {
"user_info": {
"user_id": chat_id,
"user_nickname": "",
"platform": "qq"
},
"user_info": {"user_id": chat_id, "user_nickname": "", "platform": "qq"},
"group_info": None,
"platform": "qq",
"time": time.time()
"time": time.time(),
},
"processed_plain_text": "",
"raw_message": "",
"is_emoji": False
})
"is_emoji": False,
}
)
await self.generate_auto_speak(subheartflow, message, bot_user_info, message.message_info["user_info"], message.message_info)
await self.generate_auto_speak(
subheartflow, message, bot_user_info, message.message_info["user_info"], message.message_info
)
else:
logger.debug(f"不满足自主发言条件 - 聊天ID: {chat_id}")
@@ -106,7 +111,9 @@ class AutoSpeakManager:
# 如果距离上次自主发言不到5分钟不发言
if current_time - last_speak_time < 30:
logger.debug(f"距离上次发言时间太短 - 聊天ID: {chat_id}, 剩余时间: {30 - (current_time - last_speak_time):.1f}")
logger.debug(
f"距离上次发言时间太短 - 聊天ID: {chat_id}, 剩余时间: {30 - (current_time - last_speak_time):.1f}"
)
return False
# 获取当前意愿值
@@ -168,5 +175,6 @@ class AutoSpeakManager:
return False
# 创建全局AutoSpeakManager实例
auto_speak_manager = AutoSpeakManager()