修改缩进

pull/937/head
Bakadax 2025-05-08 09:00:07 +08:00
parent d88a2787ea
commit 589045ba80
8 changed files with 43 additions and 46 deletions

View File

@ -74,10 +74,10 @@ async def handle_action(
logger.error(f"[私聊][{conversation_instance.private_name}] ObservationInfo 为空,无法处理动作 '{action}'")
# 在 conversation_info 和 done_action 存在时更新状态
if conversation_info and hasattr(conversation_info, 'done_action') and conversation_info.done_action:
conversation_info.done_action[-1].update({
conversation_info.done_action[-1].update({
"status": "error",
"final_reason": "ObservationInfo is None",
})
})
conversation_instance.state = ConversationState.ERROR
return
if not conversation_info: # conversation_info 在这里是必需的
@ -180,9 +180,9 @@ async def handle_action(
# 检查生成的内容是否有效
if not generated_content_for_check_or_send or \
generated_content_for_check_or_send.startswith("抱歉") or \
generated_content_for_check_or_send.strip() == "" or \
(action == "send_new_message" and generated_content_for_check_or_send == "no" and should_send_reply): # RG决定发送但文本为"no"或空
generated_content_for_check_or_send.startswith("抱歉") or \
generated_content_for_check_or_send.strip() == "" or \
(action == "send_new_message" and generated_content_for_check_or_send == "no" and should_send_reply): # RG决定发送但文本为"no"或空
warning_msg = f"{log_prefix} 生成内容无效或为错误提示"
if action == "send_new_message" and generated_content_for_check_or_send == "no": # 特殊情况日志
@ -586,7 +586,7 @@ async def handle_action(
event_for_emotion_update = "你选择等待对方的回复(对方可能很快回复了)"
if conversation_instance.emotion_updater and conversation_info and observation_info: # 确保都存在
await conversation_instance.emotion_updater.update_emotion_based_on_context(
await conversation_instance.emotion_updater.update_emotion_based_on_context(
conversation_info=conversation_info,
observation_info=observation_info,
chat_observer_for_history=conversation_instance.chat_observer, # 确保 chat_observer 存在
@ -634,7 +634,7 @@ async def handle_action(
# 1. 重置临时存储的计数值
if conversation_info: # 确保 conversation_info 存在
conversation_info.other_new_messages_during_planning_count = 0
conversation_info.other_new_messages_during_planning_count = 0
# 2. 更新动作历史记录的最终状态和原因
# 优化:如果动作成功但状态仍是默认的 recall则更新为 done
@ -659,7 +659,7 @@ async def handle_action(
elif action in ["rethink_goal", "end_conversation", "block_and_ignore", "say_goodbye"]:
final_reason = f"成功执行 {action}"
elif action in ["direct_reply", "send_new_message"]: # 正常发送成功的case
final_reason = "成功发送"
final_reason = "成功发送"
else:
final_reason = f"动作 {action} 成功完成"
# 如果已经是 "done" 或 "done_no_reply",则保留它们和它们对应的 final_reason
@ -683,7 +683,7 @@ async def handle_action(
# 更新 done_action 中的记录
# 防御性检查,确保 conversation_info, done_action 存在,并且索引有效
if conversation_info and hasattr(conversation_info, 'done_action') and \
conversation_info.done_action and action_index < len(conversation_info.done_action):
conversation_info.done_action and action_index < len(conversation_info.done_action):
conversation_info.done_action[action_index].update(
{
"status": final_status,
@ -699,8 +699,8 @@ async def handle_action(
log_final_reason = final_reason if final_reason else "无明确原因"
# 为成功发送的动作添加发送内容摘要
if final_status == "done" and action_successful and \
action in ["direct_reply", "send_new_message"] and \
hasattr(conversation_instance, 'generated_reply') and conversation_instance.generated_reply:
log_final_reason += f" (发送内容: '{conversation_instance.generated_reply[:30]}...')"
action in ["direct_reply", "send_new_message"] and \
hasattr(conversation_instance, 'generated_reply') and conversation_instance.generated_reply:
log_final_reason += f" (发送内容: '{conversation_instance.generated_reply[:30]}...')"
logger.info(f"[私聊][{conversation_instance.private_name}] 动作 '{action}' 处理完成。最终状态: {final_status}, 原因: {log_final_reason}")

View File

@ -126,7 +126,7 @@ class Conversation:
# 最终关系评估
if self._initialized and self.relationship_updater and self.conversation_info and \
self.observation_info and self.chat_observer:
self.observation_info and self.chat_observer:
try:
logger.info(f"[私聊][{self.private_name}] 准备执行最终关系评估...")
await self.relationship_updater.update_relationship_final(

View File

@ -8,9 +8,6 @@ from src.plugins.utils.chat_message_builder import build_readable_messages, get_
from maim_message import UserInfo
from src.plugins.chat.chat_stream import chat_manager
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
# 导入 PFC 内部组件和类型
from .pfc_types import ConversationState
@ -226,7 +223,7 @@ async def initialize_core_components(conversation_instance: 'Conversation'):
logger.info(f"[私聊][{conversation_instance.private_name}] (Initializer) 空闲对话检测器已启动")
if conversation_instance.mood_mng and hasattr(conversation_instance.mood_mng, 'start_mood_update') and \
not conversation_instance.mood_mng._running: # type: ignore
not conversation_instance.mood_mng._running: # type: ignore
conversation_instance.mood_mng.start_mood_update(update_interval=global_config.mood_update_interval) # type: ignore
logger.info(f"[私聊][{conversation_instance.private_name}] (Initializer) MoodManager 已启动后台更新,间隔: {global_config.mood_update_interval} 秒。")
elif conversation_instance.mood_mng and conversation_instance.mood_mng._running: # type: ignore
@ -235,7 +232,7 @@ async def initialize_core_components(conversation_instance: 'Conversation'):
logger.warning(f"[私聊][{conversation_instance.private_name}] (Initializer) MoodManager 未能启动,相关功能可能受限。")
if conversation_instance.conversation_info and conversation_instance.conversation_info.person_id and \
conversation_instance.relationship_translator and conversation_instance.person_info_mng: # 确保都存在
conversation_instance.relationship_translator and conversation_instance.person_info_mng: # 确保都存在
try:
numeric_relationship_value = await conversation_instance.person_info_mng.get_value(
conversation_instance.conversation_info.person_id, "relationship_value"
@ -254,11 +251,11 @@ async def initialize_core_components(conversation_instance: 'Conversation'):
if conversation_instance.conversation_info and conversation_instance.mood_mng: # 确保都存在
try:
conversation_instance.conversation_info.current_emotion_text = conversation_instance.mood_mng.get_prompt() # type: ignore
logger.info(f"[私聊][{conversation_instance.private_name}] (Initializer) 初始化时加载情绪文本: {conversation_instance.conversation_info.current_emotion_text}")
conversation_instance.conversation_info.current_emotion_text = conversation_instance.mood_mng.get_prompt() # type: ignore
logger.info(f"[私聊][{conversation_instance.private_name}] (Initializer) 初始化时加载情绪文本: {conversation_instance.conversation_info.current_emotion_text}")
except Exception as e_init_emo:
logger.error(f"[私聊][{conversation_instance.private_name}] (Initializer) 初始化时加载情绪文本出错: {e_init_emo}")
# 保留 ConversationInfo 中的默认值
logger.error(f"[私聊][{conversation_instance.private_name}] (Initializer) 初始化时加载情绪文本出错: {e_init_emo}")
# 保留 ConversationInfo 中的默认值
# 6. 标记初始化成功并设置运行状态 (这些标志由PFCManager控制和检查)
# conversation_instance._initialized = True -> 由 manager 设置

View File

@ -208,7 +208,7 @@ async def run_conversation_loop(conversation_instance: 'Conversation'):
last_action_record_for_end_check = {}
if conversation_instance.conversation_info and conversation_instance.conversation_info.done_action:
last_action_record_for_end_check = conversation_instance.conversation_info.done_action[-1]
last_action_record_for_end_check = conversation_instance.conversation_info.done_action[-1]
action_ended: bool = ( last_action_record_for_end_check.get("action") in ["end_conversation", "say_goodbye"] and last_action_record_for_end_check.get("status") == "done" )
if goal_ended or action_ended:

View File

@ -202,7 +202,7 @@ class PfcRelationshipUpdater:
logger.info(f"[私聊][{self.private_name}] 最终关系值更新:与【{self.private_name}】的关系值从 {current_relationship_value:.2f} 调整了 {adjustment_val:.2f},最终为 {new_relationship_value:.2f}")
if conversation_info.person_id: # 虽然通常结束了,但更新一下无妨
conversation_info.relationship_text = await self.relationship_mng.build_relationship_info(conversation_info.person_id, is_id=True)
conversation_info.relationship_text = await self.relationship_mng.build_relationship_info(conversation_info.person_id, is_id=True)
class PfcRepationshipTranslator:

View File

@ -137,9 +137,9 @@ def get_items_from_json(
if field in item:
current_item_result[field] = item[field]
elif field not in default_result: # 如果字段不存在且没有默认值
logger.warning(f"[私聊][{private_name}] JSON数组元素缺少必要字段 '{field}': {item}")
valid_item = False
break # 这个元素无效
logger.warning(f"[私聊][{private_name}] JSON数组元素缺少必要字段 '{field}': {item}")
valid_item = False
break # 这个元素无效
if not valid_item: continue
@ -156,10 +156,10 @@ def get_items_from_json(
# 验证字符串不为空 (只检查 items 中要求的字段)
for field in items:
if field in current_item_result and isinstance(current_item_result[field], str) and not current_item_result[field].strip():
logger.warning(f"[私聊][{private_name}] JSON数组元素字段 '{field}' 不能为空字符串: {item}")
valid_item = False
break
if field in current_item_result and isinstance(current_item_result[field], str) and not current_item_result[field].strip():
logger.warning(f"[私聊][{private_name}] JSON数组元素字段 '{field}' 不能为空字符串: {item}")
valid_item = False
break
if valid_item:
valid_items_list.append(current_item_result) # 只添加完全有效的项
@ -188,8 +188,8 @@ def get_items_from_json(
# 尝试直接解析清理后的内容
json_data = json.loads(cleaned_content)
if not isinstance(json_data, dict):
logger.error(f"[私聊][{private_name}] 解析为单个对象,但结果不是字典类型: {type(json_data)}")
return False, default_result # 返回失败和默认值
logger.error(f"[私聊][{private_name}] 解析为单个对象,但结果不是字典类型: {type(json_data)}")
return False, default_result # 返回失败和默认值
except json.JSONDecodeError:
# 如果直接解析失败,尝试用正则表达式查找 JSON 对象部分 (作为后备)
@ -201,8 +201,8 @@ def get_items_from_json(
potential_json_str = json_match.group()
json_data = json.loads(potential_json_str)
if not isinstance(json_data, dict):
logger.error(f"[私聊][{private_name}] 正则提取后解析,但结果不是字典类型: {type(json_data)}")
return False, default_result
logger.error(f"[私聊][{private_name}] 正则提取后解析,但结果不是字典类型: {type(json_data)}")
return False, default_result
logger.debug(f"[私聊][{private_name}] 通过正则提取并成功解析JSON对象。")
except json.JSONDecodeError:
logger.error(f"[私聊][{private_name}] 正则提取的部分 '{potential_json_str[:100]}...' 无法解析为JSON。")
@ -222,9 +222,9 @@ def get_items_from_json(
if item in json_data:
result[item] = json_data[item]
elif item not in default_result: # 如果字段不存在且没有默认值
logger.error(f"[私聊][{private_name}] JSON对象缺少必要字段 '{item}'。JSON内容: {json_data}")
valid_single_object = False
break # 这个对象无效
logger.error(f"[私聊][{private_name}] JSON对象缺少必要字段 '{item}'。JSON内容: {json_data}")
valid_single_object = False
break # 这个对象无效
if not valid_single_object:
return False, default_result
@ -248,10 +248,10 @@ def get_items_from_json(
break
if valid_single_object:
logger.debug(f"[私聊][{private_name}] 成功解析并验证了单个JSON对象。")
return True, result # 返回提取并验证后的字典
logger.debug(f"[私聊][{private_name}] 成功解析并验证了单个JSON对象。")
return True, result # 返回提取并验证后的字典
else:
return False, default_result # 验证失败
return False, default_result # 验证失败
async def get_person_id(private_name: str, chat_stream: ChatStream):
@ -280,8 +280,8 @@ async def get_person_id(private_name: str, chat_stream: ChatStream):
nickname=private_name, # 使用传入的 private_name 作为昵称
)
if person_id is None: # 如果 get_or_create_person 返回 None说明创建失败
logger.error(f"[私聊][{private_name}] get_or_create_person 未能获取或创建 person_id。")
return None # 返回 None 表示失败
logger.error(f"[私聊][{private_name}] get_or_create_person 未能获取或创建 person_id。")
return None # 返回 None 表示失败
return person_id, private_platform_str, private_user_id_str # 返回获取或创建的 person_id
except ValueError:

View File

@ -79,7 +79,7 @@ class ReplyChecker:
# <--- 新增详细对比日志 --- END --->
if not match_found: # <--- 根据标记判断
logger.debug(f"[私聊][{self.private_name}] ReplyChecker: 未找到重复。") # <--- 新增日志
logger.debug(f"[私聊][{self.private_name}] ReplyChecker: 未找到重复。") # <--- 新增日志
return (True, "消息内容未与机器人历史发言重复。", False)
except Exception as e:

View File

@ -362,8 +362,8 @@ class ReplyGenerator:
if action_type == "send_new_message":
# 返回一个表示错误的JSON让调用方知道出错了但仍能解析
return """{{
"send": "no",
"txt": "LLM生成回复时出错"
"send": "no",
"txt": "LLM生成回复时出错"
}}""".strip()
else:
return "抱歉,我现在有点混乱,让我重新思考一下..."