mirror of https://github.com/Mai-with-u/MaiBot.git
修复关系获取错误
parent
21b2502f13
commit
2db342551a
|
|
@ -3,7 +3,6 @@ import asyncio
|
|||
import datetime
|
||||
import traceback
|
||||
import json # 确保导入 json 模块
|
||||
from .pfc_utils import get_items_from_json # 导入JSON解析工具
|
||||
from typing import Dict, Any, Optional, Set, List
|
||||
from dateutil import tz
|
||||
|
||||
|
|
@ -11,19 +10,18 @@ from src.common.logger_manager import get_logger
|
|||
from src.plugins.utils.chat_message_builder import build_readable_messages, get_raw_msg_before_timestamp_with_chat
|
||||
from maim_message import UserInfo
|
||||
from src.plugins.chat.chat_stream import chat_manager, ChatStream
|
||||
from ..chat.message import Message # 假设 Message 类在这里
|
||||
from ...config.config import global_config
|
||||
from ..chat.message import Message
|
||||
from src.config.config import global_config
|
||||
from ..person_info.person_info import person_info_manager
|
||||
from ..person_info.relationship_manager import relationship_manager
|
||||
# 导入情绪
|
||||
from ..moods.moods import MoodManager
|
||||
|
||||
from .pfc_relationship import PfcRelationshipUpdater, PfcRepationshipTranslator
|
||||
from .pfc_emotion import PfcEmotionUpdater # 新增
|
||||
from .pfc_emotion import PfcEmotionUpdater
|
||||
|
||||
# 导入 PFC 内部组件和类型
|
||||
from .pfc_types import ConversationState # 导入更新后的 pfc_types
|
||||
from .pfc import GoalAnalyzer # 假设 GoalAnalyzer 在 pfc.py
|
||||
from .pfc_types import ConversationState
|
||||
from .pfc import GoalAnalyzer
|
||||
from .chat_observer import ChatObserver
|
||||
from .message_sender import DirectMessageSender
|
||||
from .action_planner import ActionPlanner
|
||||
|
|
@ -31,9 +29,9 @@ from .observation_info import ObservationInfo
|
|||
from .conversation_info import ConversationInfo
|
||||
from .reply_generator import ReplyGenerator
|
||||
from .idle_conversation_starter import IdleConversationStarter
|
||||
from .pfc_KnowledgeFetcher import KnowledgeFetcher # 假设 KnowledgeFetcher 在这里
|
||||
from .pfc_KnowledgeFetcher import KnowledgeFetcher
|
||||
from .waiter import Waiter
|
||||
from .reply_checker import ReplyChecker # 确保 ReplyChecker 被导入
|
||||
from .reply_checker import ReplyChecker
|
||||
|
||||
# 导入富文本回溯,用于更好的错误展示
|
||||
from rich.traceback import install
|
||||
|
|
@ -43,19 +41,12 @@ install(extra_lines=3)
|
|||
# 获取当前模块的日志记录器
|
||||
logger = get_logger("pfc_conversation")
|
||||
|
||||
try:
|
||||
from ...config.config import global_config
|
||||
except ImportError:
|
||||
logger.error("无法在 conversation.py 中导入 global_config,时区可能不准确!")
|
||||
global_config = None
|
||||
TIME_ZONE = tz.tzlocal() # 使用本地时区作为后备
|
||||
else:
|
||||
# 确保 global_config.TIME_ZONE 存在且有效,否则使用默认值
|
||||
configured_tz = getattr(global_config, 'TIME_ZONE', 'Asia/Shanghai') # 使用 getattr 安全访问
|
||||
TIME_ZONE = tz.gettz(configured_tz)
|
||||
if TIME_ZONE is None: # 如果 gettz 返回 None,说明时区字符串无效
|
||||
logger.error(f"配置的时区 '{configured_tz}' 无效,将使用默认时区 'Asia/Shanghai'")
|
||||
TIME_ZONE = tz.gettz('Asia/Shanghai')
|
||||
# 确保 global_config.TIME_ZONE 存在且有效,否则使用默认值
|
||||
configured_tz = getattr(global_config, 'TIME_ZONE', 'Asia/Shanghai') # 使用 getattr 安全访问
|
||||
TIME_ZONE = tz.gettz(configured_tz)
|
||||
if TIME_ZONE is None: # 如果 gettz 返回 None,说明时区字符串无效
|
||||
logger.error(f"配置的时区 '{configured_tz}' 无效,将使用默认时区 'Asia/Shanghai'")
|
||||
TIME_ZONE = tz.gettz('Asia/Shanghai')
|
||||
|
||||
class Conversation:
|
||||
"""
|
||||
|
|
@ -139,7 +130,7 @@ class Conversation:
|
|||
private_name=self.private_name,
|
||||
bot_name=global_config.BOT_NICKNAME # 或者 self.name
|
||||
)
|
||||
logger.info(f"[私聊][{self.private_name}] PfcEmotionUpdater 初始化完成。")
|
||||
logger.info(f"[私聊][{self.private_name}] PfcEmotion 初始化完成。")
|
||||
|
||||
logger.debug(f"[私聊][{self.private_name}] 初始化 GoalAnalyzer...")
|
||||
self.goal_analyzer = GoalAnalyzer(self.stream_id, self.private_name)
|
||||
|
|
@ -198,7 +189,7 @@ class Conversation:
|
|||
# 尝试从 observation_info 获取,这依赖于 _load_initial_history 的实现
|
||||
private_user_id_str: Optional[str] = None
|
||||
private_platform_str: Optional[str] = None
|
||||
private_nickname_str: Optional[str] = None
|
||||
private_nickname_str = self.private_name
|
||||
|
||||
if self.observation_info and self.observation_info.last_message_sender and self.observation_info.last_message_sender != self.bot_qq_str:
|
||||
# 如果历史记录最后一条不是机器人发的,那么发送者就是对方
|
||||
|
|
@ -209,14 +200,12 @@ class Conversation:
|
|||
if self.observation_info.sender_user_id and self.observation_info.sender_platform:
|
||||
private_user_id_str = self.observation_info.sender_user_id
|
||||
private_platform_str = self.observation_info.sender_platform
|
||||
private_nickname_str = self.observation_info.sender_name
|
||||
logger.info(f"[私聊][{self.private_name}] 从 ObservationInfo 获取到私聊对象信息: ID={private_user_id_str}, Platform={private_platform_str}, Name={private_nickname_str}")
|
||||
|
||||
if not private_user_id_str and self.chat_stream: # 如果 observation_info 中没有,尝试从 chat_stream (通常代表对方)
|
||||
if self.chat_stream.user_info and str(self.chat_stream.user_info.user_id) != self.bot_qq_str : # 确保不是机器人自己
|
||||
private_user_id_str = str(self.chat_stream.user_info.user_id)
|
||||
private_platform_str = self.chat_stream.user_info.platform
|
||||
private_nickname_str = self.chat_stream.user_info.user_nickname
|
||||
logger.info(f"[私聊][{self.private_name}] 从 ChatStream 获取到私聊对象信息: ID={private_user_id_str}, Platform={private_platform_str}, Name={private_nickname_str}")
|
||||
elif self.chat_stream.group_info is None and self.private_name: # 私聊场景,且 private_name 可能有用
|
||||
# 这是一个备选方案,如果 private_name 直接是 user_id
|
||||
|
|
@ -288,7 +277,7 @@ class Conversation:
|
|||
numeric_relationship_value = 0.0
|
||||
|
||||
# 2. 使用PFC内部翻译函数
|
||||
self.conversation_info.relationship_text = self.relationship_translator.translate_relationship_value_to_text(numeric_relationship_value)
|
||||
self.conversation_info.relationship_text = await self.relationship_translator.translate_relationship_value_to_text(numeric_relationship_value)
|
||||
logger.info(f"[私聊][{self.private_name}] 初始化时加载关系文本: {self.conversation_info.relationship_text}")
|
||||
except Exception as e_init_rel:
|
||||
logger.error(f"[私聊][{self.private_name}] 初始化时加载关系文本出错: {e_init_rel}")
|
||||
|
|
@ -573,7 +562,7 @@ class Conversation:
|
|||
logger.debug(f"[私聊][{self.private_name}] 获取到数值型关系值: {numeric_relationship_value}")
|
||||
|
||||
# 2. 使用PFC内部的翻译函数将其转换为文本描述
|
||||
simplified_relationship_text = self.relationship_translator.translate_relationship_value_to_text(numeric_relationship_value)
|
||||
simplified_relationship_text = await self.relationship_translator.translate_relationship_value_to_text(numeric_relationship_value)
|
||||
self.conversation_info.relationship_text = simplified_relationship_text
|
||||
|
||||
logger.debug(f"[私聊][{self.private_name}] 更新后关系文本 (PFC内部翻译): {self.conversation_info.relationship_text}")
|
||||
|
|
@ -605,7 +594,7 @@ class Conversation:
|
|||
numeric_relationship_value = float(numeric_relationship_value.to_decimal())
|
||||
else:
|
||||
numeric_relationship_value = 0.0
|
||||
self.conversation_info.relationship_text = self.relationship_translator.translate_relationship_value_to_text(numeric_relationship_value)
|
||||
self.conversation_info.relationship_text = await self.relationship_translator.translate_relationship_value_to_text(numeric_relationship_value)
|
||||
logger.debug(f"[私聊][{self.private_name}] (备用逻辑)更新后关系文本: {self.conversation_info.relationship_text}")
|
||||
|
||||
except ValueError:
|
||||
|
|
|
|||
|
|
@ -1,4 +1,3 @@
|
|||
import datetime
|
||||
import time
|
||||
import traceback
|
||||
from dateutil import tz
|
||||
|
|
@ -6,23 +5,14 @@ from typing import List, Optional, Dict, Any, Set
|
|||
from maim_message import UserInfo
|
||||
from src.common.logger import get_module_logger
|
||||
from src.plugins.utils.chat_message_builder import build_readable_messages
|
||||
|
||||
from src.config.config import global_config
|
||||
# 确保导入路径正确
|
||||
from .chat_observer import ChatObserver
|
||||
from .chat_states import NotificationHandler, NotificationType, Notification
|
||||
|
||||
logger = get_module_logger("observation_info")
|
||||
|
||||
try:
|
||||
from ...config.config import global_config
|
||||
except ImportError:
|
||||
# 如果路径不对,可能需要调整 '...' 的数量
|
||||
# 或者在后面实际使用 TIME_ZONE 的地方导入
|
||||
logger.warning("无法在 observation_info.py 中直接导入 global_config,时区将在使用时获取")
|
||||
global_config = None # 设置为 None,后面检查
|
||||
TIME_ZONE = tz.tzlocal() # 备选:使用本地时区
|
||||
else:
|
||||
TIME_ZONE = tz.gettz(global_config.TIME_ZONE if global_config else 'Asia/Shanghai') # 使用配置的时区,提供默认值
|
||||
TIME_ZONE = tz.gettz(global_config.TIME_ZONE if global_config else 'Asia/Shanghai') # 使用配置的时区,提供默认值
|
||||
|
||||
|
||||
class ObservationInfoHandler(NotificationHandler):
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
from typing import List, Dict, Any
|
||||
|
||||
from MaiMBot.src.plugins.PFC.chat_observer import ChatObserver
|
||||
from src.plugins.PFC.chat_observer import ChatObserver
|
||||
from src.common.logger_manager import get_logger
|
||||
from src.plugins.models.utils_model import LLMRequest
|
||||
from src.plugins.moods.moods import MoodManager # MoodManager 本身是单例
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
from typing import List, Dict, Any
|
||||
from MaiMBot.src.plugins.PFC.chat_observer import ChatObserver
|
||||
from src.plugins.PFC.chat_observer import ChatObserver
|
||||
from src.common.logger_manager import get_logger
|
||||
from src.plugins.models.utils_model import LLMRequest
|
||||
from src.plugins.person_info.person_info import person_info_manager
|
||||
|
|
|
|||
|
|
@ -153,8 +153,8 @@ class ReplyGenerator:
|
|||
|
||||
Returns:
|
||||
str: 生成的回复。
|
||||
对于 'direct_reply' 和 'say_goodbye',返回纯文本回复。
|
||||
对于 'send_new_message',返回包含决策和文本的JSON字符串。
|
||||
对于 'direct_reply' 和 'say_goodbye',返回纯文本回复。
|
||||
对于 'send_new_message',返回包含决策和文本的JSON字符串。
|
||||
"""
|
||||
logger.debug(
|
||||
f"[私聊][{self.private_name}]开始生成回复 (动作类型: {action_type}):当前目标: {conversation_info.goal_list}"
|
||||
|
|
@ -233,11 +233,11 @@ class ReplyGenerator:
|
|||
spam_warning_message = ""
|
||||
if action_type == "send_new_message": # 只在 send_new_message 时构建刷屏警告
|
||||
if conversation_info.my_message_count > 5:
|
||||
spam_warning_message = f"⚠️【警告】**你已连续发送{str(conversation_info.my_message_count)}条消息!请谨慎考虑是否继续发送!以免刷屏对造成对方困扰!**"
|
||||
spam_warning_message = f"⚠️【警告】**你已连续发送{str(conversation_info.my_message_count)}条消息!请谨慎考虑是否继续发送!以免刷屏对造成对方困扰!**"
|
||||
elif conversation_info.my_message_count > 2:
|
||||
spam_warning_message = f"💬【提示】**你已连续发送{str(conversation_info.my_message_count)}条消息。如果非必要,请避免连续发送,以免给对方造成困扰。**"
|
||||
spam_warning_message = f"💬【提示】**你已连续发送{str(conversation_info.my_message_count)}条消息。如果非必要,请避免连续发送,以免给对方造成困扰。**"
|
||||
if spam_warning_message:
|
||||
spam_warning_message = f"\n{spam_warning_message}\n"
|
||||
spam_warning_message = f"\n{spam_warning_message}\n"
|
||||
|
||||
|
||||
# --- 选择 Prompt ---
|
||||
|
|
@ -255,17 +255,17 @@ class ReplyGenerator:
|
|||
try:
|
||||
current_time_value = "获取时间失败"
|
||||
if observation_info and hasattr(observation_info, 'current_time_str') and observation_info.current_time_str:
|
||||
current_time_value = observation_info.current_time_str
|
||||
current_time_value = observation_info.current_time_str
|
||||
|
||||
if action_type == "say_goodbye":
|
||||
prompt = prompt_template.format(
|
||||
prompt = prompt_template.format(
|
||||
persona_text=persona_text,
|
||||
chat_history_text=chat_history_text,
|
||||
current_time_str=current_time_value,
|
||||
sender_name=sender_name_str,
|
||||
relationship_text=relationship_text_str,
|
||||
current_emotion_text=current_emotion_text_str
|
||||
)
|
||||
)
|
||||
elif action_type == "send_new_message": # PROMPT_SEND_NEW_MESSAGE 增加了 spam_warning_info
|
||||
prompt = prompt_template.format(
|
||||
persona_text=persona_text,
|
||||
|
|
|
|||
|
|
@ -1,8 +1,6 @@
|
|||
from src.common.logger import get_module_logger
|
||||
from .chat_observer import ChatObserver
|
||||
from .conversation_info import ConversationInfo
|
||||
|
||||
# from src.individuality.individuality import Individuality # 不再需要
|
||||
from ...config.config import global_config
|
||||
import time
|
||||
import asyncio
|
||||
|
|
|
|||
Loading…
Reference in New Issue