157 lines
5.5 KiB
Python
157 lines
5.5 KiB
Python
import asyncio
|
|
import time
|
|
from .plugins.utils.statistic import LLMStatistics
|
|
from .plugins.moods.moods import MoodManager
|
|
from .plugins.schedule.schedule_generator import bot_schedule
|
|
from .plugins.chat.emoji_manager import emoji_manager
|
|
from .plugins.relationship.relationship_manager import relationship_manager
|
|
from .plugins.willing.willing_manager import willing_manager
|
|
from .plugins.chat.chat_stream import chat_manager
|
|
from .heart_flow.heartflow import heartflow
|
|
from .plugins.memory_system.Hippocampus import HippocampusManager
|
|
from .plugins.chat.message_sender import message_manager
|
|
from .plugins.storage.storage import MessageStorage
|
|
from .plugins.config.config import global_config
|
|
from .plugins.chat.bot import chat_bot
|
|
from .common.logger import get_module_logger
|
|
from .plugins.remote import heartbeat_thread # noqa: F401
|
|
|
|
|
|
logger = get_module_logger("main")
|
|
|
|
|
|
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实例
|
|
from .plugins.message import global_api
|
|
|
|
self.app = global_api
|
|
|
|
async def initialize(self):
|
|
"""初始化系统组件"""
|
|
logger.debug(f"正在唤醒{global_config.BOT_NICKNAME}......")
|
|
|
|
# 其他初始化任务
|
|
await asyncio.gather(self._init_components())
|
|
|
|
logger.success("系统初始化完成")
|
|
|
|
async def _init_components(self):
|
|
"""初始化其他组件"""
|
|
init_start_time = time.time()
|
|
# 启动LLM统计
|
|
self.llm_stats.start()
|
|
logger.success("LLM统计功能启动成功")
|
|
|
|
# 初始化表情管理器
|
|
emoji_manager.initialize()
|
|
|
|
# 启动情绪管理器
|
|
self.mood_manager.start_mood_update(update_interval=global_config.mood_update_interval)
|
|
logger.success("情绪管理器启动成功")
|
|
|
|
# 加载用户关系
|
|
await relationship_manager.load_all_relationships()
|
|
asyncio.create_task(relationship_manager._start_relationship_manager())
|
|
|
|
# 启动愿望管理器
|
|
await willing_manager.ensure_started()
|
|
|
|
# 启动消息处理器
|
|
if not self._message_manager_started:
|
|
asyncio.create_task(message_manager.start_processor())
|
|
self._message_manager_started = True
|
|
|
|
# 初始化聊天管理器
|
|
await chat_manager._initialize()
|
|
asyncio.create_task(chat_manager._auto_save_task())
|
|
|
|
# 使用HippocampusManager初始化海马体
|
|
self.hippocampus_manager.initialize(global_config=global_config)
|
|
# await asyncio.sleep(0.5) #防止logger输出飞了
|
|
|
|
# 初始化日程
|
|
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(heartflow.heartflow_start_working())
|
|
logger.success("心流系统启动成功")
|
|
|
|
init_time = int(1000 * (time.time() - init_start_time))
|
|
logger.success(f"初始化完成,神经元放电{init_time}次")
|
|
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.print_mood_task(),
|
|
self.remove_recalled_message_task(),
|
|
emoji_manager.start_periodic_check(),
|
|
self.app.run(),
|
|
]
|
|
await asyncio.gather(*tasks)
|
|
|
|
async def build_memory_task(self):
|
|
"""记忆构建任务"""
|
|
while True:
|
|
logger.info("正在进行记忆构建")
|
|
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 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 print_mood_task(self):
|
|
"""打印情绪状态"""
|
|
while True:
|
|
self.mood_manager.print_mood_status()
|
|
await asyncio.sleep(30)
|
|
|
|
async def remove_recalled_message_task(self):
|
|
"""删除撤回消息任务"""
|
|
while True:
|
|
try:
|
|
storage = MessageStorage()
|
|
await storage.remove_recalled_message(time.time())
|
|
except Exception:
|
|
logger.exception("删除撤回消息失败")
|
|
await asyncio.sleep(3600)
|
|
|
|
|
|
async def main():
|
|
"""主函数"""
|
|
system = MainSystem()
|
|
await asyncio.gather(
|
|
system.initialize(),
|
|
system.schedule_tasks(),
|
|
)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
asyncio.run(main())
|