fix:修复状态没有及时转移,和概率可能为负的BUG
This commit is contained in:
@@ -37,13 +37,13 @@ class MaiState(enum.Enum):
|
|||||||
return 1000
|
return 1000
|
||||||
|
|
||||||
if self == MaiState.OFFLINE:
|
if self == MaiState.OFFLINE:
|
||||||
return 0
|
return 10
|
||||||
elif self == MaiState.PEEKING:
|
elif self == MaiState.PEEKING:
|
||||||
return 2
|
return 30
|
||||||
elif self == MaiState.NORMAL_CHAT:
|
elif self == MaiState.NORMAL_CHAT:
|
||||||
return 3
|
return 40
|
||||||
elif self == MaiState.FOCUSED_CHAT:
|
elif self == MaiState.FOCUSED_CHAT:
|
||||||
return 2
|
return 30
|
||||||
|
|
||||||
def get_focused_chat_max_num(self):
|
def get_focused_chat_max_num(self):
|
||||||
# 调试用
|
# 调试用
|
||||||
@@ -51,13 +51,13 @@ class MaiState(enum.Enum):
|
|||||||
return 1000
|
return 1000
|
||||||
|
|
||||||
if self == MaiState.OFFLINE:
|
if self == MaiState.OFFLINE:
|
||||||
return 0
|
return 10
|
||||||
elif self == MaiState.PEEKING:
|
elif self == MaiState.PEEKING:
|
||||||
return 1
|
return 20
|
||||||
elif self == MaiState.NORMAL_CHAT:
|
elif self == MaiState.NORMAL_CHAT:
|
||||||
return 1
|
return 30
|
||||||
elif self == MaiState.FOCUSED_CHAT:
|
elif self == MaiState.FOCUSED_CHAT:
|
||||||
return 3
|
return 40
|
||||||
|
|
||||||
|
|
||||||
class MaiStateInfo:
|
class MaiStateInfo:
|
||||||
|
|||||||
@@ -151,8 +151,8 @@ class InterestChatting:
|
|||||||
if self.above_threshold:
|
if self.above_threshold:
|
||||||
self.start_hfc_probability += 0.1
|
self.start_hfc_probability += 0.1
|
||||||
else:
|
else:
|
||||||
if self.start_hfc_probability != 0:
|
if self.start_hfc_probability > 0:
|
||||||
self.start_hfc_probability -= 0.1
|
self.start_hfc_probability = max(0, self.start_hfc_probability - 0.1)
|
||||||
|
|
||||||
async def increase_interest(self, value: float):
|
async def increase_interest(self, value: float):
|
||||||
self.interest_level += value
|
self.interest_level += value
|
||||||
@@ -170,7 +170,7 @@ class InterestChatting:
|
|||||||
return {
|
return {
|
||||||
"interest_level": round(interest, 2),
|
"interest_level": round(interest, 2),
|
||||||
"start_hfc_probability": round(self.start_hfc_probability, 4),
|
"start_hfc_probability": round(self.start_hfc_probability, 4),
|
||||||
"is_above_threshold": self.is_above_threshold,
|
"above_threshold": self.above_threshold,
|
||||||
}
|
}
|
||||||
|
|
||||||
async def should_evaluate_reply(self) -> bool:
|
async def should_evaluate_reply(self) -> bool:
|
||||||
|
|||||||
@@ -267,6 +267,7 @@ class SubHeartflowManager:
|
|||||||
# 使用 self.mai_state_info 获取当前状态和限制
|
# 使用 self.mai_state_info 获取当前状态和限制
|
||||||
current_state = self.mai_state_info.get_current_state()
|
current_state = self.mai_state_info.get_current_state()
|
||||||
focused_limit = current_state.get_focused_chat_max_num()
|
focused_limit = current_state.get_focused_chat_max_num()
|
||||||
|
|
||||||
logger.debug(f"{log_prefix} 当前状态 ({current_state.value}) 开始尝试提升到FOCUSED状态")
|
logger.debug(f"{log_prefix} 当前状态 ({current_state.value}) 开始尝试提升到FOCUSED状态")
|
||||||
|
|
||||||
if int(time.time()) % 20 == 0: # 每20秒输出一次
|
if int(time.time()) % 20 == 0: # 每20秒输出一次
|
||||||
@@ -285,6 +286,8 @@ class SubHeartflowManager:
|
|||||||
flow_id = sub_hf.subheartflow_id
|
flow_id = sub_hf.subheartflow_id
|
||||||
stream_name = chat_manager.get_stream_name(flow_id) or flow_id
|
stream_name = chat_manager.get_stream_name(flow_id) or flow_id
|
||||||
|
|
||||||
|
logger.debug(f"{log_prefix} 检查子心流: {stream_name},现在状态: {sub_hf.chat_state.chat_status.value}")
|
||||||
|
|
||||||
# 跳过非CHAT状态或已经是FOCUSED状态的子心流
|
# 跳过非CHAT状态或已经是FOCUSED状态的子心流
|
||||||
if sub_hf.chat_state.chat_status == ChatState.FOCUSED:
|
if sub_hf.chat_state.chat_status == ChatState.FOCUSED:
|
||||||
continue
|
continue
|
||||||
@@ -296,6 +299,7 @@ class SubHeartflowManager:
|
|||||||
continue
|
continue
|
||||||
|
|
||||||
# 检查是否满足提升概率
|
# 检查是否满足提升概率
|
||||||
|
logger.debug(f"{log_prefix} 检查子心流: {stream_name},现在概率: {sub_hf.interest_chatting.start_hfc_probability}")
|
||||||
if random.random() >= sub_hf.interest_chatting.start_hfc_probability:
|
if random.random() >= sub_hf.interest_chatting.start_hfc_probability:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
|||||||
@@ -154,7 +154,7 @@ class HeartFChatting:
|
|||||||
其生命周期现在由其关联的 SubHeartflow 的 FOCUSED 状态控制。
|
其生命周期现在由其关联的 SubHeartflow 的 FOCUSED 状态控制。
|
||||||
"""
|
"""
|
||||||
|
|
||||||
CONSECUTIVE_NO_REPLY_THRESHOLD = 4 # 连续不回复的阈值
|
CONSECUTIVE_NO_REPLY_THRESHOLD = 1 # 连续不回复的阈值
|
||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
|
|||||||
@@ -409,19 +409,23 @@ class NormalChat:
|
|||||||
|
|
||||||
async def start_chat(self):
|
async def start_chat(self):
|
||||||
"""为此 NormalChat 实例关联的 ChatStream 启动聊天任务(如果尚未运行),
|
"""为此 NormalChat 实例关联的 ChatStream 启动聊天任务(如果尚未运行),
|
||||||
并在启动前处理一次初始的高兴趣消息。"""
|
并在后台处理一次初始的高兴趣消息。""" # 文言文注释示例:启聊之始,若有遗珠,当于暗处拂拭,勿碍正途。
|
||||||
if self._chat_task is None or self._chat_task.done():
|
if self._chat_task is None or self._chat_task.done():
|
||||||
# --- 修改:调用新的私有方法处理初始消息 ---
|
# --- 修改:使用 create_task 启动初始消息处理 ---
|
||||||
await self._process_initial_interest_messages()
|
logger.info(f"[{self.stream_name}] 开始后台处理初始兴趣消息...")
|
||||||
|
# 创建一个任务来处理初始消息,不阻塞当前流程
|
||||||
|
initial_process_task = asyncio.create_task(self._process_initial_interest_messages())
|
||||||
|
# 可以考虑给这个任务也添加完成回调来记录日志或处理错误
|
||||||
|
# initial_process_task.add_done_callback(...)
|
||||||
# --- 修改结束 ---
|
# --- 修改结束 ---
|
||||||
|
|
||||||
# 启动后台轮询任务
|
# 启动后台轮询任务 (这部分不变)
|
||||||
logger.info(f"[{self.stream_name}] 启动后台兴趣消息轮询任务...")
|
logger.info(f"[{self.stream_name}] 启动后台兴趣消息轮询任务...")
|
||||||
task = asyncio.create_task(self._reply_interested_message())
|
polling_task = asyncio.create_task(self._reply_interested_message()) # 注意变量名区分
|
||||||
task.add_done_callback(lambda t: self._handle_task_completion(t)) # 回调现在是实例方法
|
polling_task.add_done_callback(lambda t: self._handle_task_completion(t))
|
||||||
self._chat_task = task
|
self._chat_task = polling_task # self._chat_task 仍然指向主要的轮询任务
|
||||||
else:
|
else:
|
||||||
logger.info(f"[{self.stream_name}] 聊天任务已在运行中。")
|
logger.info(f"[{self.stream_name}] 聊天轮询任务已在运行中。")
|
||||||
|
|
||||||
def _handle_task_completion(self, task: asyncio.Task):
|
def _handle_task_completion(self, task: asyncio.Task):
|
||||||
"""任务完成回调处理"""
|
"""任务完成回调处理"""
|
||||||
|
|||||||
Reference in New Issue
Block a user