This commit is contained in:
SengokuCola
2025-04-26 13:29:04 +08:00
parent 2b721e70ee
commit 0e03c2e492
5 changed files with 32 additions and 27 deletions

View File

@@ -246,7 +246,9 @@ class InterestMonitorApp:
self.stream_sub_minds[stream_id] = subflow_entry.get("sub_mind", "N/A") self.stream_sub_minds[stream_id] = subflow_entry.get("sub_mind", "N/A")
self.stream_chat_states[stream_id] = subflow_entry.get("sub_chat_state", "N/A") self.stream_chat_states[stream_id] = subflow_entry.get("sub_chat_state", "N/A")
self.stream_threshold_status[stream_id] = subflow_entry.get("is_above_threshold", False) self.stream_threshold_status[stream_id] = subflow_entry.get("is_above_threshold", False)
self.stream_last_active[stream_id] = subflow_entry.get("last_changed_state_time") # 存储原始时间戳 self.stream_last_active[stream_id] = subflow_entry.get(
"last_changed_state_time"
) # 存储原始时间戳
self.stream_last_interaction[stream_id] = subflow_entry.get( self.stream_last_interaction[stream_id] = subflow_entry.get(
"last_interaction_time" "last_interaction_time"
) # 存储原始时间戳 ) # 存储原始时间戳

View File

@@ -244,8 +244,6 @@ class BackgroundTaskManager:
# 记录最终清理结果 # 记录最终清理结果
logger.info(f"[清理任务] 清理完成, 共停止 {stopped_count}/{len(flows_to_stop)} 个子心流") logger.info(f"[清理任务] 清理完成, 共停止 {stopped_count}/{len(flows_to_stop)} 个子心流")
async def _perform_logging_work(self): async def _perform_logging_work(self):
"""执行一轮状态日志记录。""" """执行一轮状态日志记录。"""
await self.interest_logger.log_all_states() await self.interest_logger.log_all_states()

View File

@@ -80,7 +80,6 @@ class Heartflow:
# 不再需要传入 self.current_state # 不再需要传入 self.current_state
return await self.subheartflow_manager.get_or_create_subheartflow(subheartflow_id) return await self.subheartflow_manager.get_or_create_subheartflow(subheartflow_id)
async def heartflow_start_working(self): async def heartflow_start_working(self):
"""启动后台任务""" """启动后台任务"""
await self.background_task_manager.start_tasks() await self.background_task_manager.start_tasks()

View File

@@ -2,7 +2,7 @@ from .observation import Observation, ChattingObservation
import asyncio import asyncio
from src.config.config import global_config from src.config.config import global_config
import time import time
from typing import Optional, List, Dict, Callable, Tuple from typing import Optional, List, Dict, Tuple
import traceback import traceback
from src.common.logger import get_module_logger, LogConfig, SUB_HEARTFLOW_STYLE_CONFIG # noqa: E402 from src.common.logger import get_module_logger, LogConfig, SUB_HEARTFLOW_STYLE_CONFIG # noqa: E402
import random import random
@@ -85,7 +85,6 @@ class InterestChatting:
self.update_task = asyncio.create_task(self._run_update_loop(self.update_interval)) self.update_task = asyncio.create_task(self._run_update_loop(self.update_interval))
logger.debug("后台兴趣更新任务已创建并启动。") logger.debug("后台兴趣更新任务已创建并启动。")
def add_interest_dict(self, message: MessageRecv, interest_value: float, is_mentioned: bool): def add_interest_dict(self, message: MessageRecv, interest_value: float, is_mentioned: bool):
self.interest_dict[message.message_info.message_id] = (message, interest_value, is_mentioned) self.interest_dict[message.message_info.message_id] = (message, interest_value, is_mentioned)
self.last_interaction_time = time.time() self.last_interaction_time = time.time()
@@ -185,7 +184,6 @@ class InterestChatting:
self._is_running = False self._is_running = False
logger.info("InterestChatting 更新循环已停止。") logger.info("InterestChatting 更新循环已停止。")
async def stop_updates(self): async def stop_updates(self):
"""停止后台更新任务,使用锁确保并发安全""" """停止后台更新任务,使用锁确保并发安全"""
async with self._task_lock: async with self._task_lock:
@@ -409,7 +407,9 @@ class SubHeartflow:
self.update_last_chat_state_time() self.update_last_chat_state_time()
self.history_chat_state.append((current_state, self.chat_state_last_time)) self.history_chat_state.append((current_state, self.chat_state_last_time))
logger.info(f"{log_prefix} 麦麦的聊天状态从 {current_state.value} (持续了 {self.chat_state_last_time} 秒) 变更为 {new_state.value}") logger.info(
f"{log_prefix} 麦麦的聊天状态从 {current_state.value} (持续了 {self.chat_state_last_time} 秒) 变更为 {new_state.value}"
)
self.chat_state.chat_status = new_state self.chat_state.chat_status = new_state
self.chat_state_last_time = 0 self.chat_state_last_time = 0

View File

@@ -11,7 +11,7 @@ from src.plugins.chat.chat_stream import chat_manager
# 导入心流相关类 # 导入心流相关类
from src.heart_flow.sub_heartflow import SubHeartflow, ChatState from src.heart_flow.sub_heartflow import SubHeartflow, ChatState
from src.heart_flow.mai_state_manager import MaiState, MaiStateInfo from src.heart_flow.mai_state_manager import MaiStateInfo
from .observation import ChattingObservation from .observation import ChattingObservation
# 初始化日志记录器 # 初始化日志记录器
@@ -38,9 +38,7 @@ class SubHeartflowManager:
"""获取所有当前管理的 SubHeartflow 实例列表 (快照)。""" """获取所有当前管理的 SubHeartflow 实例列表 (快照)。"""
return list(self.subheartflows.values()) return list(self.subheartflows.values())
async def get_or_create_subheartflow( async def get_or_create_subheartflow(self, subheartflow_id: Any) -> Optional["SubHeartflow"]:
self, subheartflow_id: Any
) -> Optional["SubHeartflow"]:
"""获取或创建指定ID的子心流实例 """获取或创建指定ID的子心流实例
Args: Args:
@@ -251,21 +249,30 @@ class SubHeartflowManager:
# 再次检查子心流是否仍然存在于管理器中,以防万一在迭代过程中被移除 # 再次检查子心流是否仍然存在于管理器中,以防万一在迭代过程中被移除
if subflow.chat_state.chat_status != ChatState.ABSENT: if subflow.chat_state.chat_status != ChatState.ABSENT:
logger.debug(f"正在将子心流 {stream_name} 的状态从 {subflow.chat_state.chat_status.value} 更改为 ABSENT") logger.debug(
f"正在将子心流 {stream_name} 的状态从 {subflow.chat_state.chat_status.value} 更改为 ABSENT"
)
try: try:
# 调用 change_chat_state 将状态设置为 ABSENT # 调用 change_chat_state 将状态设置为 ABSENT
await subflow.change_chat_state(ChatState.ABSENT) await subflow.change_chat_state(ChatState.ABSENT)
# 验证状态是否真的改变了 # 验证状态是否真的改变了
if flow_id in self.subheartflows and self.subheartflows[flow_id].chat_state.chat_status == ChatState.ABSENT: if (
flow_id in self.subheartflows
and self.subheartflows[flow_id].chat_state.chat_status == ChatState.ABSENT
):
changed_count += 1 changed_count += 1
else: else:
logger.warning(f"[停用] 尝试更改子心流 {stream_name} 状态后,状态仍未变为 ABSENT 或子心流已消失。") logger.warning(
f"[停用] 尝试更改子心流 {stream_name} 状态后,状态仍未变为 ABSENT 或子心流已消失。"
)
except Exception as e: except Exception as e:
logger.error(f"[停用] 更改子心流 {stream_name} 状态为 ABSENT 时出错: {e}", exc_info=True) logger.error(f"[停用] 更改子心流 {stream_name} 状态为 ABSENT 时出错: {e}", exc_info=True)
else: else:
logger.debug(f"[停用] 子心流 {stream_name} 已处于 ABSENT 状态,无需更改。") logger.debug(f"[停用] 子心流 {stream_name} 已处于 ABSENT 状态,无需更改。")
logger.info(f"下限完成,共处理 {len(flows_to_update)} 个子心流,成功将 {changed_count} 个子心流的状态更改为 ABSENT。") logger.info(
f"下限完成,共处理 {len(flows_to_update)} 个子心流,成功将 {changed_count} 个子心流的状态更改为 ABSENT。"
)
async def evaluate_interest_and_promote(self): async def evaluate_interest_and_promote(self):
"""评估子心流兴趣度满足条件且未达上限则提升到FOCUSED状态基于start_hfc_probability""" """评估子心流兴趣度满足条件且未达上限则提升到FOCUSED状态基于start_hfc_probability"""
@@ -440,4 +447,3 @@ class SubHeartflowManager:
logger.error(f"删除 SubHeartflow {subheartflow_id} 时出错: {e}", exc_info=True) logger.error(f"删除 SubHeartflow {subheartflow_id} 时出错: {e}", exc_info=True)
else: else:
logger.warning(f"尝试删除不存在的 SubHeartflow: {subheartflow_id}") logger.warning(f"尝试删除不存在的 SubHeartflow: {subheartflow_id}")