refactor(schedule): 移除日程生成的结束标记和相关处理逻辑
由于项目内置的LLM响应处理机制已能有效防止消息截断,原先为保证日程生成完整性而引入的`###SCHEDULE_END###`结束标记及其相关检查、清理逻辑已不再必要。 本次重构删除了以下内容: - Prompt中关于添加结束标记的指令 - `_check_response_completeness`方法 - `_clean_response`方法 - 生成循环中对结束标记的检查和清理调用 这简化了`ScheduleManager`的代码,使其更专注于核心的日程生成与验证逻辑,提高了代码的可读性和维护性。
This commit is contained in:
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user