From 12b03ecb8d23e0fe99056c7e5b9eacec0d20b235 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A2=A8=E6=A2=93=E6=9F=92?= <1787882683@qq.com> Date: Mon, 28 Apr 2025 00:22:05 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E9=87=8D=E6=9E=84=E8=B7=A8=E5=A4=9A?= =?UTF-8?q?=E4=B8=AA=E6=A8=A1=E5=9D=97=E7=9A=84=E6=97=A5=E5=BF=97=E9=85=8D?= =?UTF-8?q?=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将“get_module_logger”替换为新模块“logger_manager”中的“get_logger”,以实现一致的日志设置。 - 移除了单独的日志配置设置,转而采用集中式日志管理。 - 更新了多个文件中的日志初始化方法,包括“config.py”、“change_mood.py”、“change_relationship.py”等,以简化日志记录实践。 - 引入“logger_manager.py”,用于根据模块特定的样式处理日志配置。 --- bot.py | 15 +- src/common/logger.py | 217 ++++++++++++++++++ src/common/logger_manager.py | 99 ++++++++ src/config/config.py | 10 +- src/do_tool/not_used/change_mood.py | 4 +- src/do_tool/not_used/change_relationship.py | 4 +- src/do_tool/tool_can_use/base_tool.py | 9 +- src/do_tool/tool_can_use/get_knowledge.py | 4 +- src/do_tool/tool_can_use/get_time_date.py | 4 +- .../tool_can_use/lpmm_get_knowledge.py | 4 +- src/do_tool/tool_use.py | 9 +- src/heart_flow/background_tasks.py | 8 +- src/heart_flow/heartflow.py | 8 +- src/heart_flow/interest_logger.py | 9 +- src/heart_flow/mai_state_manager.py | 9 +- src/heart_flow/mind.py | 8 +- src/heart_flow/observation.py | 4 +- src/heart_flow/sub_heartflow.py | 9 +- src/heart_flow/sub_mind.py | 9 +- src/heart_flow/subheartflow_manager.py | 8 +- src/main.py | 8 +- src/plugins/PFC/action_planner.py | 9 +- src/plugins/PFC/conversation.py | 4 +- src/plugins/chat/bot.py | 10 +- src/plugins/chat/chat_stream.py | 9 +- src/plugins/chat/message.py | 4 +- src/plugins/chat/message_buffer.py | 4 +- src/plugins/chat/message_sender.py | 12 +- src/plugins/chat/only_message_process.py | 4 +- src/plugins/chat/utils_image.py | 4 +- src/plugins/emoji_system/emoji_manager.py | 8 +- src/plugins/heartFC_chat/heartFC_chat.py | 9 +- src/plugins/heartFC_chat/heartFC_generator.py | 11 +- src/plugins/heartFC_chat/heartFC_sender.py | 13 +- .../heartFC_chat/heartflow_processor.py | 9 +- .../heartFC_chat/heartflow_prompt_builder.py | 4 +- src/plugins/heartFC_chat/normal_chat.py | 10 +- .../heartFC_chat/normal_chat_generator.py | 11 +- src/plugins/knowledge/src/global_logger.py | 9 +- src/plugins/memory_system/Hippocampus.py | 10 +- src/plugins/moods/moods.py | 10 +- src/plugins/person_info/person_info.py | 8 +- .../person_info/relationship_manager.py | 10 +- 43 files changed, 411 insertions(+), 230 deletions(-) create mode 100644 src/common/logger_manager.py diff --git a/bot.py b/bot.py index d530f03c..39cdee98 100644 --- a/bot.py +++ b/bot.py @@ -8,21 +8,14 @@ import time import platform import traceback from dotenv import load_dotenv -from src.common.logger import get_module_logger, LogConfig, CONFIRM_STYLE_CONFIG, MAIN_STYLE_CONFIG +from src.common.logger_manager import get_logger +# from src.common.logger import LogConfig, CONFIRM_STYLE_CONFIG from src.common.crash_logger import install_crash_handler from src.main import MainSystem -main_log_config = LogConfig( - console_format=MAIN_STYLE_CONFIG["console_format"], - file_format=MAIN_STYLE_CONFIG["file_format"], -) -logger = get_module_logger("main_bot", config=main_log_config) -confirm_logger_config = LogConfig( - console_format=CONFIRM_STYLE_CONFIG["console_format"], - file_format=CONFIRM_STYLE_CONFIG["file_format"], -) -confirm_logger = get_module_logger("confirm", config=confirm_logger_config) +logger = get_logger("main") +confirm_logger = get_logger("confirm") # 获取没有加载env时的环境变量 env_mask = {key: os.getenv(key) for key in os.environ} diff --git a/src/common/logger.py b/src/common/logger.py index 176d4629..f139b499 100644 --- a/src/common/logger.py +++ b/src/common/logger.py @@ -426,6 +426,24 @@ CHAT_STREAM_STYLE_CONFIG = { }, } +CHAT_MESSAGE_STYLE_CONFIG = { + "advanced": { + "console_format": ( + "{time:YYYY-MM-DD HH:mm:ss} | " + "{level: <8} | " + "聊天消息 | " + "{message}" + ), + "file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 聊天消息 | {message}", + }, + "simple": { + "console_format": ( + "{time:MM-DD HH:mm} | 聊天消息 | {message}" + ), # noqa: E501 + "file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 聊天消息 | {message}", + }, +} + PERSON_INFO_STYLE_CONFIG = { "advanced": { "console_format": ( @@ -567,6 +585,42 @@ LPMM_STYLE_CONFIG = { }, } +OBSERVATION_STYLE_CONFIG = { + "advanced": { + "console_format": ( + "{time:YYYY-MM-DD HH:mm:ss} | " + "{level: <8} | " + "聊天观察 | " + "{message}" + ), + "file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 聊天观察 | {message}", + }, + "simple": { + "console_format": ( + "{time:MM-DD HH:mm} | 聊天观察 | {message}" + ), # noqa: E501 + "file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 聊天观察 | {message}", + }, +} + +CHAT_IMAGE_STYLE_CONFIG = { + "advanced": { + "console_format": ( + "{time:YYYY-MM-DD HH:mm:ss} | " + "{level: <8} | " + "聊天图片 | " + "{message}" + ), + "file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 聊天图片 | {message}", + }, + "simple": { + "console_format": ( + "{time:MM-DD HH:mm} | 聊天图片 | {message}" + ), # noqa: E501 + "file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 聊天图片 | {message}", + }, +} + # 兴趣log INTEREST_STYLE_CONFIG = { "advanced": { @@ -608,8 +662,140 @@ TIANYI_STYLE_CONFIG = { ), "file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 天依 | {message}", }, + } +# 模型日志样式配置 +MODEL_UTILS_STYLE_CONFIG = { + "advanced": { + "console_format": ( + "{time:YYYY-MM-DD HH:mm:ss} | " + "{level: <8} | " + "模型 | " + "{message}" + ), + "file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 模型 | {message}", + }, + "simple": { + "console_format": "{time:MM-DD HH:mm} | 模型 | {message}", + "file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 模型 | {message}", + }, +} + +MESSAGE_BUFFER_STYLE_CONFIG = { + "advanced": { + "console_format": ( + "{time:YYYY-MM-DD HH:mm:ss} | " + "{level: <8} | " + "消息缓存 | " + "{message}" + ), + "file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 消息缓存 | {message}", + }, + "simple": { + "console_format": "{time:MM-DD HH:mm} | 消息缓存 | {message}", + "file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 消息缓存 | {message}", + }, +} + +PROMPT_STYLE_CONFIG = { + "advanced": { + "console_format": ( + "{time:YYYY-MM-DD HH:mm:ss} | " + "{level: <8} | " + "提示词构建 | " + "{message}" + ), + "file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 提示词构建 | {message}", + }, + "simple": { + "console_format": "{time:MM-DD HH:mm} | 提示词构建 | {message}", + "file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 提示词构建 | {message}", + }, +} + +CHANGE_MOOD_TOOL_STYLE_CONFIG = { + "advanced": { + "console_format": ( + "{time:YYYY-MM-DD HH:mm:ss} | " + "{level: <8} | " + "心情工具 | " + "{message}" + ), + "file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 心情工具 | {message}", + }, + "simple": { + "console_format": "{time:MM-DD HH:mm} | 心情工具 | {message}", + "file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 心情工具 | {message}", + }, +} + +CHANGE_RELATIONSHIP_TOOL_STYLE_CONFIG = { + "advanced": { + "console_format": ( + "{time:YYYY-MM-DD HH:mm:ss} | " + "{level: <8} | " + "关系工具 | " + "{message}" + ), + "file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 关系工具 | {message}", + }, + "simple": { + "console_format": "{time:MM-DD HH:mm} | 关系工具 | {message}", + "file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 关系工具 | {message}", + }, +} + +GET_KNOWLEDGE_TOOL_STYLE_CONFIG = { + "advanced": { + "console_format": ( + "{time:YYYY-MM-DD HH:mm:ss} | " + "{level: <8} | " + "获取知识 | " + "{message}" + ), + "file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 获取知识 | {message}", + }, + "simple": { + "console_format": "{time:MM-DD HH:mm} | 获取知识 | {message}", + "file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 获取知识 | {message}", + }, +} + +GET_TIME_DATE_TOOL_STYLE_CONFIG = { + "advanced": { + "console_format": ( + "{time:YYYY-MM-DD HH:mm:ss} | " + "{level: <8} | " + "获取时间日期 | " + "{message}" + ), + "file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 获取时间日期 | {message}", + }, + "simple": { + "console_format": "{time:MM-DD HH:mm} | 获取时间日期 | {message}", + "file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 获取时间日期 | {message}", + }, +} + +LPMM_GET_KNOWLEDGE_TOOL_STYLE_CONFIG = { + "advanced": { + "console_format": ( + "{time:YYYY-MM-DD HH:mm:ss} | " + "{level: <8} | " + "LPMM获取知识 | " + "{message}" + ), + "file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | LPMM获取知识 | {message}", + }, + "simple": { + "console_format": "{time:MM-DD HH:mm} | LPMM获取知识 | {message}", + "file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | LPMM获取知识 | {message}", + }, +} + + + # 根据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"] @@ -649,6 +835,37 @@ PFC_STYLE_CONFIG = PFC_STYLE_CONFIG["simple"] if SIMPLE_OUTPUT else PFC_STYLE_CO LPMM_STYLE_CONFIG = LPMM_STYLE_CONFIG["simple"] if SIMPLE_OUTPUT else LPMM_STYLE_CONFIG["advanced"] INTEREST_STYLE_CONFIG = INTEREST_STYLE_CONFIG["simple"] if SIMPLE_OUTPUT else INTEREST_STYLE_CONFIG["advanced"] TIANYI_STYLE_CONFIG = TIANYI_STYLE_CONFIG["simple"] if SIMPLE_OUTPUT else TIANYI_STYLE_CONFIG["advanced"] +MODEL_UTILS_STYLE_CONFIG = ( + MODEL_UTILS_STYLE_CONFIG["simple"] if SIMPLE_OUTPUT else MODEL_UTILS_STYLE_CONFIG["advanced"] +) +PROMPT_STYLE_CONFIG = PROMPT_STYLE_CONFIG["simple"] if SIMPLE_OUTPUT else PROMPT_STYLE_CONFIG["advanced"] +CHANGE_MOOD_TOOL_STYLE_CONFIG = ( + CHANGE_MOOD_TOOL_STYLE_CONFIG["simple"] if SIMPLE_OUTPUT else CHANGE_MOOD_TOOL_STYLE_CONFIG["advanced"] +) +CHANGE_RELATIONSHIP_TOOL_STYLE_CONFIG = ( + CHANGE_RELATIONSHIP_TOOL_STYLE_CONFIG["simple"] if SIMPLE_OUTPUT else CHANGE_RELATIONSHIP_TOOL_STYLE_CONFIG["advanced"] +) +GET_KNOWLEDGE_TOOL_STYLE_CONFIG = ( + GET_KNOWLEDGE_TOOL_STYLE_CONFIG["simple"] if SIMPLE_OUTPUT else GET_KNOWLEDGE_TOOL_STYLE_CONFIG["advanced"] +) +GET_TIME_DATE_TOOL_STYLE_CONFIG = ( + GET_TIME_DATE_TOOL_STYLE_CONFIG["simple"] if SIMPLE_OUTPUT else GET_TIME_DATE_TOOL_STYLE_CONFIG["advanced"] +) +LPMM_GET_KNOWLEDGE_TOOL_STYLE_CONFIG = ( + LPMM_GET_KNOWLEDGE_TOOL_STYLE_CONFIG["simple"] if SIMPLE_OUTPUT else LPMM_GET_KNOWLEDGE_TOOL_STYLE_CONFIG["advanced"] +) +OBSERVATION_STYLE_CONFIG = ( + OBSERVATION_STYLE_CONFIG["simple"] if SIMPLE_OUTPUT else OBSERVATION_STYLE_CONFIG["advanced"] +) +MESSAGE_BUFFER_STYLE_CONFIG = ( + MESSAGE_BUFFER_STYLE_CONFIG["simple"] if SIMPLE_OUTPUT else MESSAGE_BUFFER_STYLE_CONFIG["advanced"] +) +CHAT_MESSAGE_STYLE_CONFIG = ( + CHAT_MESSAGE_STYLE_CONFIG["simple"] if SIMPLE_OUTPUT else CHAT_MESSAGE_STYLE_CONFIG["advanced"] +) +CHAT_IMAGE_STYLE_CONFIG = ( + CHAT_IMAGE_STYLE_CONFIG["simple"] if SIMPLE_OUTPUT else CHAT_IMAGE_STYLE_CONFIG["advanced"] +) def is_registered_module(record: dict) -> bool: diff --git a/src/common/logger_manager.py b/src/common/logger_manager.py new file mode 100644 index 00000000..89e4d170 --- /dev/null +++ b/src/common/logger_manager.py @@ -0,0 +1,99 @@ +from src.common.logger import get_module_logger, LogConfig +from src.common.logger import ( + BACKGROUND_TASKS_STYLE_CONFIG, + MAIN_STYLE_CONFIG, + MEMORY_STYLE_CONFIG, + PFC_STYLE_CONFIG, + MOOD_STYLE_CONFIG, + TOOL_USE_STYLE_CONFIG, + RELATION_STYLE_CONFIG, + CONFIG_STYLE_CONFIG, + HEARTFLOW_STYLE_CONFIG, + SCHEDULE_STYLE_CONFIG, + LLM_STYLE_CONFIG, + CHAT_STYLE_CONFIG, + EMOJI_STYLE_CONFIG, + SUB_HEARTFLOW_STYLE_CONFIG, + SUB_HEARTFLOW_MIND_STYLE_CONFIG, + SUBHEARTFLOW_MANAGER_STYLE_CONFIG, + BASE_TOOL_STYLE_CONFIG, + CHAT_STREAM_STYLE_CONFIG, + PERSON_INFO_STYLE_CONFIG, + WILLING_STYLE_CONFIG, + PFC_ACTION_PLANNER_STYLE_CONFIG, + MAI_STATE_CONFIG, + LPMM_STYLE_CONFIG, + INTEREST_STYLE_CONFIG, + TIANYI_STYLE_CONFIG, + REMOTE_STYLE_CONFIG, + TOPIC_STYLE_CONFIG, + SENDER_STYLE_CONFIG, + CONFIRM_STYLE_CONFIG, + MODEL_UTILS_STYLE_CONFIG, + PROMPT_STYLE_CONFIG, + CHANGE_MOOD_TOOL_STYLE_CONFIG, + CHANGE_RELATIONSHIP_TOOL_STYLE_CONFIG, + GET_KNOWLEDGE_TOOL_STYLE_CONFIG, + GET_TIME_DATE_TOOL_STYLE_CONFIG, + LPMM_GET_KNOWLEDGE_TOOL_STYLE_CONFIG, + OBSERVATION_STYLE_CONFIG, + MESSAGE_BUFFER_STYLE_CONFIG, + CHAT_MESSAGE_STYLE_CONFIG, + CHAT_IMAGE_STYLE_CONFIG, +) + +# 可根据实际需要补充更多模块配置 +MODULE_LOGGER_CONFIGS = { + "background_tasks": BACKGROUND_TASKS_STYLE_CONFIG, # 后台任务 + "main": MAIN_STYLE_CONFIG, # 主程序 + "memory": MEMORY_STYLE_CONFIG, # 海马体 + "pfc": PFC_STYLE_CONFIG, # PFC + "mood": MOOD_STYLE_CONFIG, # 心情 + "tool_use": TOOL_USE_STYLE_CONFIG, # 工具使用 + "relation": RELATION_STYLE_CONFIG, # 关系 + "config": CONFIG_STYLE_CONFIG, # 配置 + "heartflow": HEARTFLOW_STYLE_CONFIG, # 麦麦大脑袋 + "schedule": SCHEDULE_STYLE_CONFIG, # 在干嘛 + "llm": LLM_STYLE_CONFIG, # 麦麦组织语言 + "chat": CHAT_STYLE_CONFIG, # 见闻 + "emoji": EMOJI_STYLE_CONFIG, # 表情包 + "sub_heartflow": SUB_HEARTFLOW_STYLE_CONFIG, # 麦麦水群 + "sub_heartflow_mind": SUB_HEARTFLOW_MIND_STYLE_CONFIG, # 麦麦小脑袋 + "subheartflow_manager": SUBHEARTFLOW_MANAGER_STYLE_CONFIG, # 麦麦水群[管理] + "base_tool": BASE_TOOL_STYLE_CONFIG, # 工具使用 + "chat_stream": CHAT_STREAM_STYLE_CONFIG, # 聊天流 + "person_info": PERSON_INFO_STYLE_CONFIG, # 人物信息 + "willing": WILLING_STYLE_CONFIG, # 意愿 + "pfc_action_planner": PFC_ACTION_PLANNER_STYLE_CONFIG, # PFC私聊规划 + "mai_state": MAI_STATE_CONFIG, # 麦麦状态 + "lpmm": LPMM_STYLE_CONFIG, # LPMM + "interest": INTEREST_STYLE_CONFIG, # 兴趣 + "tianyi": TIANYI_STYLE_CONFIG, # 天依 + "remote": REMOTE_STYLE_CONFIG, # 远程 + "topic": TOPIC_STYLE_CONFIG, # 话题 + "sender": SENDER_STYLE_CONFIG, # 消息发送 + "confirm": CONFIRM_STYLE_CONFIG, # EULA与PRIVACY确认 + "model_utils": MODEL_UTILS_STYLE_CONFIG, # 模型工具 + "prompt": PROMPT_STYLE_CONFIG, # 提示词 + "change_mood_tool": CHANGE_MOOD_TOOL_STYLE_CONFIG, # 改变心情工具 + "change_relationship": CHANGE_RELATIONSHIP_TOOL_STYLE_CONFIG, # 改变关系工具 + "get_knowledge_tool": GET_KNOWLEDGE_TOOL_STYLE_CONFIG, # 获取知识工具 + "get_time_date": GET_TIME_DATE_TOOL_STYLE_CONFIG, # 获取时间日期工具 + "lpm_get_knowledge_tool": LPMM_GET_KNOWLEDGE_TOOL_STYLE_CONFIG, # LPMM获取知识工具 + "observation": OBSERVATION_STYLE_CONFIG, # 聊天观察 + "message_buffer": MESSAGE_BUFFER_STYLE_CONFIG, # 消息缓冲 + "chat_message": CHAT_MESSAGE_STYLE_CONFIG, # 聊天消息 + "chat_image": CHAT_IMAGE_STYLE_CONFIG, # 聊天图片 + # ...如有更多模块,继续添加... +} + +def get_logger(module_name: str): + style_config = MODULE_LOGGER_CONFIGS.get(module_name) + if style_config: + log_config = LogConfig( + console_format=style_config["console_format"], + file_format=style_config["file_format"], + ) + return get_module_logger(module_name, config=log_config) + # 若无特殊样式,使用默认 + return get_module_logger(module_name) diff --git a/src/config/config.py b/src/config/config.py index 2ade83f1..acbc0cb2 100644 --- a/src/config/config.py +++ b/src/config/config.py @@ -13,17 +13,11 @@ from packaging import version from packaging.version import Version, InvalidVersion from packaging.specifiers import SpecifierSet, InvalidSpecifier -from src.common.logger import get_module_logger, CONFIG_STYLE_CONFIG, LogConfig +from src.common.logger_manager import get_logger -# 定义日志配置 -config_config = LogConfig( - # 使用消息发送专用样式 - console_format=CONFIG_STYLE_CONFIG["console_format"], - file_format=CONFIG_STYLE_CONFIG["file_format"], -) # 配置主程序日志格式 -logger = get_module_logger("config", config=config_config) +logger = get_logger("config") # 考虑到,实际上配置文件中的mai_version是不会自动更新的,所以采用硬编码 is_test = True diff --git a/src/do_tool/not_used/change_mood.py b/src/do_tool/not_used/change_mood.py index 066bad21..430561a2 100644 --- a/src/do_tool/not_used/change_mood.py +++ b/src/do_tool/not_used/change_mood.py @@ -1,11 +1,11 @@ from src.do_tool.tool_can_use.base_tool import BaseTool from src.config.config import global_config -from src.common.logger import get_module_logger +from src.common.logger_manager import get_logger from src.plugins.moods.moods import MoodManager from typing import Dict, Any -logger = get_module_logger("change_mood_tool") +logger = get_logger("change_mood_tool") class ChangeMoodTool(BaseTool): diff --git a/src/do_tool/not_used/change_relationship.py b/src/do_tool/not_used/change_relationship.py index 68dd0e67..4af32fb8 100644 --- a/src/do_tool/not_used/change_relationship.py +++ b/src/do_tool/not_used/change_relationship.py @@ -1,9 +1,9 @@ from typing import Dict, Any -from src.common.logger import get_module_logger +from src.common.logger_manager import get_logger from src.do_tool.tool_can_use.base_tool import BaseTool -logger = get_module_logger("relationship_tool") +logger = get_logger("relationship_tool") class RelationshipTool(BaseTool): diff --git a/src/do_tool/tool_can_use/base_tool.py b/src/do_tool/tool_can_use/base_tool.py index af12adf2..47f4a54d 100644 --- a/src/do_tool/tool_can_use/base_tool.py +++ b/src/do_tool/tool_can_use/base_tool.py @@ -3,14 +3,9 @@ import inspect import importlib import pkgutil import os -from src.common.logger import get_module_logger, LogConfig, BASE_TOOL_STYLE_CONFIG +from src.common.logger_manager import get_logger -base_tool_log_config = LogConfig( - console_format=BASE_TOOL_STYLE_CONFIG["console_format"], - file_format=BASE_TOOL_STYLE_CONFIG["file_format"], -) - -logger = get_module_logger("base_tool", config=base_tool_log_config) +logger = get_logger("base_tool") # 工具注册表 TOOL_REGISTRY = {} diff --git a/src/do_tool/tool_can_use/get_knowledge.py b/src/do_tool/tool_can_use/get_knowledge.py index 600afd36..bd4ce86b 100644 --- a/src/do_tool/tool_can_use/get_knowledge.py +++ b/src/do_tool/tool_can_use/get_knowledge.py @@ -1,10 +1,10 @@ from src.do_tool.tool_can_use.base_tool import BaseTool from src.plugins.chat.utils import get_embedding from src.common.database import db -from src.common.logger import get_module_logger +from src.common.logger_manager import get_logger from typing import Dict, Any, Union -logger = get_module_logger("get_knowledge_tool") +logger = get_logger("get_knowledge_tool") class SearchKnowledgeTool(BaseTool): diff --git a/src/do_tool/tool_can_use/get_time_date.py b/src/do_tool/tool_can_use/get_time_date.py index df6067bf..6104026e 100644 --- a/src/do_tool/tool_can_use/get_time_date.py +++ b/src/do_tool/tool_can_use/get_time_date.py @@ -1,9 +1,9 @@ from src.do_tool.tool_can_use.base_tool import BaseTool -from src.common.logger import get_module_logger +from src.common.logger_manager import get_logger from typing import Dict, Any from datetime import datetime -logger = get_module_logger("get_time_date") +logger = get_logger("get_time_date") class GetCurrentDateTimeTool(BaseTool): diff --git a/src/do_tool/tool_can_use/lpmm_get_knowledge.py b/src/do_tool/tool_can_use/lpmm_get_knowledge.py index 7541d48a..7aab8495 100644 --- a/src/do_tool/tool_can_use/lpmm_get_knowledge.py +++ b/src/do_tool/tool_can_use/lpmm_get_knowledge.py @@ -2,12 +2,12 @@ from src.do_tool.tool_can_use.base_tool import BaseTool from src.plugins.chat.utils import get_embedding # from src.common.database import db -from src.common.logger import get_module_logger +from src.common.logger_manager import get_logger from typing import Dict, Any from src.plugins.knowledge.knowledge_lib import qa_manager -logger = get_module_logger("lpmm_get_knowledge_tool") +logger = get_logger("lpmm_get_knowledge_tool") class SearchKnowledgeFromLPMMTool(BaseTool): diff --git a/src/do_tool/tool_use.py b/src/do_tool/tool_use.py index 8087ceda..5b886cb4 100644 --- a/src/do_tool/tool_use.py +++ b/src/do_tool/tool_use.py @@ -1,7 +1,7 @@ from src.plugins.models.utils_model import LLMRequest from src.config.config import global_config import json -from src.common.logger import get_module_logger, TOOL_USE_STYLE_CONFIG, LogConfig +from src.common.logger_manager import get_logger from src.do_tool.tool_can_use import get_all_tool_definitions, get_tool_instance import traceback from src.plugins.person_info.relationship_manager import relationship_manager @@ -9,12 +9,7 @@ from src.plugins.chat.utils import parse_text_timestamps from src.plugins.chat.chat_stream import ChatStream from src.heart_flow.observation import ChattingObservation -tool_use_config = LogConfig( - # 使用消息发送专用样式 - console_format=TOOL_USE_STYLE_CONFIG["console_format"], - file_format=TOOL_USE_STYLE_CONFIG["file_format"], -) -logger = get_module_logger("tool_use", config=tool_use_config) +logger = get_logger("tool_use") class ToolUser: diff --git a/src/heart_flow/background_tasks.py b/src/heart_flow/background_tasks.py index d2bd9321..fd016308 100644 --- a/src/heart_flow/background_tasks.py +++ b/src/heart_flow/background_tasks.py @@ -2,19 +2,15 @@ import asyncio import traceback from typing import Optional, Coroutine, Callable, Any, List -from src.common.logger import get_module_logger, LogConfig, BACKGROUND_TASKS_STYLE_CONFIG +from src.common.logger_manager import get_logger # Need manager types for dependency injection from src.heart_flow.mai_state_manager import MaiStateManager, MaiStateInfo from src.heart_flow.subheartflow_manager import SubHeartflowManager from src.heart_flow.interest_logger import InterestLogger -background_tasks_log_config = LogConfig( - console_format=BACKGROUND_TASKS_STYLE_CONFIG["console_format"], - file_format=BACKGROUND_TASKS_STYLE_CONFIG["file_format"], -) -logger = get_module_logger("background_tasks", config=background_tasks_log_config) +logger = get_logger("background_tasks") # 新增随机停用间隔 (5 分钟) RANDOM_DEACTIVATION_INTERVAL_SECONDS = 300 diff --git a/src/heart_flow/heartflow.py b/src/heart_flow/heartflow.py index a0fb8e4f..f37b7f81 100644 --- a/src/heart_flow/heartflow.py +++ b/src/heart_flow/heartflow.py @@ -2,7 +2,7 @@ from src.heart_flow.sub_heartflow import SubHeartflow from src.plugins.models.utils_model import LLMRequest from src.config.config import global_config from src.plugins.schedule.schedule_generator import bot_schedule -from src.common.logger import get_module_logger, LogConfig, HEARTFLOW_STYLE_CONFIG +from src.common.logger_manager import get_logger from typing import Any, Optional from src.do_tool.tool_use import ToolUser from src.plugins.person_info.relationship_manager import relationship_manager # Module instance @@ -13,11 +13,7 @@ from src.heart_flow.interest_logger import InterestLogger # Import InterestLogg from src.heart_flow.background_tasks import BackgroundTaskManager # Import BackgroundTaskManager # --- End import --- -heartflow_config = LogConfig( - console_format=HEARTFLOW_STYLE_CONFIG["console_format"], - file_format=HEARTFLOW_STYLE_CONFIG["file_format"], -) -logger = get_module_logger("heartflow", config=heartflow_config) +logger = get_logger("heartflow") # Task Intervals (should be in BackgroundTaskManager or config) diff --git a/src/heart_flow/interest_logger.py b/src/heart_flow/interest_logger.py index d4e746e6..04cdb6f4 100644 --- a/src/heart_flow/interest_logger.py +++ b/src/heart_flow/interest_logger.py @@ -5,7 +5,7 @@ import os import traceback from typing import TYPE_CHECKING, Dict, List -from src.common.logger import get_module_logger, LogConfig, INTEREST_STYLE_CONFIG +from src.common.logger_manager import get_logger # Need chat_manager to get stream names from src.plugins.chat.chat_stream import chat_manager @@ -15,11 +15,8 @@ if TYPE_CHECKING: from src.heart_flow.sub_heartflow import SubHeartflow from src.heart_flow.heartflow import Heartflow # 导入 Heartflow 类型 -interest_logger_config = LogConfig( - console_format=INTEREST_STYLE_CONFIG["console_format"], - file_format=INTEREST_STYLE_CONFIG["file_format"], -) -logger = get_module_logger("interest_logger", config=interest_logger_config) + +logger = get_logger("interest") # Consider moving log directory/filename constants here LOG_DIRECTORY = "logs/interest" diff --git a/src/heart_flow/mai_state_manager.py b/src/heart_flow/mai_state_manager.py index 4341e3de..0888ae1f 100644 --- a/src/heart_flow/mai_state_manager.py +++ b/src/heart_flow/mai_state_manager.py @@ -2,15 +2,10 @@ import enum import time import random from typing import List, Tuple, Optional -from src.common.logger import get_module_logger, LogConfig, MAI_STATE_CONFIG +from src.common.logger_manager import get_logger from src.plugins.moods.moods import MoodManager -mai_state_config = LogConfig( - # 使用海马体专用样式 - console_format=MAI_STATE_CONFIG["console_format"], - file_format=MAI_STATE_CONFIG["file_format"], -) -logger = get_module_logger("mai_state_manager", config=mai_state_config) +logger = get_logger("mai_state") # enable_unlimited_hfc_chat = True diff --git a/src/heart_flow/mind.py b/src/heart_flow/mind.py index a40ee6ef..89ffc6a3 100644 --- a/src/heart_flow/mind.py +++ b/src/heart_flow/mind.py @@ -1,7 +1,7 @@ import traceback from typing import TYPE_CHECKING -from src.common.logger import get_module_logger, LogConfig, SUB_HEARTFLOW_MIND_STYLE_CONFIG +from src.common.logger_manager import get_logger from src.plugins.models.utils_model import LLMRequest from src.individuality.individuality import Individuality from src.plugins.utils.prompt_builder import global_prompt_manager @@ -12,12 +12,8 @@ if TYPE_CHECKING: from src.heart_flow.subheartflow_manager import SubHeartflowManager from src.heart_flow.mai_state_manager import MaiStateInfo -mind_log_config = LogConfig( - console_format=SUB_HEARTFLOW_MIND_STYLE_CONFIG["console_format"], - file_format=SUB_HEARTFLOW_MIND_STYLE_CONFIG["file_format"], -) -logger = get_module_logger("mind", config=mind_log_config) +logger = get_logger("sub_heartflow_mind") class Mind: diff --git a/src/heart_flow/observation.py b/src/heart_flow/observation.py index b960154c..040ba9af 100644 --- a/src/heart_flow/observation.py +++ b/src/heart_flow/observation.py @@ -3,7 +3,7 @@ from datetime import datetime from src.plugins.models.utils_model import LLMRequest from src.config.config import global_config -from src.common.logger import get_module_logger +from src.common.logger_manager import get_logger import traceback from src.plugins.utils.chat_message_builder import ( get_raw_msg_before_timestamp_with_chat, @@ -12,7 +12,7 @@ from src.plugins.utils.chat_message_builder import ( num_new_messages_since, ) -logger = get_module_logger("observation") +logger = get_logger("observation") # 所有观察的基类 diff --git a/src/heart_flow/sub_heartflow.py b/src/heart_flow/sub_heartflow.py index 6ea60ea1..f4016068 100644 --- a/src/heart_flow/sub_heartflow.py +++ b/src/heart_flow/sub_heartflow.py @@ -4,7 +4,7 @@ from src.config.config import global_config import time from typing import Optional, List, Dict, Tuple, Callable, Coroutine import traceback -from src.common.logger import get_module_logger, LogConfig, SUB_HEARTFLOW_STYLE_CONFIG # noqa: E402 +from src.common.logger_manager import get_logger import random from src.plugins.chat.message import MessageRecv from src.plugins.chat.chat_stream import chat_manager @@ -24,12 +24,7 @@ from src.heart_flow.sub_mind import SubMind # 定义常量 (从 interest.py 移动过来) MAX_INTEREST = 15.0 -subheartflow_config = LogConfig( - # 使用海马体专用样式 - console_format=SUB_HEARTFLOW_STYLE_CONFIG["console_format"], - file_format=SUB_HEARTFLOW_STYLE_CONFIG["file_format"], -) -logger = get_module_logger("subheartflow", config=subheartflow_config) +logger = get_logger("subheartflow") base_reply_probability = 0.05 probability_increase_rate_per_second = 0.08 diff --git a/src/heart_flow/sub_mind.py b/src/heart_flow/sub_mind.py index f340b717..63979142 100644 --- a/src/heart_flow/sub_mind.py +++ b/src/heart_flow/sub_mind.py @@ -3,7 +3,7 @@ from src.plugins.models.utils_model import LLMRequest from src.config.config import global_config import time import traceback -from src.common.logger import get_module_logger, LogConfig, SUB_HEARTFLOW_STYLE_CONFIG # noqa: E402 +from src.common.logger_manager import get_logger from src.individuality.individuality import Individuality import random from ..plugins.utils.prompt_builder import Prompt, global_prompt_manager @@ -13,11 +13,8 @@ from src.heart_flow.chat_state_info import ChatStateInfo from src.plugins.chat.chat_stream import chat_manager from src.plugins.heartFC_chat.heartFC_Cycleinfo import CycleInfo -subheartflow_config = LogConfig( - console_format=SUB_HEARTFLOW_STYLE_CONFIG["console_format"], - file_format=SUB_HEARTFLOW_STYLE_CONFIG["file_format"], -) -logger = get_module_logger("subheartflow", config=subheartflow_config) + +logger = get_logger("sub_heartflow") def init_prompt(): diff --git a/src/heart_flow/subheartflow_manager.py b/src/heart_flow/subheartflow_manager.py index 6d994d76..db520f6d 100644 --- a/src/heart_flow/subheartflow_manager.py +++ b/src/heart_flow/subheartflow_manager.py @@ -6,7 +6,7 @@ import json # 导入 json 模块 import functools # <-- 新增导入 # 导入日志模块 -from src.common.logger import get_module_logger, LogConfig, SUBHEARTFLOW_MANAGER_STYLE_CONFIG +from src.common.logger_manager import get_logger # 导入聊天流管理模块 from src.plugins.chat.chat_stream import chat_manager @@ -25,11 +25,7 @@ import traceback # 初始化日志记录器 -subheartflow_manager_log_config = LogConfig( - console_format=SUBHEARTFLOW_MANAGER_STYLE_CONFIG["console_format"], - file_format=SUBHEARTFLOW_MANAGER_STYLE_CONFIG["file_format"], -) -logger = get_module_logger("subheartflow_manager", config=subheartflow_manager_log_config) +logger = get_logger("subheartflow_manager") # 子心流管理相关常量 INACTIVE_THRESHOLD_SECONDS = 3600 # 子心流不活跃超时时间(秒) diff --git a/src/main.py b/src/main.py index a2d8fc51..4b5d1bd8 100644 --- a/src/main.py +++ b/src/main.py @@ -13,16 +13,12 @@ from .plugins.chat.message_sender import message_manager from .plugins.storage.storage import MessageStorage from .config.config import global_config from .plugins.chat.bot import chat_bot -from .common.logger import get_module_logger, LogConfig, MAIN_STYLE_CONFIG +from .common.logger_manager import get_logger from .plugins.remote import heartbeat_thread # noqa: F401 from .individuality.individuality import Individuality from .common.server import global_server -main_log_config = LogConfig( - console_format=MAIN_STYLE_CONFIG["console_format"], - file_format=MAIN_STYLE_CONFIG["file_format"], -) -logger = get_module_logger("main", config=main_log_config) +logger = get_logger("main") class MainSystem: diff --git a/src/plugins/PFC/action_planner.py b/src/plugins/PFC/action_planner.py index e29d8c4f..d02a7201 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 -from src.common.logger import get_module_logger, LogConfig, PFC_ACTION_PLANNER_STYLE_CONFIG +from src.common.logger_manager import get_logger from ..models.utils_model import LLMRequest from ...config.config import global_config from .chat_observer import ChatObserver @@ -10,12 +10,9 @@ from .observation_info import ObservationInfo from .conversation_info import ConversationInfo from src.plugins.utils.chat_message_builder import build_readable_messages -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) + +logger = get_logger("pfc_action_planner") # 注意:这个 ActionPlannerInfo 类似乎没有在 ActionPlanner 中使用, diff --git a/src/plugins/PFC/conversation.py b/src/plugins/PFC/conversation.py index 6bcb53fe..de9e7a3b 100644 --- a/src/plugins/PFC/conversation.py +++ b/src/plugins/PFC/conversation.py @@ -10,7 +10,7 @@ from typing import Dict, Any from ..chat.message import Message from .pfc_types import ConversationState from .pfc import ChatObserver, GoalAnalyzer, DirectMessageSender -from src.common.logger import get_module_logger +from src.common.logger_manager import get_logger from .action_planner import ActionPlanner from .observation_info import ObservationInfo from .conversation_info import ConversationInfo @@ -23,7 +23,7 @@ from .waiter import Waiter import traceback -logger = get_module_logger("pfc_conversation") +logger = get_logger("pfc") class Conversation: diff --git a/src/plugins/chat/bot.py b/src/plugins/chat/bot.py index 1202fce2..0ad657f7 100644 --- a/src/plugins/chat/bot.py +++ b/src/plugins/chat/bot.py @@ -5,20 +5,16 @@ from ..PFC.pfc_manager import PFCManager from .chat_stream import chat_manager from .only_message_process import MessageProcessor -from src.common.logger import get_module_logger, CHAT_STYLE_CONFIG, LogConfig +from src.common.logger_manager import get_logger from ..heartFC_chat.heartflow_processor import HeartFCProcessor from ..utils.prompt_builder import Prompt, global_prompt_manager import traceback # 定义日志配置 -chat_config = LogConfig( - # 使用消息发送专用样式 - console_format=CHAT_STYLE_CONFIG["console_format"], - file_format=CHAT_STYLE_CONFIG["file_format"], -) + # 配置主程序日志格式 -logger = get_module_logger("chat_bot", config=chat_config) +logger = get_logger("chat") class ChatBot: diff --git a/src/plugins/chat/chat_stream.py b/src/plugins/chat/chat_stream.py index 9416ebad..2d1334fc 100644 --- a/src/plugins/chat/chat_stream.py +++ b/src/plugins/chat/chat_stream.py @@ -8,14 +8,11 @@ from typing import Dict, Optional from ...common.database import db from maim_message import GroupInfo, UserInfo -from src.common.logger import get_module_logger, LogConfig, CHAT_STREAM_STYLE_CONFIG +from src.common.logger_manager import get_logger -chat_stream_log_config = LogConfig( - console_format=CHAT_STREAM_STYLE_CONFIG["console_format"], - file_format=CHAT_STREAM_STYLE_CONFIG["file_format"], -) -logger = get_module_logger("chat_stream", config=chat_stream_log_config) + +logger = get_logger("chat_stream") class ChatStream: diff --git a/src/plugins/chat/message.py b/src/plugins/chat/message.py index c7f7ac83..525d30c9 100644 --- a/src/plugins/chat/message.py +++ b/src/plugins/chat/message.py @@ -4,12 +4,12 @@ from typing import Dict, List, Optional, Union import urllib3 -from src.common.logger import get_module_logger +from src.common.logger_manager import get_logger from .chat_stream import ChatStream from .utils_image import image_manager from maim_message import Seg, UserInfo, BaseMessageInfo, MessageBase -logger = get_module_logger("chat_message") +logger = get_logger("chat_message") # 禁用SSL警告 urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) diff --git a/src/plugins/chat/message_buffer.py b/src/plugins/chat/message_buffer.py index d76d2328..f3cf63d0 100644 --- a/src/plugins/chat/message_buffer.py +++ b/src/plugins/chat/message_buffer.py @@ -1,5 +1,5 @@ from ..person_info.person_info import person_info_manager -from src.common.logger import get_module_logger +from src.common.logger_manager import get_logger import asyncio from dataclasses import dataclass, field from .message import MessageRecv @@ -11,7 +11,7 @@ import random import time from ...config.config import global_config -logger = get_module_logger("message_buffer") +logger = get_logger("message_buffer") @dataclass diff --git a/src/plugins/chat/message_sender.py b/src/plugins/chat/message_sender.py index d51492f7..0a2199f3 100644 --- a/src/plugins/chat/message_sender.py +++ b/src/plugins/chat/message_sender.py @@ -3,8 +3,6 @@ import asyncio import time from typing import Dict, List, Optional, Union -from src.common.logger import get_module_logger - # from ...common.database import db # 数据库依赖似乎不需要了,注释掉 from ..message.api import global_api from .message import MessageSending, MessageThinking, MessageSet @@ -13,16 +11,10 @@ from ..storage.storage import MessageStorage from ...config.config import global_config from .utils import truncate_message, calculate_typing_time, count_messages_between -from src.common.logger import LogConfig, SENDER_STYLE_CONFIG +from src.common.logger_manager import get_logger -# 定义日志配置 -sender_config = LogConfig( - # 使用消息发送专用样式 - console_format=SENDER_STYLE_CONFIG["console_format"], - file_format=SENDER_STYLE_CONFIG["file_format"], -) -logger = get_module_logger("msg_sender", config=sender_config) +logger = get_logger("sender") class MessageSender: diff --git a/src/plugins/chat/only_message_process.py b/src/plugins/chat/only_message_process.py index 9009ffb1..b1bb0cea 100644 --- a/src/plugins/chat/only_message_process.py +++ b/src/plugins/chat/only_message_process.py @@ -1,10 +1,10 @@ -from src.common.logger import get_module_logger +from src.common.logger_manager import get_logger from src.plugins.chat.message import MessageRecv from src.plugins.storage.storage import MessageStorage from src.config.config import global_config from datetime import datetime -logger = get_module_logger("pfc_message_processor") +logger = get_logger("pfc") class MessageProcessor: diff --git a/src/plugins/chat/utils_image.py b/src/plugins/chat/utils_image.py index f6b9231a..7053e384 100644 --- a/src/plugins/chat/utils_image.py +++ b/src/plugins/chat/utils_image.py @@ -11,9 +11,9 @@ from ...common.database import db from ...config.config import global_config from ..models.utils_model import LLMRequest -from src.common.logger import get_module_logger +from src.common.logger_manager import get_logger -logger = get_module_logger("chat_image") +logger = get_logger("chat_image") class ImageManager: diff --git a/src/plugins/emoji_system/emoji_manager.py b/src/plugins/emoji_system/emoji_manager.py index cf3ebadb..20ba2b5b 100644 --- a/src/plugins/emoji_system/emoji_manager.py +++ b/src/plugins/emoji_system/emoji_manager.py @@ -14,15 +14,11 @@ from ...common.database import db from ...config.config import global_config from ..chat.utils_image import image_path_to_base64, image_manager from ..models.utils_model import LLMRequest -from src.common.logger import get_module_logger, LogConfig, EMOJI_STYLE_CONFIG +from src.common.logger_manager import get_logger -emoji_log_config = LogConfig( - console_format=EMOJI_STYLE_CONFIG["console_format"], - file_format=EMOJI_STYLE_CONFIG["file_format"], -) -logger = get_module_logger("emoji", config=emoji_log_config) +logger = get_logger("emoji") BASE_DIR = os.path.join("data") EMOJI_DIR = os.path.join(BASE_DIR, "emoji") # 表情包存储目录 diff --git a/src/plugins/heartFC_chat/heartFC_chat.py b/src/plugins/heartFC_chat/heartFC_chat.py index 903667b4..3ae3a1c7 100644 --- a/src/plugins/heartFC_chat/heartFC_chat.py +++ b/src/plugins/heartFC_chat/heartFC_chat.py @@ -9,7 +9,7 @@ from src.plugins.chat.message import Seg # Local import needed after move from src.plugins.chat.chat_stream import ChatStream from src.plugins.chat.message import UserInfo from src.plugins.chat.chat_stream import chat_manager -from src.common.logger import get_module_logger, LogConfig, PFC_STYLE_CONFIG # 引入 DEFAULT_CONFIG +from src.common.logger_manager import get_logger from src.plugins.models.utils_model import LLMRequest from src.config.config import global_config from src.plugins.chat.utils_image import image_path_to_base64 # Local import needed after move @@ -30,12 +30,7 @@ from .heartFC_sender import HeartFCSender INITIAL_DURATION = 60.0 -# 定义日志配置 (使用 loguru 格式) -interest_log_config = LogConfig( - console_format=PFC_STYLE_CONFIG["console_format"], # 使用默认控制台格式 - file_format=PFC_STYLE_CONFIG["file_format"], # 使用默认文件格式 -) -logger = get_module_logger("HeartFCLoop", config=interest_log_config) # Logger Name Changed +logger = get_logger("interest") # Logger Name Changed # 默认动作定义 diff --git a/src/plugins/heartFC_chat/heartFC_generator.py b/src/plugins/heartFC_chat/heartFC_generator.py index 43b4d87d..bd7eb2e8 100644 --- a/src/plugins/heartFC_chat/heartFC_generator.py +++ b/src/plugins/heartFC_chat/heartFC_generator.py @@ -6,20 +6,15 @@ from ...config.config import global_config from ..chat.message import MessageRecv from .heartflow_prompt_builder import prompt_builder from ..chat.utils import process_llm_response -from src.common.logger import get_module_logger, LogConfig, LLM_STYLE_CONFIG +from src.common.logger_manager import get_logger from src.plugins.respon_info_catcher.info_catcher import info_catcher_manager from ..utils.timer_calculator import Timer from src.plugins.moods.moods import MoodManager -# 定义日志配置 -llm_config = LogConfig( - # 使用消息发送专用样式 - console_format=LLM_STYLE_CONFIG["console_format"], - file_format=LLM_STYLE_CONFIG["file_format"], -) -logger = get_module_logger("llm_generator", config=llm_config) + +logger = get_logger("llm") class HeartFCGenerator: diff --git a/src/plugins/heartFC_chat/heartFC_sender.py b/src/plugins/heartFC_chat/heartFC_sender.py index d436c668..bfa14f46 100644 --- a/src/plugins/heartFC_chat/heartFC_sender.py +++ b/src/plugins/heartFC_chat/heartFC_sender.py @@ -1,23 +1,16 @@ # src/plugins/heartFC_chat/heartFC_sender.py import asyncio # 重新导入 asyncio from typing import Dict, Optional # 重新导入类型 - -from src.common.logger import get_module_logger from ..message.api import global_api from ..chat.message import MessageSending, MessageThinking # 只保留 MessageSending 和 MessageThinking from ..storage.storage import MessageStorage from ..chat.utils import truncate_message -from src.common.logger import LogConfig, SENDER_STYLE_CONFIG +from src.common.logger_manager import get_logger from src.plugins.chat.utils import calculate_typing_time -# 定义日志配置 -sender_config = LogConfig( - # 使用消息发送专用样式 - console_format=SENDER_STYLE_CONFIG["console_format"], - file_format=SENDER_STYLE_CONFIG["file_format"], -) -logger = get_module_logger("msg_sender", config=sender_config) + +logger = get_logger("sender") class HeartFCSender: diff --git a/src/plugins/heartFC_chat/heartflow_processor.py b/src/plugins/heartFC_chat/heartflow_processor.py index c907f98a..f7f3819c 100644 --- a/src/plugins/heartFC_chat/heartflow_processor.py +++ b/src/plugins/heartFC_chat/heartflow_processor.py @@ -7,19 +7,14 @@ from ..storage.storage import MessageStorage from ..chat.utils import is_mentioned_bot_in_message from maim_message import Seg from src.heart_flow.heartflow import heartflow -from src.common.logger import get_module_logger, CHAT_STYLE_CONFIG, LogConfig +from src.common.logger_manager import get_logger from ..chat.chat_stream import chat_manager from ..chat.message_buffer import message_buffer from ..utils.timer_calculator import Timer from src.plugins.person_info.relationship_manager import relationship_manager from typing import Optional, Tuple -# 定义日志配置 -processor_config = LogConfig( - console_format=CHAT_STYLE_CONFIG["console_format"], - file_format=CHAT_STYLE_CONFIG["file_format"], -) -logger = get_module_logger("heartflow_processor", config=processor_config) +logger = get_logger("chat") class HeartFCProcessor: diff --git a/src/plugins/heartFC_chat/heartflow_prompt_builder.py b/src/plugins/heartFC_chat/heartflow_prompt_builder.py index 4b5218ae..d6141a3c 100644 --- a/src/plugins/heartFC_chat/heartflow_prompt_builder.py +++ b/src/plugins/heartFC_chat/heartflow_prompt_builder.py @@ -1,6 +1,6 @@ import random from ...config.config import global_config -from src.common.logger import get_module_logger +from src.common.logger_manager import get_logger from ...individuality.individuality import Individuality from src.plugins.utils.prompt_builder import Prompt, global_prompt_manager from src.plugins.utils.chat_message_builder import build_readable_messages, get_raw_msg_before_timestamp_with_chat @@ -15,7 +15,7 @@ from ..memory_system.Hippocampus import HippocampusManager from ..schedule.schedule_generator import bot_schedule from ..knowledge.knowledge_lib import qa_manager -logger = get_module_logger("prompt") +logger = get_logger("prompt") def init_prompt(): diff --git a/src/plugins/heartFC_chat/normal_chat.py b/src/plugins/heartFC_chat/normal_chat.py index 890b5a82..ff337164 100644 --- a/src/plugins/heartFC_chat/normal_chat.py +++ b/src/plugins/heartFC_chat/normal_chat.py @@ -14,19 +14,15 @@ from ..chat.message_sender import message_manager from ..chat.utils_image import image_path_to_base64 from ..willing.willing_manager import willing_manager from maim_message import UserInfo, Seg -from src.common.logger import get_module_logger, CHAT_STYLE_CONFIG, LogConfig +from src.common.logger_manager import get_logger from src.plugins.chat.chat_stream import ChatStream, chat_manager from src.plugins.person_info.relationship_manager import relationship_manager from src.plugins.respon_info_catcher.info_catcher import info_catcher_manager from src.plugins.utils.timer_calculator import Timer -# 定义日志配置 -chat_config = LogConfig( - console_format=CHAT_STYLE_CONFIG["console_format"], - file_format=CHAT_STYLE_CONFIG["file_format"], -) -logger = get_module_logger("normal_chat", config=chat_config) + +logger = get_logger("chat") class NormalChat: diff --git a/src/plugins/heartFC_chat/normal_chat_generator.py b/src/plugins/heartFC_chat/normal_chat_generator.py index 52d0f446..862453c7 100644 --- a/src/plugins/heartFC_chat/normal_chat_generator.py +++ b/src/plugins/heartFC_chat/normal_chat_generator.py @@ -6,17 +6,12 @@ from ..chat.message import MessageThinking from .heartflow_prompt_builder import prompt_builder from ..chat.utils import process_llm_response from ..utils.timer_calculator import Timer -from src.common.logger import get_module_logger, LogConfig, LLM_STYLE_CONFIG +from src.common.logger_manager import get_logger from src.plugins.respon_info_catcher.info_catcher import info_catcher_manager -# 定义日志配置 -llm_config = LogConfig( - # 使用消息发送专用样式 - console_format=LLM_STYLE_CONFIG["console_format"], - file_format=LLM_STYLE_CONFIG["file_format"], -) -logger = get_module_logger("llm_generator", config=llm_config) + +logger = get_logger("llm") class NormalChatGenerator: diff --git a/src/plugins/knowledge/src/global_logger.py b/src/plugins/knowledge/src/global_logger.py index 0868428f..eebc88d6 100644 --- a/src/plugins/knowledge/src/global_logger.py +++ b/src/plugins/knowledge/src/global_logger.py @@ -1,10 +1,5 @@ # Configure logger -from src.common.logger import get_module_logger, LogConfig, LPMM_STYLE_CONFIG +from src.common.logger_manager import get_logger -lpmm_log_config = LogConfig( - console_format=LPMM_STYLE_CONFIG["console_format"], - file_format=LPMM_STYLE_CONFIG["file_format"], -) - -logger = get_module_logger("LPMM", config=lpmm_log_config) +logger = get_logger("lpmm") diff --git a/src/plugins/memory_system/Hippocampus.py b/src/plugins/memory_system/Hippocampus.py index 1e8ad885..e69524dc 100644 --- a/src/plugins/memory_system/Hippocampus.py +++ b/src/plugins/memory_system/Hippocampus.py @@ -12,7 +12,7 @@ import numpy as np from collections import Counter from ...common.database import db from ...plugins.models.utils_model import LLMRequest -from src.common.logger import get_module_logger, LogConfig, MEMORY_STYLE_CONFIG +from src.common.logger_manager import get_logger from src.plugins.memory_system.sample_distribution import MemoryBuildScheduler # 分布生成器 from .memory_config import MemoryConfig @@ -83,15 +83,9 @@ def cosine_similarity(v1, v2): return dot_product / (norm1 * norm2) -# 定义日志配置 -memory_config = LogConfig( - # 使用海马体专用样式 - console_format=MEMORY_STYLE_CONFIG["console_format"], - file_format=MEMORY_STYLE_CONFIG["file_format"], -) -logger = get_module_logger("memory_system", config=memory_config) +logger = get_logger("memory") class MemoryGraph: diff --git a/src/plugins/moods/moods.py b/src/plugins/moods/moods.py index eea2177f..1c025319 100644 --- a/src/plugins/moods/moods.py +++ b/src/plugins/moods/moods.py @@ -4,16 +4,12 @@ import time from dataclasses import dataclass from ...config.config import global_config -from src.common.logger import get_module_logger, LogConfig, MOOD_STYLE_CONFIG +from src.common.logger_manager import get_logger from ..person_info.relationship_manager import relationship_manager from src.individuality.individuality import Individuality -mood_config = LogConfig( - # 使用海马体专用样式 - console_format=MOOD_STYLE_CONFIG["console_format"], - file_format=MOOD_STYLE_CONFIG["file_format"], -) -logger = get_module_logger("mood_manager", config=mood_config) + +logger = get_logger("mood") @dataclass diff --git a/src/plugins/person_info/person_info.py b/src/plugins/person_info/person_info.py index 1ec9f6d0..d7300063 100644 --- a/src/plugins/person_info/person_info.py +++ b/src/plugins/person_info/person_info.py @@ -1,4 +1,4 @@ -from src.common.logger import get_module_logger, LogConfig, PERSON_INFO_STYLE_CONFIG +from src.common.logger_manager import get_logger from ...common.database import db import copy import hashlib @@ -33,12 +33,8 @@ PersonInfoManager 类方法功能摘要: 9. personal_habit_deduction - 定时推断个人习惯 """ -person_info_log_config = LogConfig( - console_format=PERSON_INFO_STYLE_CONFIG["console_format"], - file_format=PERSON_INFO_STYLE_CONFIG["file_format"], -) -logger = get_module_logger("person_info", config=person_info_log_config) +logger = get_logger("person_info") person_info_default = { "person_id": None, diff --git a/src/plugins/person_info/relationship_manager.py b/src/plugins/person_info/relationship_manager.py index a688242b..2400da8b 100644 --- a/src/plugins/person_info/relationship_manager.py +++ b/src/plugins/person_info/relationship_manager.py @@ -1,4 +1,4 @@ -from src.common.logger import get_module_logger, LogConfig, RELATION_STYLE_CONFIG +from src.common.logger_manager import get_logger from ..chat.chat_stream import ChatStream import math from bson.decimal128 import Decimal128 @@ -7,12 +7,8 @@ import time import re import traceback -relationship_config = LogConfig( - # 使用关系专用样式 - console_format=RELATION_STYLE_CONFIG["console_format"], - file_format=RELATION_STYLE_CONFIG["file_format"], -) -logger = get_module_logger("rel_manager", config=relationship_config) + +logger = get_logger("relation") class RelationshipManager: From 412efe79d2dae5cb24b16b5d58bf6f7ac166cd1b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 27 Apr 2025 16:22:32 +0000 Subject: [PATCH 2/5] =?UTF-8?q?=F0=9F=A4=96=20=E8=87=AA=E5=8A=A8=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F=E5=8C=96=E4=BB=A3=E7=A0=81=20[skip=20ci]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bot.py | 1 + src/common/logger.py | 22 ++++++++----------- src/common/logger_manager.py | 1 + src/plugins/PFC/action_planner.py | 1 - src/plugins/chat/chat_stream.py | 1 - src/plugins/emoji_system/emoji_manager.py | 1 - src/plugins/heartFC_chat/heartFC_generator.py | 1 - src/plugins/heartFC_chat/heartFC_sender.py | 1 - src/plugins/heartFC_chat/normal_chat.py | 1 - .../heartFC_chat/normal_chat_generator.py | 1 - src/plugins/memory_system/Hippocampus.py | 2 -- 11 files changed, 11 insertions(+), 22 deletions(-) diff --git a/bot.py b/bot.py index 39cdee98..d547c360 100644 --- a/bot.py +++ b/bot.py @@ -9,6 +9,7 @@ import platform import traceback from dotenv import load_dotenv from src.common.logger_manager import get_logger + # from src.common.logger import LogConfig, CONFIRM_STYLE_CONFIG from src.common.crash_logger import install_crash_handler from src.main import MainSystem diff --git a/src/common/logger.py b/src/common/logger.py index f139b499..5b909744 100644 --- a/src/common/logger.py +++ b/src/common/logger.py @@ -662,7 +662,6 @@ TIANYI_STYLE_CONFIG = { ), "file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 天依 | {message}", }, - } # 模型日志样式配置 @@ -795,7 +794,6 @@ LPMM_GET_KNOWLEDGE_TOOL_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"] @@ -835,15 +833,15 @@ PFC_STYLE_CONFIG = PFC_STYLE_CONFIG["simple"] if SIMPLE_OUTPUT else PFC_STYLE_CO LPMM_STYLE_CONFIG = LPMM_STYLE_CONFIG["simple"] if SIMPLE_OUTPUT else LPMM_STYLE_CONFIG["advanced"] INTEREST_STYLE_CONFIG = INTEREST_STYLE_CONFIG["simple"] if SIMPLE_OUTPUT else INTEREST_STYLE_CONFIG["advanced"] TIANYI_STYLE_CONFIG = TIANYI_STYLE_CONFIG["simple"] if SIMPLE_OUTPUT else TIANYI_STYLE_CONFIG["advanced"] -MODEL_UTILS_STYLE_CONFIG = ( - MODEL_UTILS_STYLE_CONFIG["simple"] if SIMPLE_OUTPUT else MODEL_UTILS_STYLE_CONFIG["advanced"] -) +MODEL_UTILS_STYLE_CONFIG = MODEL_UTILS_STYLE_CONFIG["simple"] if SIMPLE_OUTPUT else MODEL_UTILS_STYLE_CONFIG["advanced"] PROMPT_STYLE_CONFIG = PROMPT_STYLE_CONFIG["simple"] if SIMPLE_OUTPUT else PROMPT_STYLE_CONFIG["advanced"] CHANGE_MOOD_TOOL_STYLE_CONFIG = ( CHANGE_MOOD_TOOL_STYLE_CONFIG["simple"] if SIMPLE_OUTPUT else CHANGE_MOOD_TOOL_STYLE_CONFIG["advanced"] ) CHANGE_RELATIONSHIP_TOOL_STYLE_CONFIG = ( - CHANGE_RELATIONSHIP_TOOL_STYLE_CONFIG["simple"] if SIMPLE_OUTPUT else CHANGE_RELATIONSHIP_TOOL_STYLE_CONFIG["advanced"] + CHANGE_RELATIONSHIP_TOOL_STYLE_CONFIG["simple"] + if SIMPLE_OUTPUT + else CHANGE_RELATIONSHIP_TOOL_STYLE_CONFIG["advanced"] ) GET_KNOWLEDGE_TOOL_STYLE_CONFIG = ( GET_KNOWLEDGE_TOOL_STYLE_CONFIG["simple"] if SIMPLE_OUTPUT else GET_KNOWLEDGE_TOOL_STYLE_CONFIG["advanced"] @@ -852,20 +850,18 @@ GET_TIME_DATE_TOOL_STYLE_CONFIG = ( GET_TIME_DATE_TOOL_STYLE_CONFIG["simple"] if SIMPLE_OUTPUT else GET_TIME_DATE_TOOL_STYLE_CONFIG["advanced"] ) LPMM_GET_KNOWLEDGE_TOOL_STYLE_CONFIG = ( - LPMM_GET_KNOWLEDGE_TOOL_STYLE_CONFIG["simple"] if SIMPLE_OUTPUT else LPMM_GET_KNOWLEDGE_TOOL_STYLE_CONFIG["advanced"] -) -OBSERVATION_STYLE_CONFIG = ( - OBSERVATION_STYLE_CONFIG["simple"] if SIMPLE_OUTPUT else OBSERVATION_STYLE_CONFIG["advanced"] + LPMM_GET_KNOWLEDGE_TOOL_STYLE_CONFIG["simple"] + if SIMPLE_OUTPUT + else LPMM_GET_KNOWLEDGE_TOOL_STYLE_CONFIG["advanced"] ) +OBSERVATION_STYLE_CONFIG = OBSERVATION_STYLE_CONFIG["simple"] if SIMPLE_OUTPUT else OBSERVATION_STYLE_CONFIG["advanced"] MESSAGE_BUFFER_STYLE_CONFIG = ( MESSAGE_BUFFER_STYLE_CONFIG["simple"] if SIMPLE_OUTPUT else MESSAGE_BUFFER_STYLE_CONFIG["advanced"] ) CHAT_MESSAGE_STYLE_CONFIG = ( CHAT_MESSAGE_STYLE_CONFIG["simple"] if SIMPLE_OUTPUT else CHAT_MESSAGE_STYLE_CONFIG["advanced"] ) -CHAT_IMAGE_STYLE_CONFIG = ( - CHAT_IMAGE_STYLE_CONFIG["simple"] if SIMPLE_OUTPUT else CHAT_IMAGE_STYLE_CONFIG["advanced"] -) +CHAT_IMAGE_STYLE_CONFIG = CHAT_IMAGE_STYLE_CONFIG["simple"] if SIMPLE_OUTPUT else CHAT_IMAGE_STYLE_CONFIG["advanced"] def is_registered_module(record: dict) -> bool: diff --git a/src/common/logger_manager.py b/src/common/logger_manager.py index 89e4d170..b93f56d7 100644 --- a/src/common/logger_manager.py +++ b/src/common/logger_manager.py @@ -87,6 +87,7 @@ MODULE_LOGGER_CONFIGS = { # ...如有更多模块,继续添加... } + def get_logger(module_name: str): style_config = MODULE_LOGGER_CONFIGS.get(module_name) if style_config: diff --git a/src/plugins/PFC/action_planner.py b/src/plugins/PFC/action_planner.py index 8956c86d..f3e47e37 100644 --- a/src/plugins/PFC/action_planner.py +++ b/src/plugins/PFC/action_planner.py @@ -11,7 +11,6 @@ from .conversation_info import ConversationInfo from src.plugins.utils.chat_message_builder import build_readable_messages - logger = get_logger("pfc_action_planner") diff --git a/src/plugins/chat/chat_stream.py b/src/plugins/chat/chat_stream.py index 2d1334fc..14d02a81 100644 --- a/src/plugins/chat/chat_stream.py +++ b/src/plugins/chat/chat_stream.py @@ -11,7 +11,6 @@ from maim_message import GroupInfo, UserInfo from src.common.logger_manager import get_logger - logger = get_logger("chat_stream") diff --git a/src/plugins/emoji_system/emoji_manager.py b/src/plugins/emoji_system/emoji_manager.py index 20ba2b5b..2055c5ef 100644 --- a/src/plugins/emoji_system/emoji_manager.py +++ b/src/plugins/emoji_system/emoji_manager.py @@ -17,7 +17,6 @@ from ..models.utils_model import LLMRequest from src.common.logger_manager import get_logger - logger = get_logger("emoji") BASE_DIR = os.path.join("data") diff --git a/src/plugins/heartFC_chat/heartFC_generator.py b/src/plugins/heartFC_chat/heartFC_generator.py index bd7eb2e8..9ad5f90c 100644 --- a/src/plugins/heartFC_chat/heartFC_generator.py +++ b/src/plugins/heartFC_chat/heartFC_generator.py @@ -13,7 +13,6 @@ from ..utils.timer_calculator import Timer from src.plugins.moods.moods import MoodManager - logger = get_logger("llm") diff --git a/src/plugins/heartFC_chat/heartFC_sender.py b/src/plugins/heartFC_chat/heartFC_sender.py index bfa14f46..9e65edcf 100644 --- a/src/plugins/heartFC_chat/heartFC_sender.py +++ b/src/plugins/heartFC_chat/heartFC_sender.py @@ -9,7 +9,6 @@ from src.common.logger_manager import get_logger from src.plugins.chat.utils import calculate_typing_time - logger = get_logger("sender") diff --git a/src/plugins/heartFC_chat/normal_chat.py b/src/plugins/heartFC_chat/normal_chat.py index ff337164..e97cbcd2 100644 --- a/src/plugins/heartFC_chat/normal_chat.py +++ b/src/plugins/heartFC_chat/normal_chat.py @@ -21,7 +21,6 @@ from src.plugins.respon_info_catcher.info_catcher import info_catcher_manager from src.plugins.utils.timer_calculator import Timer - logger = get_logger("chat") diff --git a/src/plugins/heartFC_chat/normal_chat_generator.py b/src/plugins/heartFC_chat/normal_chat_generator.py index 862453c7..0ad9707f 100644 --- a/src/plugins/heartFC_chat/normal_chat_generator.py +++ b/src/plugins/heartFC_chat/normal_chat_generator.py @@ -10,7 +10,6 @@ from src.common.logger_manager import get_logger from src.plugins.respon_info_catcher.info_catcher import info_catcher_manager - logger = get_logger("llm") diff --git a/src/plugins/memory_system/Hippocampus.py b/src/plugins/memory_system/Hippocampus.py index e69524dc..10677317 100644 --- a/src/plugins/memory_system/Hippocampus.py +++ b/src/plugins/memory_system/Hippocampus.py @@ -83,8 +83,6 @@ def cosine_similarity(v1, v2): return dot_product / (norm1 * norm2) - - logger = get_logger("memory") From c77f468dfc54140e80d578baf8a8600e1c6f79a9 Mon Sep 17 00:00:00 2001 From: SengokuCola <1026294844@qq.com> Date: Mon, 28 Apr 2025 01:31:59 +0800 Subject: [PATCH 3/5] =?UTF-8?q?fix:V3=E5=93=88=E6=B0=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/heart_flow/mai_state_manager.py | 4 ++-- src/plugins/heartFC_chat/heartFC_chat.py | 9 +++++++++ src/plugins/utils/json_utils.py | 3 +++ 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/heart_flow/mai_state_manager.py b/src/heart_flow/mai_state_manager.py index 0888ae1f..1743df16 100644 --- a/src/heart_flow/mai_state_manager.py +++ b/src/heart_flow/mai_state_manager.py @@ -8,8 +8,8 @@ from src.plugins.moods.moods import MoodManager logger = get_logger("mai_state") -# enable_unlimited_hfc_chat = True -enable_unlimited_hfc_chat = False +enable_unlimited_hfc_chat = True +# enable_unlimited_hfc_chat = False class MaiState(enum.Enum): diff --git a/src/plugins/heartFC_chat/heartFC_chat.py b/src/plugins/heartFC_chat/heartFC_chat.py index 3ae3a1c7..a6ed990a 100644 --- a/src/plugins/heartFC_chat/heartFC_chat.py +++ b/src/plugins/heartFC_chat/heartFC_chat.py @@ -762,9 +762,15 @@ class HeartFChatting: # 执行LLM请求 try: + print("prompt") + print("prompt") + print("prompt") + print(payload) + print(prompt) response = await self.planner_llm._execute_request( endpoint="/chat/completions", payload=payload, prompt=prompt ) + print(response) except Exception as req_e: logger.error(f"{self.log_prefix}[Planner] LLM请求执行失败: {req_e}") return { @@ -779,6 +785,9 @@ class HeartFChatting: # 处理LLM响应 with Timer("使用工具", cycle_timers): # 使用辅助函数处理工具调用响应 + print(1111122222222222) + print(response) + success, arguments, error_msg = process_llm_tool_response( response, expected_tool_name="decide_reply_action", log_prefix=f"{self.log_prefix}[Planner] " ) diff --git a/src/plugins/utils/json_utils.py b/src/plugins/utils/json_utils.py index bf4b0839..44e555dc 100644 --- a/src/plugins/utils/json_utils.py +++ b/src/plugins/utils/json_utils.py @@ -213,6 +213,9 @@ def process_llm_tool_calls(response: List[Any], log_prefix: str = "") -> Tuple[b 元组 (成功标志, 工具调用列表, 错误消息) """ # 确保响应格式正确 + print(response) + print(11111111111111111) + if len(response) != 3: return False, [], f"LLM响应元素数量不正确: 预期3个元素,实际{len(response)}个" From 868e0574449a5d27344cc5fe52284a41ead91b20 Mon Sep 17 00:00:00 2001 From: SengokuCola <1026294844@qq.com> Date: Mon, 28 Apr 2025 01:32:09 +0800 Subject: [PATCH 4/5] =?UTF-8?q?feat=EF=BC=9A=E5=9C=A8=20Planner=20?= =?UTF-8?q?=E4=B8=AD=E6=B7=BB=E5=8A=A0=E5=9B=9E=E5=A4=8D=E8=AE=A1=E6=95=B0?= =?UTF-8?q?=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/heart_flow/0.6.3TODO.md | 18 +-- src/plugins/heartFC_chat/heartFC_chat.py | 105 +++++++++++++----- .../heartFC_chat/heartflow_prompt_builder.py | 1 + src/plugins/utils/json_utils.py | 8 ++ 4 files changed, 95 insertions(+), 37 deletions(-) diff --git a/src/heart_flow/0.6.3TODO.md b/src/heart_flow/0.6.3TODO.md index 4048fec8..5e9e96ab 100644 --- a/src/heart_flow/0.6.3TODO.md +++ b/src/heart_flow/0.6.3TODO.md @@ -1,45 +1,45 @@ # 0.6.3 版本发布前待办事项 -- **统一化人格配置:** +- [0.6.3]**统一化人格配置:** - 检查代码中是否存在硬编码的人格相关配置。 - 将所有硬编码的人格配置替换为使用 `individual` 模块进行管理。 -- **在 Planner 中添加回复计数信息:** +- [0.6.3]**在 Planner 中添加回复计数信息:** - 修改 `HeartFlowChatInstance` 的 `Plan` 阶段逻辑。 - 将当前周期的回复计数(或其他相关统计信息)作为输入提供给 Planner。 - 目的是为 Planner 提供负反馈,减少连续回复或不当回复的可能性。 -- **恢复/检查被停止的功能:** +- [0.6.3]**恢复/检查被停止的功能:** - 全面审查代码,特别是对比之前的版本或设计文档。 - 识别并重新启用那些暂时被禁用但应该恢复的功能。 - 确认没有核心功能意外丢失。 -- **参数提取与配置化:** +- [0.6.3]**参数提取与配置化:** - 识别代码中散落的各种可调参数(例如:概率阈值、时间间隔、次数限制、LLM 模型名称等)。 - 将这些参数统一提取到模块或类的顶部。 - 最终将这些参数移至外部配置文件(如 YAML 或 JSON 文件),方便用户自定义。 -- **提供 HFC (HeartFlowChatInstance) 开启/关闭选项:** +- **[0.6.3]提供 HFC (HeartFlowChatInstance) 开启/关闭选项:** - 增加一个全局或针对特定子心流的配置选项。 - 允许用户控制是否启用 `FOCUSED` 状态以及关联的 `HeartFlowChatInstance`。 - 如果禁用 HFC,子心流可能只会在 `ABSENT` 和 `CHAT` 状态间切换。 -- **添加防破线机制 (针对接收消息):** +- [0.6.3]**添加防破线机制 (针对接收消息):** - 在消息处理流程的早期阶段 (例如 `HeartHC_processor` 或类似模块),增加对接收到的消息文本长度的检查。 - 对超过预设长度阈值的*接收*消息进行截断处理。 - 目的是防止过长的输入(可能包含"破限"提示词)影响后续的兴趣计算、LLM 回复生成等环节。 -- **NormalChat 模式下的记忆与 Prompt 优化:** +- [0.6.3]**NormalChat 模式下的记忆与 Prompt 优化:** - 重点审视 `NormalChatInstance` (闲聊/推理模式) 中记忆调用 (例如 `HippocampusManager` 的使用) 的方式。 - 评估在该模式下引入工具调用 (Tool Calling) 机制以更结构化访问记忆的必要性。 - 优化 `NormalChatInstance` 中与记忆检索、应用相关的 Prompt。 -- **完善简易兴趣监控 GUI:** +- [0.6.3]**完善简易兴趣监控 GUI:** - 改进现有的、用于监控聊天兴趣度 (`InterestChatting`?) 的简单 GUI 界面。 - 使其能更清晰地展示关键参数和状态,作为查看日志之外的更直观的监控方式。 - 作为完整外部 UI 开发完成前的临时替代方案。 -- **修复/完善中期记忆 (Midterm Memory):** +- [0.6.3]**修复/完善中期记忆 (Midterm Memory):** - 检查当前中期记忆模块的状态。 - 修复已知问题,使其能够稳定运行。 - (优先级视开发时间而定) diff --git a/src/plugins/heartFC_chat/heartFC_chat.py b/src/plugins/heartFC_chat/heartFC_chat.py index a6ed990a..7fd2cb80 100644 --- a/src/plugins/heartFC_chat/heartFC_chat.py +++ b/src/plugins/heartFC_chat/heartFC_chat.py @@ -408,7 +408,7 @@ class HeartFChatting: # 在获取规划结果后检查新消息 if await self._check_new_messages(planner_start_db_time): - if random.random() < 0.3: + if random.random() < 0.2: logger.info(f"{self.log_prefix} 看到了新消息,麦麦决定重新观察和规划...") # 重新规划 with Timer("重新决策", cycle_timers): @@ -977,38 +977,87 @@ class HeartFChatting: replan_prompt: str, ) -> str: """构建 Planner LLM 的提示词""" + try: + # 准备结构化信息块 + structured_info_block = "" + if structured_info: + structured_info_block = f"以下是一些额外的信息:\n{structured_info}\n" - # 准备结构化信息块 - structured_info_block = "" - if structured_info: - structured_info_block = f"以下是一些额外的信息:\n{structured_info}\n" + # 准备聊天内容块 + chat_content_block = "" + if observed_messages_str: + chat_content_block = "观察到的最新聊天内容如下:\n---\n" + chat_content_block += observed_messages_str + chat_content_block += "\n---" + else: + chat_content_block = "当前没有观察到新的聊天内容。\n" - # 准备聊天内容块 - chat_content_block = "" - if observed_messages_str: - chat_content_block = "观察到的最新聊天内容如下:\n---\n" - chat_content_block += observed_messages_str - chat_content_block += "\n---" - else: - chat_content_block = "当前没有观察到新的聊天内容。\n" + # 准备当前思维块 + current_mind_block = "" + if current_mind: + current_mind_block = f"{current_mind}" + else: + current_mind_block = "[没有特别的想法]" + + # 准备循环信息块 (分析最近的活动循环) + recent_active_cycles = [] + for cycle in reversed(self._cycle_history): + # 只关心实际执行了动作的循环 + if cycle.action_taken: + recent_active_cycles.append(cycle) + # 最多找最近的3个活动循环 + if len(recent_active_cycles) == 3: + break - # 准备当前思维块 - current_mind_block = "" - if current_mind: - current_mind_block = f"{current_mind}" - else: - current_mind_block = "[没有特别的想法]" + cycle_info_block = "" + consecutive_text_replies = 0 + responses_for_prompt = [] - # 获取提示词模板并填充数据 - prompt = (await global_prompt_manager.get_prompt_async("planner_prompt")).format( - bot_name=global_config.BOT_NICKNAME, - structured_info_block=structured_info_block, - chat_content_block=chat_content_block, - current_mind_block=current_mind_block, - replan=replan_prompt, - ) + # 检查这最近的活动循环中有多少是连续的文本回复 (从最近的开始看) + for cycle in recent_active_cycles: + if cycle.action_type == "text_reply": + consecutive_text_replies += 1 + # 获取回复内容,如果不存在则返回'[空回复]' + response_text = cycle.response_info.get("response_text", []) + # 使用简单的 join 来格式化回复内容列表 + formatted_response = "[空回复]" if not response_text else " ".join(response_text) + responses_for_prompt.append(formatted_response) + else: + # 一旦遇到非文本回复,连续性中断 + break - return prompt + # 根据连续文本回复的数量构建提示信息 + # 注意: responses_for_prompt 列表是从最近到最远排序的 + if consecutive_text_replies >= 3: # 如果最近的三个活动都是文本回复 + cycle_info_block = f'你已经连续回复了三条消息(最近: "{responses_for_prompt[0]}",第二近: "{responses_for_prompt[1]}",第三近: "{responses_for_prompt[2]}")。你回复的有点多了,请注意' + elif consecutive_text_replies == 2: # 如果最近的两个活动是文本回复 + cycle_info_block = f'你已经连续回复了两条消息(最近: "{responses_for_prompt[0]}",第二近: "{responses_for_prompt[1]}"),请注意' + elif consecutive_text_replies == 1: # 如果最近的一个活动是文本回复 + cycle_info_block = f'你刚刚已经回复一条消息(内容: "{responses_for_prompt[0]}")' + + # 包装提示块,增加可读性,即使没有连续回复也给个标记 + if cycle_info_block: + cycle_info_block = f'\n【近期回复历史】\n{cycle_info_block}\n' + else: + # 如果最近的活动循环不是文本回复,或者没有活动循环 + cycle_info_block = '\n【近期回复历史】\n(最近没有连续文本回复)\n' + + # 获取提示词模板并填充数据 + prompt = (await global_prompt_manager.get_prompt_async("planner_prompt")).format( + bot_name=global_config.BOT_NICKNAME, + structured_info_block=structured_info_block, + chat_content_block=chat_content_block, + current_mind_block=current_mind_block, + replan=replan_prompt, + cycle_info_block=cycle_info_block, + ) + + return prompt + + except Exception as e: + logger.error(f"{self.log_prefix}[Planner] 构建提示词时出错: {e}") + logger.error(traceback.format_exc()) + return "" # --- 回复器 (Replier) 的定义 --- # async def _replier_work( diff --git a/src/plugins/heartFC_chat/heartflow_prompt_builder.py b/src/plugins/heartFC_chat/heartflow_prompt_builder.py index d6141a3c..b77c737d 100644 --- a/src/plugins/heartFC_chat/heartflow_prompt_builder.py +++ b/src/plugins/heartFC_chat/heartflow_prompt_builder.py @@ -55,6 +55,7 @@ def init_prompt(): 你的内心想法: {current_mind_block} {replan} +{cycle_info_block} 请综合分析聊天内容和你看到的新消息,参考内心想法,使用'decide_reply_action'工具做出决策。决策时请注意: diff --git a/src/plugins/utils/json_utils.py b/src/plugins/utils/json_utils.py index 44e555dc..b46ac751 100644 --- a/src/plugins/utils/json_utils.py +++ b/src/plugins/utils/json_utils.py @@ -277,7 +277,15 @@ def process_llm_tool_response( if not success: return False, {}, error_msg + # 新增检查:确保响应包含预期的工具调用部分 + if len(normalized_response) != 3: + # 如果长度不为3,说明LLM响应不包含工具调用部分,这在期望工具调用的上下文中是错误的 + error_msg = f"LLM响应未包含预期的工具调用部分: 元素数量{len(normalized_response)},响应内容:{normalized_response}" + logger.warning(f"{log_prefix}{error_msg}") + return False, {}, error_msg + # 使用新的工具调用处理函数 + # 此时已知 normalized_response 长度必定为 3 success, valid_tool_calls, error_msg = process_llm_tool_calls(normalized_response, log_prefix) if not success: return False, {}, error_msg From 40042c91e12a13db8638503ec17885251da0d0d4 Mon Sep 17 00:00:00 2001 From: SengokuCola <1026294844@qq.com> Date: Mon, 28 Apr 2025 01:46:02 +0800 Subject: [PATCH 5/5] fix: ruff --- src/heart_flow/mai_state_manager.py | 4 +- src/heart_flow/sub_mind.py | 48 +++++++++++++++++++++++- src/plugins/heartFC_chat/heartFC_chat.py | 20 +++++----- src/plugins/utils/json_utils.py | 6 ++- 4 files changed, 64 insertions(+), 14 deletions(-) diff --git a/src/heart_flow/mai_state_manager.py b/src/heart_flow/mai_state_manager.py index 1743df16..0888ae1f 100644 --- a/src/heart_flow/mai_state_manager.py +++ b/src/heart_flow/mai_state_manager.py @@ -8,8 +8,8 @@ from src.plugins.moods.moods import MoodManager logger = get_logger("mai_state") -enable_unlimited_hfc_chat = True -# enable_unlimited_hfc_chat = False +# enable_unlimited_hfc_chat = True +enable_unlimited_hfc_chat = False class MaiState(enum.Enum): diff --git a/src/heart_flow/sub_mind.py b/src/heart_flow/sub_mind.py index 63979142..bccead7d 100644 --- a/src/heart_flow/sub_mind.py +++ b/src/heart_flow/sub_mind.py @@ -22,6 +22,7 @@ def init_prompt(): prompt += "{extra_info}\n" prompt += "{prompt_personality}\n" prompt += "{last_loop_prompt}\n" + prompt += "{cycle_info_block}\n" prompt += "现在是{time_now},你正在上网,和qq群里的网友们聊天,以下是正在进行的聊天内容:\n{chat_observe_info}\n" prompt += "\n你现在{mood_info}\n" prompt += ( @@ -66,7 +67,7 @@ class SubMind: self.past_mind = [] self.structured_info = {} - async def do_thinking_before_reply(self, last_cycle: CycleInfo = None): + async def do_thinking_before_reply(self, history_cycle: list[CycleInfo] = None): """ 在回复前进行思考,生成内心想法并收集工具调用结果 @@ -130,6 +131,7 @@ class SubMind: ("进行深入思考", 0.2), ] + last_cycle = history_cycle[-1] if history_cycle else None # 上一次决策信息 if last_cycle != None: last_action = last_cycle.action_type @@ -151,6 +153,49 @@ class SubMind: else: last_loop_prompt = "" + # 准备循环信息块 (分析最近的活动循环) + recent_active_cycles = [] + for cycle in reversed(history_cycle): + # 只关心实际执行了动作的循环 + if cycle.action_taken: + recent_active_cycles.append(cycle) + # 最多找最近的3个活动循环 + if len(recent_active_cycles) == 3: + break + + cycle_info_block = "" + consecutive_text_replies = 0 + responses_for_prompt = [] + + # 检查这最近的活动循环中有多少是连续的文本回复 (从最近的开始看) + for cycle in recent_active_cycles: + if cycle.action_type == "text_reply": + consecutive_text_replies += 1 + # 获取回复内容,如果不存在则返回'[空回复]' + response_text = cycle.response_info.get("response_text", []) + # 使用简单的 join 来格式化回复内容列表 + formatted_response = "[空回复]" if not response_text else " ".join(response_text) + responses_for_prompt.append(formatted_response) + else: + # 一旦遇到非文本回复,连续性中断 + break + + # 根据连续文本回复的数量构建提示信息 + # 注意: responses_for_prompt 列表是从最近到最远排序的 + if consecutive_text_replies >= 3: # 如果最近的三个活动都是文本回复 + cycle_info_block = f'你已经连续回复了三条消息(最近: "{responses_for_prompt[0]}",第二近: "{responses_for_prompt[1]}",第三近: "{responses_for_prompt[2]}")。你回复的有点多了,请注意' + elif consecutive_text_replies == 2: # 如果最近的两个活动是文本回复 + cycle_info_block = f'你已经连续回复了两条消息(最近: "{responses_for_prompt[0]}",第二近: "{responses_for_prompt[1]}"),请注意' + elif consecutive_text_replies == 1: # 如果最近的一个活动是文本回复 + cycle_info_block = f'你刚刚已经回复一条消息(内容: "{responses_for_prompt[0]}")' + + # 包装提示块,增加可读性,即使没有连续回复也给个标记 + if cycle_info_block: + cycle_info_block = f"\n【近期回复历史】\n{cycle_info_block}\n" + else: + # 如果最近的活动循环不是文本回复,或者没有活动循环 + cycle_info_block = "\n【近期回复历史】\n(最近没有连续文本回复)\n" + # 加权随机选择思考指导 hf_do_next = local_random.choices( [option[0] for option in hf_options], weights=[option[1] for option in hf_options], k=1 @@ -167,6 +212,7 @@ class SubMind: mood_info=mood_info, hf_do_next=hf_do_next, last_loop_prompt=last_loop_prompt, + cycle_info_block=cycle_info_block, ) # logger.debug(f"[{self.subheartflow_id}] 心流思考提示词构建完成") diff --git a/src/plugins/heartFC_chat/heartFC_chat.py b/src/plugins/heartFC_chat/heartFC_chat.py index 7fd2cb80..1237378a 100644 --- a/src/plugins/heartFC_chat/heartFC_chat.py +++ b/src/plugins/heartFC_chat/heartFC_chat.py @@ -705,12 +705,14 @@ class HeartFChatting: await observation.observe() # 获取上一个循环的信息 - last_cycle = self._cycle_history[-1] if self._cycle_history else None + # last_cycle = self._cycle_history[-1] if self._cycle_history else None with Timer("思考", cycle_timers): # 获取上一个循环的动作 # 传递上一个循环的信息给 do_thinking_before_reply - current_mind, _past_mind = await self.sub_mind.do_thinking_before_reply(last_cycle=last_cycle) + current_mind, _past_mind = await self.sub_mind.do_thinking_before_reply( + history_cycle=self._cycle_history + ) return current_mind except Exception as e: logger.error(f"{self.log_prefix}[SubMind] 思考失败: {e}") @@ -787,7 +789,7 @@ class HeartFChatting: # 使用辅助函数处理工具调用响应 print(1111122222222222) print(response) - + success, arguments, error_msg = process_llm_tool_response( response, expected_tool_name="decide_reply_action", log_prefix=f"{self.log_prefix}[Planner] " ) @@ -998,7 +1000,7 @@ class HeartFChatting: current_mind_block = f"{current_mind}" else: current_mind_block = "[没有特别的想法]" - + # 准备循环信息块 (分析最近的活动循环) recent_active_cycles = [] for cycle in reversed(self._cycle_history): @@ -1028,19 +1030,19 @@ class HeartFChatting: # 根据连续文本回复的数量构建提示信息 # 注意: responses_for_prompt 列表是从最近到最远排序的 - if consecutive_text_replies >= 3: # 如果最近的三个活动都是文本回复 + if consecutive_text_replies >= 3: # 如果最近的三个活动都是文本回复 cycle_info_block = f'你已经连续回复了三条消息(最近: "{responses_for_prompt[0]}",第二近: "{responses_for_prompt[1]}",第三近: "{responses_for_prompt[2]}")。你回复的有点多了,请注意' - elif consecutive_text_replies == 2: # 如果最近的两个活动是文本回复 + elif consecutive_text_replies == 2: # 如果最近的两个活动是文本回复 cycle_info_block = f'你已经连续回复了两条消息(最近: "{responses_for_prompt[0]}",第二近: "{responses_for_prompt[1]}"),请注意' - elif consecutive_text_replies == 1: # 如果最近的一个活动是文本回复 + elif consecutive_text_replies == 1: # 如果最近的一个活动是文本回复 cycle_info_block = f'你刚刚已经回复一条消息(内容: "{responses_for_prompt[0]}")' # 包装提示块,增加可读性,即使没有连续回复也给个标记 if cycle_info_block: - cycle_info_block = f'\n【近期回复历史】\n{cycle_info_block}\n' + cycle_info_block = f"\n【近期回复历史】\n{cycle_info_block}\n" else: # 如果最近的活动循环不是文本回复,或者没有活动循环 - cycle_info_block = '\n【近期回复历史】\n(最近没有连续文本回复)\n' + cycle_info_block = "\n【近期回复历史】\n(最近没有连续文本回复)\n" # 获取提示词模板并填充数据 prompt = (await global_prompt_manager.get_prompt_async("planner_prompt")).format( diff --git a/src/plugins/utils/json_utils.py b/src/plugins/utils/json_utils.py index b46ac751..a76c83e3 100644 --- a/src/plugins/utils/json_utils.py +++ b/src/plugins/utils/json_utils.py @@ -215,7 +215,7 @@ def process_llm_tool_calls(response: List[Any], log_prefix: str = "") -> Tuple[b # 确保响应格式正确 print(response) print(11111111111111111) - + if len(response) != 3: return False, [], f"LLM响应元素数量不正确: 预期3个元素,实际{len(response)}个" @@ -280,7 +280,9 @@ def process_llm_tool_response( # 新增检查:确保响应包含预期的工具调用部分 if len(normalized_response) != 3: # 如果长度不为3,说明LLM响应不包含工具调用部分,这在期望工具调用的上下文中是错误的 - error_msg = f"LLM响应未包含预期的工具调用部分: 元素数量{len(normalized_response)},响应内容:{normalized_response}" + error_msg = ( + f"LLM响应未包含预期的工具调用部分: 元素数量{len(normalized_response)},响应内容:{normalized_response}" + ) logger.warning(f"{log_prefix}{error_msg}") return False, {}, error_msg