From 024bd1e649cff74b31e2738944c238261dcf1b41 Mon Sep 17 00:00:00 2001 From: UnCLAS-Prommer Date: Thu, 13 Mar 2025 15:51:39 +0800 Subject: [PATCH] =?UTF-8?q?=E8=87=AA=E5=8A=A8=E6=97=A5=E7=A8=8B=E7=94=9F?= =?UTF-8?q?=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/plugins/chat/__init__.py | 18 ++++++++---- src/plugins/schedule/schedule_generator.py | 33 ++++++++++++++-------- 2 files changed, 35 insertions(+), 16 deletions(-) diff --git a/src/plugins/chat/__init__.py b/src/plugins/chat/__init__.py index d7a7bd7e4..da925bf38 100644 --- a/src/plugins/chat/__init__.py +++ b/src/plugins/chat/__init__.py @@ -4,7 +4,7 @@ import os from loguru import logger from nonebot import get_driver, on_message, require -from nonebot.adapters.onebot.v11 import Bot, GroupMessageEvent, Message, MessageSegment,MessageEvent +from nonebot.adapters.onebot.v11 import Bot, GroupMessageEvent, Message, MessageSegment, MessageEvent from nonebot.typing import T_State from ..moods.moods import MoodManager # 导入情绪管理器 @@ -99,15 +99,14 @@ async def _(bot: Bot, event: MessageEvent, state: T_State): @scheduler.scheduled_job("interval", seconds=global_config.build_memory_interval, id="build_memory") async def build_memory_task(): """每build_memory_interval秒执行一次记忆构建""" - logger.debug( - "[记忆构建]" - "------------------------------------开始构建记忆--------------------------------------") + logger.debug("[记忆构建]------------------------------------开始构建记忆--------------------------------------") start_time = time.time() await hippocampus.operation_build_memory(chat_size=20) end_time = time.time() logger.success( f"[记忆构建]--------------------------记忆构建完成:耗时: {end_time - start_time:.2f} " - "秒-------------------------------------------") + "秒-------------------------------------------" + ) @scheduler.scheduled_job("interval", seconds=global_config.forget_memory_interval, id="forget_memory") @@ -131,3 +130,12 @@ async def print_mood_task(): """每30秒打印一次情绪状态""" mood_manager = MoodManager.get_instance() mood_manager.print_mood_status() + + +@scheduler.scheduled_job("interval", seconds=30, id="generate_schedule") +async def generate_schedule_task(): + """每2小时尝试生成一次日程""" + logger.debug("尝试生成日程") + await bot_schedule.initialize() + if not bot_schedule.enable_output: + bot_schedule.print_schedule() diff --git a/src/plugins/schedule/schedule_generator.py b/src/plugins/schedule/schedule_generator.py index 5f62d6aca..2f96f3531 100644 --- a/src/plugins/schedule/schedule_generator.py +++ b/src/plugins/schedule/schedule_generator.py @@ -14,7 +14,10 @@ from ..models.utils_model import LLM_request driver = get_driver() config = driver.config + class ScheduleGenerator: + enable_output: bool = True + def __init__(self): # 根据global_config.llm_normal这一字典配置指定模型 # self.llm_scheduler = LLMModel(model = global_config.llm_normal,temperature=0.9) @@ -32,14 +35,16 @@ class ScheduleGenerator: yesterday = datetime.datetime.now() - datetime.timedelta(days=1) self.today_schedule_text, self.today_schedule = await self.generate_daily_schedule(target_date=today) - self.tomorrow_schedule_text, self.tomorrow_schedule = await self.generate_daily_schedule(target_date=tomorrow, - read_only=True) + self.tomorrow_schedule_text, self.tomorrow_schedule = await self.generate_daily_schedule( + target_date=tomorrow, read_only=True + ) self.yesterday_schedule_text, self.yesterday_schedule = await self.generate_daily_schedule( - target_date=yesterday, read_only=True) - - async def generate_daily_schedule(self, target_date: datetime.datetime = None, read_only: bool = False) -> Dict[ - str, str]: + target_date=yesterday, read_only=True + ) + async def generate_daily_schedule( + self, target_date: datetime.datetime = None, read_only: bool = False + ) -> Dict[str, str]: date_str = target_date.strftime("%Y-%m-%d") weekday = target_date.strftime("%A") @@ -47,28 +52,33 @@ class ScheduleGenerator: existing_schedule = db.schedule.find_one({"date": date_str}) if existing_schedule: - logger.debug(f"{date_str}的日程已存在:") + if self.enable_output: + logger.debug(f"{date_str}的日程已存在:") schedule_text = existing_schedule["schedule"] # print(self.schedule_text) elif not read_only: logger.debug(f"{date_str}的日程不存在,准备生成新的日程。") - prompt = f"""我是{global_config.BOT_NICKNAME},{global_config.PROMPT_SCHEDULE_GEN},请为我生成{date_str}({weekday})的日程安排,包括:""" + \ - """ + prompt = ( + f"""我是{global_config.BOT_NICKNAME},{global_config.PROMPT_SCHEDULE_GEN},请为我生成{date_str}({weekday})的日程安排,包括:""" + + """ 1. 早上的学习和工作安排 2. 下午的活动和任务 3. 晚上的计划和休息时间 请按照时间顺序列出具体时间点和对应的活动,用一个时间点而不是时间段来表示时间,用JSON格式返回日程表,仅返回内容,不要返回注释,不要添加任何markdown或代码块样式,时间采用24小时制,格式为{"时间": "活动","时间": "活动",...}。""" + ) try: schedule_text, _ = await self.llm_scheduler.generate_response(prompt) db.schedule.insert_one({"date": date_str, "schedule": schedule_text}) + self.enable_output = True except Exception as e: logger.error(f"生成日程失败: {str(e)}") schedule_text = "生成日程时出错了" # print(self.schedule_text) else: - logger.debug(f"{date_str}的日程不存在。") + if self.enable_output: + logger.debug(f"{date_str}的日程不存在。") schedule_text = "忘了" return schedule_text, None @@ -95,7 +105,7 @@ class ScheduleGenerator: # 找到最接近当前时间的任务 closest_time = None - min_diff = float('inf') + min_diff = float("inf") # 检查今天的日程 if not self.today_schedule: @@ -148,6 +158,7 @@ class ScheduleGenerator: for time_str, activity in self.today_schedule.items(): logger.info(f"时间[{time_str}]: 活动[{activity}]") logger.info("==================") + self.enable_output = False # def main():