refactor(schedule): 移除日程生成的结束标记和相关处理逻辑

由于项目内置的LLM响应处理机制已能有效防止消息截断,原先为保证日程生成完整性而引入的`###SCHEDULE_END###`结束标记及其相关检查、清理逻辑已不再必要。

本次重构删除了以下内容:
- Prompt中关于添加结束标记的指令
- `_check_response_completeness`方法
- `_clean_response`方法
- 生成循环中对结束标记的检查和清理调用

这简化了`ScheduleManager`的代码,使其更专注于核心的日程生成与验证逻辑,提高了代码的可读性和维护性。
This commit is contained in:
tt-P607
2025-08-23 21:07:50 +08:00
parent 006c305450
commit 0b4e91b835

View File

@@ -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):