feat(chatter_manager): 清理 processing_message_id 以防止重复回复检测失效

feat(distribution_manager): 添加子任务跟踪和取消逻辑,优化流处理
feat(default_generator): 优化 respond 和 reply 模式下的消息处理逻辑
feat(affinity_chatter): 处理取消异常时清理 processing_message_id
feat(planner): 确保在规划流程取消时清理 processing_message_id
This commit is contained in:
Windpicker-owo
2025-11-10 17:12:20 +08:00
parent dd43fccb94
commit 97fa09cada
5 changed files with 124 additions and 23 deletions

View File

@@ -103,10 +103,19 @@ class AffinityChatter(BaseChatter):
return result
except asyncio.CancelledError:
logger.info(f"亲和力聊天处理器 {self.stream_id} 处理被取消")
self.stats["failed_executions"] += 1
self.last_activity_time = time.time()
# 清理 processing_message_id
context.processing_message_id = None
raise
except Exception as e:
logger.error(f"亲和力聊天处理器 {self.stream_id} 处理StreamContext时出错: {e}\n{traceback.format_exc()}")
self.stats["failed_executions"] += 1
self.last_activity_time = time.time()
# 清理 processing_message_id
context.processing_message_id = None
return {
"success": False,

View File

@@ -78,9 +78,19 @@ class ChatterActionPlanner:
return await self._enhanced_plan_flow(context)
except asyncio.CancelledError:
logger.info(f"规划流程被取消: {self.chat_id}")
self.planner_stats["failed_plans"] += 1
# 确保清理 processing_message_id
if context:
context.processing_message_id = None
raise
except Exception as e:
logger.error(f"规划流程出错: {e}")
self.planner_stats["failed_plans"] += 1
# 确保清理 processing_message_id
if context:
context.processing_message_id = None
return [], None
async def _enhanced_plan_flow(self, context: "StreamContext | None") -> tuple[list[dict[str, Any]], Any | None]:
@@ -257,6 +267,13 @@ class ChatterActionPlanner:
# 14. 返回结果
return self._build_return_result(filtered_plan)
except asyncio.CancelledError:
logger.info(f"Focus模式流程被取消: {self.chat_id}")
self.planner_stats["failed_plans"] += 1
# 清理处理标记
if context:
context.processing_message_id = None
raise
except Exception as e:
logger.error(f"Focus模式流程出错: {e}")
self.planner_stats["failed_plans"] += 1
@@ -394,6 +411,13 @@ class ChatterActionPlanner:
return [asdict(no_action)], None
except asyncio.CancelledError:
logger.info(f"Normal模式流程被取消: {self.chat_id}")
self.planner_stats["failed_plans"] += 1
# 清理处理标记
if context:
context.processing_message_id = None
raise
except Exception as e:
logger.error(f"Normal模式 - 流程出错: {e}")
self.planner_stats["failed_plans"] += 1