主动思考大优化

This commit is contained in:
tt-P607
2025-09-08 18:49:42 +08:00
committed by Windpicker-owo
parent 89e22e2641
commit 7c93b8bbca
5 changed files with 730 additions and 76 deletions

View File

@@ -2,6 +2,7 @@ import asyncio
import re
import math
import traceback
from datetime import datetime
from typing import Tuple, TYPE_CHECKING
@@ -15,7 +16,7 @@ from src.chat.utils.timer_calculator import Timer
from src.chat.utils.chat_message_builder import replace_user_references_sync
from src.common.logger import get_logger
from src.mood.mood_manager import mood_manager
from src.person_info.person_info import Person
from src.chat.message_receive.chat_stream import get_chat_manager
if TYPE_CHECKING:
from src.chat.heart_flow.sub_heartflow import SubHeartflow
@@ -96,10 +97,11 @@ class HeartFCMessageReceiver:
主要流程:
1. 消息解析与初始化
2. 消息缓冲处理
3. 过滤检查
4. 兴趣度计算
5. 关系处理
2. 智能提醒分析
3. 消息缓冲处理
4. 过滤检查
5. 兴趣度计算
6. 关系处理
Args:
message_data: 原始消息字符串
@@ -109,7 +111,92 @@ class HeartFCMessageReceiver:
userinfo = message.message_info.user_info
chat = message.chat_stream
# 2. 兴趣度计算与更新
# 2. 智能提醒分析 - 检查用户是否请求提醒
from src.chat.chat_loop.proactive.smart_reminder_analyzer import smart_reminder_analyzer
from src.chat.chat_loop.proactive.event_scheduler import event_scheduler
try:
reminder_event = await smart_reminder_analyzer.analyze_message(
userinfo.user_id, # type: ignore
message.processed_plain_text
)
if reminder_event:
logger.info(f"检测到提醒请求: {reminder_event}")
# 创建提醒回调函数
async def reminder_callback(metadata):
"""提醒执行回调函数 - 触发完整的主动思考流程"""
try:
# 获取对应的subheartflow实例
from src.chat.heart_flow.heartflow import heartflow
subflow = await heartflow.get_or_create_subheartflow(chat.stream_id)
if not subflow:
logger.error(f"无法获取subheartflow实例: {chat.stream_id}")
return
# 创建主动思考事件,触发完整的思考流程
from src.chat.chat_loop.proactive.events import ProactiveTriggerEvent
reminder_content = metadata.get('content', '提醒时间到了')
event = ProactiveTriggerEvent(
source="reminder_system",
reason=f"定时提醒:{reminder_content}",
metadata={
"reminder_text": reminder_content,
"trigger_time": datetime.now().isoformat()
}
)
# 通过subflow的HeartFChatting实例触发主动思考
await subflow.heart_fc_instance.proactive_thinker.think(event)
logger.info(f"已触发提醒的主动思考,内容: {reminder_content}")
except Exception as callback_error:
logger.error(f"执行提醒回调失败: {callback_error}")
import traceback
logger.error(traceback.format_exc())
# Fallback: 如果主动思考失败,直接发送提醒消息
try:
reminder_content = metadata.get('content', '提醒时间到了')
await text_to_stream(
text=f"⏰ 提醒:{reminder_content}",
stream_id=chat.stream_id,
typing=False
)
logger.info(f"Fallback提醒消息已发送: {reminder_content}")
except Exception as fallback_error:
logger.error(f"Fallback提醒也失败了: {fallback_error}")
# 调度提醒事件
event_id = f"reminder_{reminder_event.user_id}_{int(reminder_event.reminder_time.timestamp())}"
metadata = {
"type": "reminder",
"user_id": reminder_event.user_id,
"chat_id": chat.stream_id,
"content": reminder_event.content,
"confidence": reminder_event.confidence,
"created_at": datetime.now().isoformat()
}
success = await event_scheduler.schedule_event(
event_id=event_id,
trigger_time=reminder_event.reminder_time,
callback=reminder_callback,
metadata=metadata
)
if success:
logger.info(f"提醒事件调度成功: {event_id}")
else:
logger.error(f"提醒事件调度失败: {event_id}")
except Exception as e:
logger.error(f"智能提醒分析失败: {e}")
# 3. 兴趣度计算与更新
interested_rate, is_mentioned, keywords = await _calculate_interest(message)
message.interest_value = interested_rate
message.is_mentioned = is_mentioned