From 6db29c8e451491949745706b7aa2dc9e60ef768e Mon Sep 17 00:00:00 2001 From: HYY1116 Date: Wed, 5 Mar 2025 21:39:12 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E5=B0=9D=E8=AF=95=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E6=97=A5=E7=A8=8B=E5=87=BA=E9=94=99=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/plugins/schedule/schedule_generator.py | 45 +++++++++++----------- 1 file changed, 22 insertions(+), 23 deletions(-) diff --git a/src/plugins/schedule/schedule_generator.py b/src/plugins/schedule/schedule_generator.py index 93bb04137..7afa5e7ba 100644 --- a/src/plugins/schedule/schedule_generator.py +++ b/src/plugins/schedule/schedule_generator.py @@ -1,12 +1,12 @@ import datetime import os -from typing import List, Dict +from typing import List, Dict, Union from ...common.database import Database # 使用正确的导入语法 from src.plugins.chat.config import global_config from nonebot import get_driver from ..models.utils_model import LLM_request from loguru import logger - +import json driver = get_driver() config = driver.config @@ -58,19 +58,20 @@ class ScheduleGenerator: elif read_only == False: print(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. 晚上的计划和休息时间 - 请按照时间顺序列出具体时间点和对应的活动,用一个时间点而不是时间段来表示时间,用逗号,隔开时间与活动,格式为"时间,活动",例如"08:00,起床"。""" + 请按照时间顺序列出具体时间点和对应的活动,用一个时间点而不是时间段来表示时间,用JSON格式返回日程表,仅返回内容,不要返回注释,时间采用24小时制,格式为{"时间": "活动","时间": "活动",...}。""" try: schedule_text, _ = await self.llm_scheduler.generate_response(prompt) + self.db.db.schedule.insert_one({"date": date_str, "schedule": schedule_text}) except Exception as e: logger.error(f"生成日程失败: {str(e)}") schedule_text = "生成日程时出错了" # print(self.schedule_text) - self.db.db.schedule.insert_one({"date": date_str, "schedule": schedule_text}) else: print(f"{date_str}的日程不存在。") schedule_text = "忘了" @@ -80,20 +81,15 @@ class ScheduleGenerator: schedule_form = self._parse_schedule(schedule_text) return schedule_text,schedule_form - def _parse_schedule(self, schedule_text: str) -> Dict[str, str]: + def _parse_schedule(self, schedule_text: str) -> Union[bool, Dict[str, str]]: """解析日程文本,转换为时间和活动的字典""" - schedule_dict = {} - # 按行分割日程文本 - lines = schedule_text.strip().split('\n') - for line in lines: - # print(line) - if ',' in line: - # 假设格式为 "时间: 活动" - time_str, activity = line.split(',', 1) - # print(time_str) - # print(activity) - schedule_dict[time_str.strip()] = activity.strip() - return schedule_dict + try: + schedule_dict = json.loads(schedule_text) + return schedule_dict + except json.JSONDecodeError as e: + print(schedule_text) + print(f"解析日程失败: {str(e)}") + return False def _parse_time(self, time_str: str) -> str: """解析时间字符串,转换为时间""" @@ -148,11 +144,14 @@ class ScheduleGenerator: def print_schedule(self): """打印完整的日程安排""" - - print("\n=== 今日日程安排 ===") - for time_str, activity in self.today_schedule.items(): - print(f"时间[{time_str}]: 活动[{activity}]") - print("==================\n") + if not self._parse_schedule(self.today_schedule_text): + print("今日日程有误,将在下次运行时重新生成") + self.db.db.schedule.delete_one({"date": datetime.datetime.now().strftime("%Y-%m-%d")}) + else: + print("\n=== 今日日程安排 ===") + for time_str, activity in self.today_schedule.items(): + print(f"时间[{time_str}]: 活动[{activity}]") + print("==================\n") # def main(): # # 使用示例