Files
mai-bot/src/maisaka/timing.py
2026-03-13 11:45:26 +08:00

76 lines
2.6 KiB
Python

"""
MaiSaka - Timing 模块(含自我反思功能)
构建对话时间戳信息,供 Timing 分析模块使用。
该模块同时负责分析对话的时间维度和进行自我反思分析。
"""
from datetime import datetime
from typing import Optional
def build_timing_info(
chat_start_time: Optional[datetime],
last_user_input_time: Optional[datetime],
last_assistant_response_time: Optional[datetime],
user_input_times: list[datetime],
) -> str:
"""
构建当前时间戳信息文本,供 Timing 模块分析。
Args:
chat_start_time: 对话开始时间
last_user_input_time: 用户上次输入时间
last_assistant_response_time: 助手上次回复时间
user_input_times: 所有用户输入时间戳列表
"""
now = datetime.now()
parts: list[str] = []
parts.append(f"当前时间: {now.strftime('%Y-%m-%d %H:%M:%S')}")
if chat_start_time:
elapsed = now - chat_start_time
minutes, seconds = divmod(int(elapsed.total_seconds()), 60)
hours, minutes = divmod(minutes, 60)
if hours > 0:
parts.append(f"对话已持续: {hours}小时{minutes}{seconds}")
elif minutes > 0:
parts.append(f"对话已持续: {minutes}{seconds}")
else:
parts.append(f"对话已持续: {seconds}")
if last_user_input_time:
since_user = now - last_user_input_time
parts.append(f"距用户上次输入: {int(since_user.total_seconds())}")
if last_assistant_response_time:
since_assistant = now - last_assistant_response_time
parts.append(f"距助手上次回复: {int(since_assistant.total_seconds())}")
if len(user_input_times) >= 2:
intervals = [
(user_input_times[i] - user_input_times[i - 1]).total_seconds() for i in range(1, len(user_input_times))
]
avg_interval = sum(intervals) / len(intervals)
parts.append(f"用户平均回复间隔: {int(avg_interval)}")
parts.append(f"用户总共发言次数: {len(user_input_times)}")
# 时段判断
hour = now.hour
if 0 <= hour < 6:
parts.append("当前时段: 深夜/凌晨")
elif 6 <= hour < 9:
parts.append("当前时段: 早晨")
elif 9 <= hour < 12:
parts.append("当前时段: 上午")
elif 12 <= hour < 14:
parts.append("当前时段: 中午")
elif 14 <= hour < 18:
parts.append("当前时段: 下午")
elif 18 <= hour < 22:
parts.append("当前时段: 晚上")
else:
parts.append("当前时段: 深夜")
return "\n".join(parts)