diff --git a/src/common/logger.py b/src/common/logger.py index 4347fd97e..53043f405 100644 --- a/src/common/logger.py +++ b/src/common/logger.py @@ -419,6 +419,22 @@ WILLING_STYLE_CONFIG = { }, } +PFC_ACTION_PLANNER_STYLE_CONFIG = { + "advanced": { + "console_format": ( + "{time:YYYY-MM-DD HH:mm:ss} | " + "{level: <8} | " + "PFC私聊规划 | " + "{message}" + ), + "file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | PFC私聊规划 | {message}", + }, + "simple": { + "console_format": "{time:MM-DD HH:mm} | PFC私聊规划 | {message} ", # noqa: E501 + "file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | PFC私聊规划 | {message}", + }, +} + EMOJI_STYLE_CONFIG = { "advanced": { "console_format": ( @@ -497,6 +513,7 @@ CONFIRM_STYLE_CONFIG = { # 根据SIMPLE_OUTPUT选择配置 MAIN_STYLE_CONFIG = MAIN_STYLE_CONFIG["simple"] if SIMPLE_OUTPUT else MAIN_STYLE_CONFIG["advanced"] EMOJI_STYLE_CONFIG = EMOJI_STYLE_CONFIG["simple"] if SIMPLE_OUTPUT else EMOJI_STYLE_CONFIG["advanced"] +PFC_ACTION_PLANNER_STYLE_CONFIG = PFC_ACTION_PLANNER_STYLE_CONFIG["simple"] if SIMPLE_OUTPUT else PFC_ACTION_PLANNER_STYLE_CONFIG["advanced"] REMOTE_STYLE_CONFIG = REMOTE_STYLE_CONFIG["simple"] if SIMPLE_OUTPUT else REMOTE_STYLE_CONFIG["advanced"] BASE_TOOL_STYLE_CONFIG = BASE_TOOL_STYLE_CONFIG["simple"] if SIMPLE_OUTPUT else BASE_TOOL_STYLE_CONFIG["advanced"] PERSON_INFO_STYLE_CONFIG = PERSON_INFO_STYLE_CONFIG["simple"] if SIMPLE_OUTPUT else PERSON_INFO_STYLE_CONFIG["advanced"] diff --git a/src/plugins/PFC/action_planner.py b/src/plugins/PFC/action_planner.py index 9a8783986..8659bf6e0 100644 --- a/src/plugins/PFC/action_planner.py +++ b/src/plugins/PFC/action_planner.py @@ -1,6 +1,6 @@ import time -from typing import Tuple, List, Dict, Any, Optional # 确保导入了必要的类型 -from src.common.logger import get_module_logger +from typing import Tuple +from src.common.logger import get_module_logger, LogConfig, PFC_ACTION_PLANNER_STYLE_CONFIG from ..models.utils_model import LLMRequest from ...config.config import global_config from .chat_observer import ChatObserver @@ -9,7 +9,12 @@ from src.individuality.individuality import Individuality from .observation_info import ObservationInfo from .conversation_info import ConversationInfo -logger = get_module_logger("action_planner") +pfc_action_log_config = LogConfig( + console_format=PFC_ACTION_PLANNER_STYLE_CONFIG["console_format"], + file_format=PFC_ACTION_PLANNER_STYLE_CONFIG["file_format"], +) + +logger = get_module_logger("action_planner", config=pfc_action_log_config) # 注意:这个 ActionPlannerInfo 类似乎没有在 ActionPlanner 中使用, # 如果确实没用,可以考虑移除,但暂时保留以防万一。 @@ -81,7 +86,7 @@ class ActionPlanner: timeout_minutes_text = last_goal_text.split(',')[0].replace('你等待了','') timeout_context = f"重要提示:你刚刚因为对方长时间({timeout_minutes_text})没有回复而结束了等待,这可能代表在对方看来本次聊天已结束,请基于此情况规划下一步,不要重复等待前的发言。\n" except Exception: - timeout_context = f"重要提示:你刚刚因为对方长时间没有回复而结束了等待,这可能代表在对方看来本次聊天已结束,请基于此情况规划下一步,不要重复等待前的发言。\n" + timeout_context = "重要提示:你刚刚因为对方长时间没有回复而结束了等待,这可能代表在对方看来本次聊天已结束,请基于此情况规划下一步,不要重复等待前的发言。\n" else: logger.debug("Conversation info goal_list is empty or not available for timeout check.") except AttributeError: @@ -108,7 +113,7 @@ class ActionPlanner: reasoning = "没有明确原因" goal = str(goal) if goal is not None else "目标内容缺失" reasoning = str(reasoning) if reasoning is not None else "没有明确原因" - goal_str += f"- 目标:{goal}\n 原因:{reasoning}\n" + goals_str += f"- 目标:{goal}\n 原因:{reasoning}\n" if not goals_str: # 如果循环后 goals_str 仍为空 goals_str = "- 目前没有明确对话目标,请考虑设定一个。\n" except AttributeError: @@ -160,7 +165,7 @@ class ActionPlanner: identity_addon = "" if isinstance(identity_details_only, str): pronouns = ["你", "我", "他"] - original_details = identity_details_only + # original_details = identity_details_only for p in pronouns: if identity_details_only.startswith(p): identity_details_only = identity_details_only[len(p):] @@ -205,10 +210,14 @@ class ActionPlanner: final_reason = action_data.get("final_reason", "") action_time = action_data.get("time", "") elif isinstance(action_data, tuple): - if len(action_data) > 0: action_type = action_data[0] - if len(action_data) > 1: plan_reason = action_data[1] - if len(action_data) > 2: status = action_data[2] - if status == "recall" and len(action_data) > 3: final_reason = action_data[3] + if len(action_data) > 0: + action_type = action_data[0] + if len(action_data) > 1: + plan_reason = action_data[1] + if len(action_data) > 2: + status = action_data[2] + if status == "recall" and len(action_data) > 3: + final_reason = action_data[3] reason_text = f", 失败/取消原因: {final_reason}" if final_reason else "" summary_line = f"- 时间:{action_time}, 尝试行动:'{action_type}', 状态:{status}{reason_text}" @@ -218,13 +227,13 @@ class ActionPlanner: last_action_context += f"- 上次【规划】的行动是: '{action_type}'\n" last_action_context += f"- 当时规划的【原因】是: {plan_reason}\n" if status == "done": - last_action_context += f"- 该行动已【成功执行】。\n" + last_action_context += "- 该行动已【成功执行】。\n" elif status == "recall": - last_action_context += f"- 但该行动最终【未能执行/被取消】。\n" + last_action_context += "- 但该行动最终【未能执行/被取消】。\n" if final_reason: last_action_context += f"- 【重要】失败/取消的具体原因是: “{final_reason}”\n" else: - last_action_context += f"- 【重要】失败/取消原因未明确记录。\n" + last_action_context += "- 【重要】失败/取消原因未明确记录。\n" else: last_action_context += f"- 该行动当前状态: {status}\n" diff --git a/template/bot_config_template.toml b/template/bot_config_template.toml index 5e26b1e7f..5f342406e 100644 --- a/template/bot_config_template.toml +++ b/template/bot_config_template.toml @@ -1,5 +1,5 @@ [inner] -version = "1.4.0" +version = "1.4.1" #----以下是给开发人员阅读的,如果你只是部署了麦麦,不需要阅读---- #如果你想要修改配置文件,请在修改后将version的值进行变更 @@ -276,6 +276,7 @@ pri_out = 1.26 #私聊PFC:需要开启PFC功能,默认三个模型均为硅基流动v3,如果需要支持多人同时私聊或频繁调用,建议把其中的一个或两个换成官方v3或其它模型,以免撞到429 +#PFC决策模型 [model.llm_PFC_action_planner] name = "Pro/deepseek-ai/DeepSeek-V3" provider = "SILICONFLOW" @@ -283,6 +284,7 @@ temp = 0.3 pri_in = 2 pri_out = 8 +#PFC聊天模型 [model.llm_PFC_chat] name = "Pro/deepseek-ai/DeepSeek-V3" provider = "SILICONFLOW" @@ -290,6 +292,7 @@ temp = 0.3 pri_in = 2 pri_out = 8 +#PFC检查模型 [model.llm_PFC_reply_checker] name = "Pro/deepseek-ai/DeepSeek-V3" provider = "SILICONFLOW"