From c3e72de10e8b5d6d891085cc80a497adb27bb8d1 Mon Sep 17 00:00:00 2001 From: tt-P607 <68868379+tt-P607@users.noreply.github.com> Date: Sat, 23 Aug 2025 21:07:50 +0800 Subject: [PATCH] =?UTF-8?q?refactor(schedule):=20=E7=A7=BB=E9=99=A4?= =?UTF-8?q?=E6=97=A5=E7=A8=8B=E7=94=9F=E6=88=90=E7=9A=84=E7=BB=93=E6=9D=9F?= =?UTF-8?q?=E6=A0=87=E8=AE=B0=E5=92=8C=E7=9B=B8=E5=85=B3=E5=A4=84=E7=90=86?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 由于项目内置的LLM响应处理机制已能有效防止消息截断,原先为保证日程生成完整性而引入的`###SCHEDULE_END###`结束标记及其相关检查、清理逻辑已不再必要。 本次重构删除了以下内容: - Prompt中关于添加结束标记的指令 - `_check_response_completeness`方法 - `_clean_response`方法 - 生成循环中对结束标记的检查和清理调用 这简化了`ScheduleManager`的代码,使其更专注于核心的日程生成与验证逻辑,提高了代码的可读性和维护性。 --- src/manager/schedule_manager.py | 57 +++------------------------------ 1 file changed, 5 insertions(+), 52 deletions(-) diff --git a/src/manager/schedule_manager.py b/src/manager/schedule_manager.py index a9b20eccc..27d0d0e04 100644 --- a/src/manager/schedule_manager.py +++ b/src/manager/schedule_manager.py @@ -246,8 +246,6 @@ class ScheduleManager: 4. time_range格式必须为 "HH:MM-HH:MM" (24小时制) 5. 相邻的时间段必须连续,不能有间隙 6. 不要包含任何JSON以外的解释性文字或代码块标记 -7. **重要:必须在JSON数组的最后一个对象后面加上结束标记 "###SCHEDULE_END###"** - **示例**: [ {{"time_range": "00:00-07:00", "activity": "进入梦乡,处理数据"}}, @@ -255,9 +253,9 @@ class ScheduleManager: {{"time_range": "08:00-09:00", "activity": "享用早餐,规划今天的任务"}}, {{"time_range": "09:00-23:30", "activity": "其他活动"}}, {{"time_range": "23:30-00:00", "activity": "准备休眠"}} -]###SCHEDULE_END### +] -请你扮演我,以我的身份和口吻,为我生成一份完整的24小时日程表。记住最后一定要加上结束标记。 +请你扮演我,以我的身份和口吻,为我生成一份完整的24小时日程表。 """ # 无限重试直到生成成功的标准日程表 @@ -277,23 +275,14 @@ class ScheduleManager: - 确保JSON格式正确,所有时间段连续覆盖24小时 - 时间格式必须为HH:MM-HH:MM,不能有时间间隙或重叠 - 不要输出任何解释文字,只输出纯JSON数组 -- **必须在最后加上结束标记 "###SCHEDULE_END###",这很重要!** +- 确保输出完整,不要被截断 """ prompt += failure_hint response, _ = await self.llm.generate_response_async(prompt) - # 首先检查结束标记,确保消息没有被截断 - if not self._check_response_completeness(response): - logger.warning(f"第 {attempt} 次生成被截断(缺少结束标记),继续重试...") - await asyncio.sleep(2) - continue - - # 清理响应内容,移除结束标记 - cleaned_response = self._clean_response(response) - - # 尝试解析和验证JSON - schedule_data = json.loads(repair_json(cleaned_response)) + # 尝试解析和验证JSON(项目内置的反截断机制会自动处理截断问题) + schedule_data = json.loads(repair_json(response)) # 使用Pydantic验证生成的日程数据 if self._validate_schedule_with_pydantic(schedule_data): @@ -482,42 +471,6 @@ class ScheduleManager: return True - def _check_response_completeness(self, response: str) -> bool: - """检查响应是否完整(包含结束标记)""" - if not response or not response.strip(): - logger.warning("响应为空") - return False - - # 检查是否包含结束标记 - end_marker = "###SCHEDULE_END###" - if end_marker not in response: - logger.warning("响应缺少结束标记,可能被截断") - return False - - logger.debug("响应包含结束标记,消息完整") - return True - - def _clean_response(self, response: str) -> str: - """清理响应内容,移除结束标记和多余内容""" - if not response: - return response - - # 移除结束标记 - end_marker = "###SCHEDULE_END###" - if end_marker in response: - # 取结束标记之前的内容 - response = response.split(end_marker)[0] - - # 清理可能的多余空白 - response = response.strip() - - # 如果存在markdown代码块标记,清理掉 - if response.startswith("```json"): - response = response[7:] - if response.endswith("```"): - response = response[:-3] - - return response.strip() class DailyScheduleGenerationTask(AsyncTask):