refactor(planner): 根据focus_energy概率优化Focus模式切换到Normal模式的逻辑
This commit is contained in:
@@ -214,7 +214,7 @@ class ChatterActionPlanner:
|
|||||||
# 6. 根据执行结果更新统计信息
|
# 6. 根据执行结果更新统计信息
|
||||||
self._update_stats_from_execution_result(execution_result)
|
self._update_stats_from_execution_result(execution_result)
|
||||||
|
|
||||||
# 7. Focus模式下如果执行了reply动作,切换到Normal模式
|
# 7. Focus模式下如果执行了reply动作,根据focus_energy概率切换到Normal模式
|
||||||
if chat_mode == ChatMode.FOCUS and context:
|
if chat_mode == ChatMode.FOCUS and context:
|
||||||
if filtered_plan.decided_actions:
|
if filtered_plan.decided_actions:
|
||||||
has_reply = any(
|
has_reply = any(
|
||||||
@@ -224,9 +224,7 @@ class ChatterActionPlanner:
|
|||||||
else:
|
else:
|
||||||
has_reply = False
|
has_reply = False
|
||||||
if has_reply and global_config.affinity_flow.enable_normal_mode:
|
if has_reply and global_config.affinity_flow.enable_normal_mode:
|
||||||
logger.info("Focus模式: 执行了reply动作,自动切换到Normal模式")
|
await self._check_enter_normal_mode(context)
|
||||||
context.chat_mode = ChatMode.NORMAL
|
|
||||||
await self._sync_chat_mode_to_stream(context)
|
|
||||||
|
|
||||||
# 8. 清理处理标记
|
# 8. 清理处理标记
|
||||||
if context:
|
if context:
|
||||||
@@ -369,6 +367,44 @@ class ChatterActionPlanner:
|
|||||||
context.processing_message_id = None
|
context.processing_message_id = None
|
||||||
return [], None
|
return [], None
|
||||||
|
|
||||||
|
async def _check_enter_normal_mode(self, context: "StreamContext | None") -> None:
|
||||||
|
"""检查并执行进入Normal模式的判定
|
||||||
|
|
||||||
|
Args:
|
||||||
|
context: 流上下文
|
||||||
|
"""
|
||||||
|
if not context:
|
||||||
|
return
|
||||||
|
|
||||||
|
try:
|
||||||
|
from src.chat.message_receive.chat_stream import get_chat_manager
|
||||||
|
|
||||||
|
chat_manager = get_chat_manager()
|
||||||
|
chat_stream = await chat_manager.get_stream(self.chat_id) if chat_manager else None
|
||||||
|
|
||||||
|
if not chat_stream:
|
||||||
|
return
|
||||||
|
|
||||||
|
focus_energy = chat_stream.focus_energy
|
||||||
|
# focus_energy越高,进入normal模式的概率越高
|
||||||
|
# 使用正比例函数: 进入概率 = focus_energy
|
||||||
|
# 当focus_energy = 0.1时,进入概率 = 10%
|
||||||
|
# 当focus_energy = 0.5时,进入概率 = 50%
|
||||||
|
# 当focus_energy = 0.9时,进入概率 = 90%
|
||||||
|
enter_probability = focus_energy
|
||||||
|
|
||||||
|
import random
|
||||||
|
if random.random() < enter_probability:
|
||||||
|
logger.info(f"Focus模式: focus_energy={focus_energy:.3f}, 进入概率={enter_probability:.3f}, 切换到Normal模式")
|
||||||
|
# 切换到normal模式
|
||||||
|
context.chat_mode = ChatMode.NORMAL
|
||||||
|
await self._sync_chat_mode_to_stream(context)
|
||||||
|
else:
|
||||||
|
logger.debug(f"Focus模式: focus_energy={focus_energy:.3f}, 进入概率={enter_probability:.3f}, 保持Focus模式")
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
logger.warning(f"检查进入Normal模式失败: {e}")
|
||||||
|
|
||||||
async def _check_exit_normal_mode(self, context: "StreamContext | None") -> None:
|
async def _check_exit_normal_mode(self, context: "StreamContext | None") -> None:
|
||||||
"""检查并执行退出Normal模式的判定
|
"""检查并执行退出Normal模式的判定
|
||||||
|
|
||||||
@@ -397,12 +433,12 @@ class ChatterActionPlanner:
|
|||||||
|
|
||||||
import random
|
import random
|
||||||
if random.random() < exit_probability:
|
if random.random() < exit_probability:
|
||||||
logger.info(f"Normal模式: focus_energy={focus_energy:.3f}, 退出概率={exit_probability:.3f}, 切换回focus模式")
|
logger.info(f"Normal模式: focus_energy={focus_energy:.3f}, 退出概率={exit_probability:.3f}, 切换回Focus模式")
|
||||||
# 切换回focus模式
|
# 切换回focus模式
|
||||||
context.chat_mode = ChatMode.FOCUS
|
context.chat_mode = ChatMode.FOCUS
|
||||||
await self._sync_chat_mode_to_stream(context)
|
await self._sync_chat_mode_to_stream(context)
|
||||||
else:
|
else:
|
||||||
logger.debug(f"Normal模式: focus_energy={focus_energy:.3f}, 退出概率={exit_probability:.3f}, 保持normal模式")
|
logger.debug(f"Normal模式: focus_energy={focus_energy:.3f}, 退出概率={exit_probability:.3f}, 保持Normal模式")
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.warning(f"检查退出Normal模式失败: {e}")
|
logger.warning(f"检查退出Normal模式失败: {e}")
|
||||||
|
|||||||
Reference in New Issue
Block a user