pull/1001/head
SnowindMe 2025-04-28 03:00:59 +08:00
commit b9febdc515
45 changed files with 564 additions and 274 deletions

16
bot.py
View File

@ -8,21 +8,15 @@ import time
import platform import platform
import traceback import traceback
from dotenv import load_dotenv 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.common.crash_logger import install_crash_handler
from src.main import MainSystem from src.main import MainSystem
main_log_config = LogConfig( logger = get_logger("main")
console_format=MAIN_STYLE_CONFIG["console_format"], confirm_logger = get_logger("confirm")
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)
# 获取没有加载env时的环境变量 # 获取没有加载env时的环境变量
env_mask = {key: os.getenv(key) for key in os.environ} env_mask = {key: os.getenv(key) for key in os.environ}

View File

@ -426,6 +426,24 @@ CHAT_STREAM_STYLE_CONFIG = {
}, },
} }
CHAT_MESSAGE_STYLE_CONFIG = {
"advanced": {
"console_format": (
"<white>{time:YYYY-MM-DD HH:mm:ss}</white> | "
"<level>{level: <8}</level> | "
"<light-blue>聊天消息</light-blue> | "
"<level>{message}</level>"
),
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 聊天消息 | {message}",
},
"simple": {
"console_format": (
"<level>{time:MM-DD HH:mm}</level> | <light-blue>聊天消息</light-blue> | <light-blue>{message}</light-blue>"
), # noqa: E501
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 聊天消息 | {message}",
},
}
PERSON_INFO_STYLE_CONFIG = { PERSON_INFO_STYLE_CONFIG = {
"advanced": { "advanced": {
"console_format": ( "console_format": (
@ -567,6 +585,42 @@ LPMM_STYLE_CONFIG = {
}, },
} }
OBSERVATION_STYLE_CONFIG = {
"advanced": {
"console_format": (
"<white>{time:YYYY-MM-DD HH:mm:ss}</white> | "
"<level>{level: <8}</level> | "
"<light-yellow>聊天观察</light-yellow> | "
"<level>{message}</level>"
),
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 聊天观察 | {message}",
},
"simple": {
"console_format": (
"<level>{time:MM-DD HH:mm}</level> | <light-yellow>聊天观察</light-yellow> | <light-yellow>{message}</light-yellow>"
), # noqa: E501
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 聊天观察 | {message}",
},
}
CHAT_IMAGE_STYLE_CONFIG = {
"advanced": {
"console_format": (
"<white>{time:YYYY-MM-DD HH:mm:ss}</white> | "
"<level>{level: <8}</level> | "
"<light-yellow>聊天图片</light-yellow> | "
"<level>{message}</level>"
),
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 聊天图片 | {message}",
},
"simple": {
"console_format": (
"<level>{time:MM-DD HH:mm}</level> | <light-yellow>聊天图片</light-yellow> | <light-yellow>{message}</light-yellow>"
), # noqa: E501
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 聊天图片 | {message}",
},
}
# 兴趣log # 兴趣log
INTEREST_STYLE_CONFIG = { INTEREST_STYLE_CONFIG = {
"advanced": { "advanced": {
@ -610,6 +664,136 @@ TIANYI_STYLE_CONFIG = {
}, },
} }
# 模型日志样式配置
MODEL_UTILS_STYLE_CONFIG = {
"advanced": {
"console_format": (
"<white>{time:YYYY-MM-DD HH:mm:ss}</white> | "
"<level>{level: <8}</level> | "
"<light-yellow>模型</light-yellow> | "
"<level>{message}</level>"
),
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 模型 | {message}",
},
"simple": {
"console_format": "<level>{time:MM-DD HH:mm}</level> | <light-green>模型</light-green> | {message}",
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 模型 | {message}",
},
}
MESSAGE_BUFFER_STYLE_CONFIG = {
"advanced": {
"console_format": (
"<white>{time:YYYY-MM-DD HH:mm:ss}</white> | "
"<level>{level: <8}</level> | "
"<light-yellow>消息缓存</light-yellow> | "
"<level>{message}</level>"
),
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 消息缓存 | {message}",
},
"simple": {
"console_format": "<level>{time:MM-DD HH:mm}</level> | <light-green>消息缓存</light-green> | {message}",
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 消息缓存 | {message}",
},
}
PROMPT_STYLE_CONFIG = {
"advanced": {
"console_format": (
"<white>{time:YYYY-MM-DD HH:mm:ss}</white> | "
"<level>{level: <8}</level> | "
"<light-yellow>提示词构建</light-yellow> | "
"<level>{message}</level>"
),
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 提示词构建 | {message}",
},
"simple": {
"console_format": "<level>{time:MM-DD HH:mm}</level> | <light-green>提示词构建</light-green> | {message}",
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 提示词构建 | {message}",
},
}
CHANGE_MOOD_TOOL_STYLE_CONFIG = {
"advanced": {
"console_format": (
"<white>{time:YYYY-MM-DD HH:mm:ss}</white> | "
"<level>{level: <8}</level> | "
"<fg #3FC1C9>心情工具</fg #3FC1C9> | "
"<level>{message}</level>"
),
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 心情工具 | {message}",
},
"simple": {
"console_format": "<level>{time:MM-DD HH:mm}</level> | <light-green>心情工具</light-green> | {message}",
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 心情工具 | {message}",
},
}
CHANGE_RELATIONSHIP_TOOL_STYLE_CONFIG = {
"advanced": {
"console_format": (
"<white>{time:YYYY-MM-DD HH:mm:ss}</white> | "
"<level>{level: <8}</level> | "
"<fg #3FC1C9>关系工具</fg #3FC1C9> | "
"<level>{message}</level>"
),
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 关系工具 | {message}",
},
"simple": {
"console_format": "<level>{time:MM-DD HH:mm}</level> | <light-green>关系工具</light-green> | {message}",
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 关系工具 | {message}",
},
}
GET_KNOWLEDGE_TOOL_STYLE_CONFIG = {
"advanced": {
"console_format": (
"<white>{time:YYYY-MM-DD HH:mm:ss}</white> | "
"<level>{level: <8}</level> | "
"<fg #3FC1C9>获取知识</fg #3FC1C9> | "
"<level>{message}</level>"
),
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 获取知识 | {message}",
},
"simple": {
"console_format": "<level>{time:MM-DD HH:mm}</level> | <light-green>获取知识</light-green> | {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": (
"<white>{time:YYYY-MM-DD HH:mm:ss}</white> | "
"<level>{level: <8}</level> | "
"<fg #3FC1C9>获取时间日期</fg #3FC1C9> | "
"<level>{message}</level>"
),
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 获取时间日期 | {message}",
},
"simple": {
"console_format": "<level>{time:MM-DD HH:mm}</level> | <light-green>获取时间日期</light-green> | {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": (
"<white>{time:YYYY-MM-DD HH:mm:ss}</white> | "
"<level>{level: <8}</level> | "
"<fg #3FC1C9>LPMM获取知识</fg #3FC1C9> | "
"<level>{message}</level>"
),
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | LPMM获取知识 | {message}",
},
"simple": {
"console_format": "<level>{time:MM-DD HH:mm}</level> | <light-green>LPMM获取知识</light-green> | {message}",
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | LPMM获取知识 | {message}",
},
}
# 根据SIMPLE_OUTPUT选择配置 # 根据SIMPLE_OUTPUT选择配置
MAIN_STYLE_CONFIG = MAIN_STYLE_CONFIG["simple"] if SIMPLE_OUTPUT else MAIN_STYLE_CONFIG["advanced"] 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"] EMOJI_STYLE_CONFIG = EMOJI_STYLE_CONFIG["simple"] if SIMPLE_OUTPUT else EMOJI_STYLE_CONFIG["advanced"]
@ -649,6 +833,35 @@ 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"] 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"] 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"] 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: def is_registered_module(record: dict) -> bool:

View File

@ -0,0 +1,100 @@
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)

View File

@ -13,17 +13,11 @@ from packaging import version
from packaging.version import Version, InvalidVersion from packaging.version import Version, InvalidVersion
from packaging.specifiers import SpecifierSet, InvalidSpecifier 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是不会自动更新的,所以采用硬编码 # 考虑到实际上配置文件中的mai_version是不会自动更新的,所以采用硬编码
is_test = True is_test = True

View File

@ -1,11 +1,11 @@
from src.do_tool.tool_can_use.base_tool import BaseTool from src.do_tool.tool_can_use.base_tool import BaseTool
from src.config.config import global_config 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 src.plugins.moods.moods import MoodManager
from typing import Dict, Any from typing import Dict, Any
logger = get_module_logger("change_mood_tool") logger = get_logger("change_mood_tool")
class ChangeMoodTool(BaseTool): class ChangeMoodTool(BaseTool):

View File

@ -1,9 +1,9 @@
from typing import Dict, Any 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 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): class RelationshipTool(BaseTool):

View File

@ -4,14 +4,9 @@ import inspect
import importlib import importlib
import pkgutil import pkgutil
import os 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( logger = get_logger("base_tool")
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)
# 工具注册表 # 工具注册表
TOOL_REGISTRY = {} TOOL_REGISTRY = {}

View File

@ -1,10 +1,10 @@
from src.do_tool.tool_can_use.base_tool import BaseTool from src.do_tool.tool_can_use.base_tool import BaseTool
from src.plugins.chat.utils import get_embedding from src.plugins.chat.utils import get_embedding
from src.common.database import db 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 from typing import Dict, Any, Union
logger = get_module_logger("get_knowledge_tool") logger = get_logger("get_knowledge_tool")
class SearchKnowledgeTool(BaseTool): class SearchKnowledgeTool(BaseTool):

View File

@ -1,8 +1,8 @@
from src.do_tool.tool_can_use.base_tool import BaseTool, run_lua_code 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 typing import Dict, Any
logger = get_module_logger("get_time_date") logger = get_logger("get_time_date")
class GetCurrentDateTimeTool(BaseTool): class GetCurrentDateTimeTool(BaseTool):

View File

@ -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.plugins.chat.utils import get_embedding
# from src.common.database import db # 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 typing import Dict, Any
from src.plugins.knowledge.knowledge_lib import qa_manager 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): class SearchKnowledgeFromLPMMTool(BaseTool):

View File

@ -1,7 +1,7 @@
from src.plugins.models.utils_model import LLMRequest from src.plugins.models.utils_model import LLMRequest
from src.config.config import global_config from src.config.config import global_config
import json 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 from src.do_tool.tool_can_use import get_all_tool_definitions, get_tool_instance
import traceback import traceback
from src.plugins.person_info.relationship_manager import relationship_manager 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.plugins.chat.chat_stream import ChatStream
from src.heart_flow.observation import ChattingObservation from src.heart_flow.observation import ChattingObservation
tool_use_config = LogConfig( logger = get_logger("tool_use")
# 使用消息发送专用样式
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)
class ToolUser: class ToolUser:

View File

@ -1,45 +1,45 @@
# 0.6.3 版本发布前待办事项 # 0.6.3 版本发布前待办事项
- **统一化人格配置:** - [0.6.3]**统一化人格配置:**
- 检查代码中是否存在硬编码的人格相关配置。 - 检查代码中是否存在硬编码的人格相关配置。
- 将所有硬编码的人格配置替换为使用 `individual` 模块进行管理。 - 将所有硬编码的人格配置替换为使用 `individual` 模块进行管理。
- **在 Planner 中添加回复计数信息:** - [0.6.3]**在 Planner 中添加回复计数信息:**
- 修改 `HeartFlowChatInstance``Plan` 阶段逻辑。 - 修改 `HeartFlowChatInstance``Plan` 阶段逻辑。
- 将当前周期的回复计数(或其他相关统计信息)作为输入提供给 Planner。 - 将当前周期的回复计数(或其他相关统计信息)作为输入提供给 Planner。
- 目的是为 Planner 提供负反馈,减少连续回复或不当回复的可能性。 - 目的是为 Planner 提供负反馈,减少连续回复或不当回复的可能性。
- **恢复/检查被停止的功能:** - [0.6.3]**恢复/检查被停止的功能:**
- 全面审查代码,特别是对比之前的版本或设计文档。 - 全面审查代码,特别是对比之前的版本或设计文档。
- 识别并重新启用那些暂时被禁用但应该恢复的功能。 - 识别并重新启用那些暂时被禁用但应该恢复的功能。
- 确认没有核心功能意外丢失。 - 确认没有核心功能意外丢失。
- **参数提取与配置化:** - [0.6.3]**参数提取与配置化:**
- 识别代码中散落的各种可调参数例如概率阈值、时间间隔、次数限制、LLM 模型名称等)。 - 识别代码中散落的各种可调参数例如概率阈值、时间间隔、次数限制、LLM 模型名称等)。
- 将这些参数统一提取到模块或类的顶部。 - 将这些参数统一提取到模块或类的顶部。
- 最终将这些参数移至外部配置文件(如 YAML 或 JSON 文件),方便用户自定义。 - 最终将这些参数移至外部配置文件(如 YAML 或 JSON 文件),方便用户自定义。
- **提供 HFC (HeartFlowChatInstance) 开启/关闭选项:** - **[0.6.3]提供 HFC (HeartFlowChatInstance) 开启/关闭选项:**
- 增加一个全局或针对特定子心流的配置选项。 - 增加一个全局或针对特定子心流的配置选项。
- 允许用户控制是否启用 `FOCUSED` 状态以及关联的 `HeartFlowChatInstance` - 允许用户控制是否启用 `FOCUSED` 状态以及关联的 `HeartFlowChatInstance`
- 如果禁用 HFC子心流可能只会在 `ABSENT``CHAT` 状态间切换。 - 如果禁用 HFC子心流可能只会在 `ABSENT``CHAT` 状态间切换。
- **添加防破线机制 (针对接收消息):** - [0.6.3]**添加防破线机制 (针对接收消息):**
- 在消息处理流程的早期阶段 (例如 `HeartHC_processor` 或类似模块),增加对接收到的消息文本长度的检查。 - 在消息处理流程的早期阶段 (例如 `HeartHC_processor` 或类似模块),增加对接收到的消息文本长度的检查。
- 对超过预设长度阈值的*接收*消息进行截断处理。 - 对超过预设长度阈值的*接收*消息进行截断处理。
- 目的是防止过长的输入(可能包含"破限"提示词影响后续的兴趣计算、LLM 回复生成等环节。 - 目的是防止过长的输入(可能包含"破限"提示词影响后续的兴趣计算、LLM 回复生成等环节。
- **NormalChat 模式下的记忆与 Prompt 优化:** - [0.6.3]**NormalChat 模式下的记忆与 Prompt 优化:**
- 重点审视 `NormalChatInstance` (闲聊/推理模式) 中记忆调用 (例如 `HippocampusManager` 的使用) 的方式。 - 重点审视 `NormalChatInstance` (闲聊/推理模式) 中记忆调用 (例如 `HippocampusManager` 的使用) 的方式。
- 评估在该模式下引入工具调用 (Tool Calling) 机制以更结构化访问记忆的必要性。 - 评估在该模式下引入工具调用 (Tool Calling) 机制以更结构化访问记忆的必要性。
- 优化 `NormalChatInstance` 中与记忆检索、应用相关的 Prompt。 - 优化 `NormalChatInstance` 中与记忆检索、应用相关的 Prompt。
- **完善简易兴趣监控 GUI:** - [0.6.3]**完善简易兴趣监控 GUI:**
- 改进现有的、用于监控聊天兴趣度 (`InterestChatting`?) 的简单 GUI 界面。 - 改进现有的、用于监控聊天兴趣度 (`InterestChatting`?) 的简单 GUI 界面。
- 使其能更清晰地展示关键参数和状态,作为查看日志之外的更直观的监控方式。 - 使其能更清晰地展示关键参数和状态,作为查看日志之外的更直观的监控方式。
- 作为完整外部 UI 开发完成前的临时替代方案。 - 作为完整外部 UI 开发完成前的临时替代方案。
- **修复/完善中期记忆 (Midterm Memory):** - [0.6.3]**修复/完善中期记忆 (Midterm Memory):**
- 检查当前中期记忆模块的状态。 - 检查当前中期记忆模块的状态。
- 修复已知问题,使其能够稳定运行。 - 修复已知问题,使其能够稳定运行。
- (优先级视开发时间而定) - (优先级视开发时间而定)

View File

@ -2,19 +2,15 @@ import asyncio
import traceback import traceback
from typing import Optional, Coroutine, Callable, Any, List 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 # Need manager types for dependency injection
from src.heart_flow.mai_state_manager import MaiStateManager, MaiStateInfo from src.heart_flow.mai_state_manager import MaiStateManager, MaiStateInfo
from src.heart_flow.subheartflow_manager import SubHeartflowManager from src.heart_flow.subheartflow_manager import SubHeartflowManager
from src.heart_flow.interest_logger import InterestLogger 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 分钟) # 新增随机停用间隔 (5 分钟)
RANDOM_DEACTIVATION_INTERVAL_SECONDS = 300 RANDOM_DEACTIVATION_INTERVAL_SECONDS = 300

View File

@ -2,7 +2,7 @@ from src.heart_flow.sub_heartflow import SubHeartflow
from src.plugins.models.utils_model import LLMRequest from src.plugins.models.utils_model import LLMRequest
from src.config.config import global_config from src.config.config import global_config
from src.plugins.schedule.schedule_generator import bot_schedule 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 typing import Any, Optional
from src.do_tool.tool_use import ToolUser from src.do_tool.tool_use import ToolUser
from src.plugins.person_info.relationship_manager import relationship_manager # Module instance 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 from src.heart_flow.background_tasks import BackgroundTaskManager # Import BackgroundTaskManager
# --- End import --- # --- End import ---
heartflow_config = LogConfig( logger = get_logger("heartflow")
console_format=HEARTFLOW_STYLE_CONFIG["console_format"],
file_format=HEARTFLOW_STYLE_CONFIG["file_format"],
)
logger = get_module_logger("heartflow", config=heartflow_config)
# Task Intervals (should be in BackgroundTaskManager or config) # Task Intervals (should be in BackgroundTaskManager or config)

View File

@ -5,7 +5,7 @@ import os
import traceback import traceback
from typing import TYPE_CHECKING, Dict, List 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 # Need chat_manager to get stream names
from src.plugins.chat.chat_stream import chat_manager 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.sub_heartflow import SubHeartflow
from src.heart_flow.heartflow import Heartflow # 导入 Heartflow 类型 from src.heart_flow.heartflow import Heartflow # 导入 Heartflow 类型
interest_logger_config = LogConfig(
console_format=INTEREST_STYLE_CONFIG["console_format"], logger = get_logger("interest")
file_format=INTEREST_STYLE_CONFIG["file_format"],
)
logger = get_module_logger("interest_logger", config=interest_logger_config)
# Consider moving log directory/filename constants here # Consider moving log directory/filename constants here
LOG_DIRECTORY = "logs/interest" LOG_DIRECTORY = "logs/interest"

View File

@ -2,15 +2,10 @@ import enum
import time import time
import random import random
from typing import List, Tuple, Optional 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 from src.plugins.moods.moods import MoodManager
mai_state_config = LogConfig( logger = get_logger("mai_state")
# 使用海马体专用样式
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)
# enable_unlimited_hfc_chat = True # enable_unlimited_hfc_chat = True

View File

@ -1,7 +1,7 @@
import traceback import traceback
from typing import TYPE_CHECKING 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.plugins.models.utils_model import LLMRequest
from src.individuality.individuality import Individuality from src.individuality.individuality import Individuality
from src.plugins.utils.prompt_builder import global_prompt_manager 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.subheartflow_manager import SubHeartflowManager
from src.heart_flow.mai_state_manager import MaiStateInfo 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: class Mind:

View File

@ -3,7 +3,7 @@
from datetime import datetime from datetime import datetime
from src.plugins.models.utils_model import LLMRequest from src.plugins.models.utils_model import LLMRequest
from src.config.config import global_config 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 import traceback
from src.plugins.utils.chat_message_builder import ( from src.plugins.utils.chat_message_builder import (
get_raw_msg_before_timestamp_with_chat, get_raw_msg_before_timestamp_with_chat,
@ -12,7 +12,7 @@ from src.plugins.utils.chat_message_builder import (
num_new_messages_since, num_new_messages_since,
) )
logger = get_module_logger("observation") logger = get_logger("observation")
# 所有观察的基类 # 所有观察的基类

View File

@ -4,7 +4,7 @@ from src.config.config import global_config
import time import time
from typing import Optional, List, Dict, Tuple, Callable, Coroutine from typing import Optional, List, Dict, Tuple, Callable, Coroutine
import traceback 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 import random
from src.plugins.chat.message import MessageRecv from src.plugins.chat.message import MessageRecv
from src.plugins.chat.chat_stream import chat_manager from src.plugins.chat.chat_stream import chat_manager
@ -24,12 +24,7 @@ from src.heart_flow.sub_mind import SubMind
# 定义常量 (从 interest.py 移动过来) # 定义常量 (从 interest.py 移动过来)
MAX_INTEREST = 15.0 MAX_INTEREST = 15.0
subheartflow_config = LogConfig( logger = get_logger("subheartflow")
# 使用海马体专用样式
console_format=SUB_HEARTFLOW_STYLE_CONFIG["console_format"],
file_format=SUB_HEARTFLOW_STYLE_CONFIG["file_format"],
)
logger = get_module_logger("subheartflow", config=subheartflow_config)
base_reply_probability = 0.05 base_reply_probability = 0.05
probability_increase_rate_per_second = 0.08 probability_increase_rate_per_second = 0.08

View File

@ -3,7 +3,7 @@ from src.plugins.models.utils_model import LLMRequest
from src.config.config import global_config from src.config.config import global_config
import time import time
import traceback 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 from src.individuality.individuality import Individuality
import random import random
from ..plugins.utils.prompt_builder import Prompt, global_prompt_manager 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.chat.chat_stream import chat_manager
from src.plugins.heartFC_chat.heartFC_Cycleinfo import CycleInfo from src.plugins.heartFC_chat.heartFC_Cycleinfo import CycleInfo
subheartflow_config = LogConfig(
console_format=SUB_HEARTFLOW_STYLE_CONFIG["console_format"], logger = get_logger("sub_heartflow")
file_format=SUB_HEARTFLOW_STYLE_CONFIG["file_format"],
)
logger = get_module_logger("subheartflow", config=subheartflow_config)
def init_prompt(): def init_prompt():
@ -25,6 +22,7 @@ def init_prompt():
prompt += "{extra_info}\n" prompt += "{extra_info}\n"
prompt += "{prompt_personality}\n" prompt += "{prompt_personality}\n"
prompt += "{last_loop_prompt}\n" prompt += "{last_loop_prompt}\n"
prompt += "{cycle_info_block}\n"
prompt += "现在是{time_now}你正在上网和qq群里的网友们聊天以下是正在进行的聊天内容\n{chat_observe_info}\n" prompt += "现在是{time_now}你正在上网和qq群里的网友们聊天以下是正在进行的聊天内容\n{chat_observe_info}\n"
prompt += "\n你现在{mood_info}\n" prompt += "\n你现在{mood_info}\n"
prompt += ( prompt += (
@ -69,7 +67,7 @@ class SubMind:
self.past_mind = [] self.past_mind = []
self.structured_info = {} 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):
""" """
在回复前进行思考生成内心想法并收集工具调用结果 在回复前进行思考生成内心想法并收集工具调用结果
@ -133,6 +131,7 @@ class SubMind:
("进行深入思考", 0.2), ("进行深入思考", 0.2),
] ]
last_cycle = history_cycle[-1] if history_cycle else None
# 上一次决策信息 # 上一次决策信息
if last_cycle != None: if last_cycle != None:
last_action = last_cycle.action_type last_action = last_cycle.action_type
@ -154,6 +153,49 @@ class SubMind:
else: else:
last_loop_prompt = "" 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( hf_do_next = local_random.choices(
[option[0] for option in hf_options], weights=[option[1] for option in hf_options], k=1 [option[0] for option in hf_options], weights=[option[1] for option in hf_options], k=1
@ -170,6 +212,7 @@ class SubMind:
mood_info=mood_info, mood_info=mood_info,
hf_do_next=hf_do_next, hf_do_next=hf_do_next,
last_loop_prompt=last_loop_prompt, last_loop_prompt=last_loop_prompt,
cycle_info_block=cycle_info_block,
) )
# logger.debug(f"[{self.subheartflow_id}] 心流思考提示词构建完成") # logger.debug(f"[{self.subheartflow_id}] 心流思考提示词构建完成")

View File

@ -6,7 +6,7 @@ import json # 导入 json 模块
import functools # <-- 新增导入 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 from src.plugins.chat.chat_stream import chat_manager
@ -25,11 +25,7 @@ import traceback
# 初始化日志记录器 # 初始化日志记录器
subheartflow_manager_log_config = LogConfig( logger = get_logger("subheartflow_manager")
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)
# 子心流管理相关常量 # 子心流管理相关常量
INACTIVE_THRESHOLD_SECONDS = 3600 # 子心流不活跃超时时间(秒) INACTIVE_THRESHOLD_SECONDS = 3600 # 子心流不活跃超时时间(秒)

View File

@ -13,16 +13,12 @@ from .plugins.chat.message_sender import message_manager
from .plugins.storage.storage import MessageStorage from .plugins.storage.storage import MessageStorage
from .config.config import global_config from .config.config import global_config
from .plugins.chat.bot import chat_bot 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 .plugins.remote import heartbeat_thread # noqa: F401
from .individuality.individuality import Individuality from .individuality.individuality import Individuality
from .common.server import global_server from .common.server import global_server
main_log_config = LogConfig( logger = get_logger("main")
console_format=MAIN_STYLE_CONFIG["console_format"],
file_format=MAIN_STYLE_CONFIG["file_format"],
)
logger = get_module_logger("main", config=main_log_config)
class MainSystem: class MainSystem:

View File

@ -1,6 +1,6 @@
import time import time
from typing import Tuple 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 ..models.utils_model import LLMRequest
from ...config.config import global_config from ...config.config import global_config
from .chat_observer import ChatObserver from .chat_observer import ChatObserver
@ -10,12 +10,8 @@ from .observation_info import ObservationInfo
from .conversation_info import ConversationInfo from .conversation_info import ConversationInfo
from src.plugins.utils.chat_message_builder import build_readable_messages 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 中使用, # 注意:这个 ActionPlannerInfo 类似乎没有在 ActionPlanner 中使用,

View File

@ -10,7 +10,7 @@ from typing import Dict, Any, Optional
from ..chat.message import Message from ..chat.message import Message
from .pfc_types import ConversationState from .pfc_types import ConversationState
from .pfc import ChatObserver, GoalAnalyzer, DirectMessageSender 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 .action_planner import ActionPlanner
from .observation_info import ObservationInfo from .observation_info import ObservationInfo
from .conversation_info import ConversationInfo from .conversation_info import ConversationInfo
@ -23,7 +23,7 @@ from .waiter import Waiter
import traceback import traceback
logger = get_module_logger("pfc_conversation") logger = get_logger("pfc")
class Conversation: class Conversation:

View File

@ -5,20 +5,16 @@ from ..PFC.pfc_manager import PFCManager
from .chat_stream import chat_manager from .chat_stream import chat_manager
from .only_message_process import MessageProcessor 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 ..heartFC_chat.heartflow_processor import HeartFCProcessor
from ..utils.prompt_builder import Prompt, global_prompt_manager from ..utils.prompt_builder import Prompt, global_prompt_manager
import traceback 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: class ChatBot:

View File

@ -8,14 +8,10 @@ from typing import Dict, Optional
from ...common.database import db from ...common.database import db
from maim_message import GroupInfo, UserInfo 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: class ChatStream:

View File

@ -4,12 +4,12 @@ from typing import Dict, List, Optional, Union
import urllib3 import urllib3
from src.common.logger import get_module_logger from src.common.logger_manager import get_logger
from .chat_stream import ChatStream from .chat_stream import ChatStream
from .utils_image import image_manager from .utils_image import image_manager
from maim_message import Seg, UserInfo, BaseMessageInfo, MessageBase from maim_message import Seg, UserInfo, BaseMessageInfo, MessageBase
logger = get_module_logger("chat_message") logger = get_logger("chat_message")
# 禁用SSL警告 # 禁用SSL警告
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

View File

@ -1,5 +1,5 @@
from ..person_info.person_info import person_info_manager 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 import asyncio
from dataclasses import dataclass, field from dataclasses import dataclass, field
from .message import MessageRecv from .message import MessageRecv
@ -11,7 +11,7 @@ import random
import time import time
from ...config.config import global_config from ...config.config import global_config
logger = get_module_logger("message_buffer") logger = get_logger("message_buffer")
@dataclass @dataclass

View File

@ -3,8 +3,6 @@ import asyncio
import time import time
from typing import Dict, List, Optional, Union from typing import Dict, List, Optional, Union
from src.common.logger import get_module_logger
# from ...common.database import db # 数据库依赖似乎不需要了,注释掉 # from ...common.database import db # 数据库依赖似乎不需要了,注释掉
from ..message.api import global_api from ..message.api import global_api
from .message import MessageSending, MessageThinking, MessageSet from .message import MessageSending, MessageThinking, MessageSet
@ -13,16 +11,10 @@ from ..storage.storage import MessageStorage
from ...config.config import global_config from ...config.config import global_config
from .utils import truncate_message, calculate_typing_time, count_messages_between 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: class MessageSender:

View File

@ -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.chat.message import MessageRecv
from src.plugins.storage.storage import MessageStorage from src.plugins.storage.storage import MessageStorage
from src.config.config import global_config from src.config.config import global_config
from datetime import datetime from datetime import datetime
logger = get_module_logger("pfc_message_processor") logger = get_logger("pfc")
class MessageProcessor: class MessageProcessor:

View File

@ -11,9 +11,9 @@ from ...common.database import db
from ...config.config import global_config from ...config.config import global_config
from ..models.utils_model import LLMRequest 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: class ImageManager:

View File

@ -14,15 +14,10 @@ from ...common.database import db
from ...config.config import global_config from ...config.config import global_config
from ..chat.utils_image import image_path_to_base64, image_manager from ..chat.utils_image import image_path_to_base64, image_manager
from ..models.utils_model import LLMRequest 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( logger = get_logger("emoji")
console_format=EMOJI_STYLE_CONFIG["console_format"],
file_format=EMOJI_STYLE_CONFIG["file_format"],
)
logger = get_module_logger("emoji", config=emoji_log_config)
BASE_DIR = os.path.join("data") BASE_DIR = os.path.join("data")
EMOJI_DIR = os.path.join(BASE_DIR, "emoji") # 表情包存储目录 EMOJI_DIR = os.path.join(BASE_DIR, "emoji") # 表情包存储目录

View File

@ -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.chat_stream import ChatStream
from src.plugins.chat.message import UserInfo from src.plugins.chat.message import UserInfo
from src.plugins.chat.chat_stream import chat_manager 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.plugins.models.utils_model import LLMRequest
from src.config.config import global_config from src.config.config import global_config
from src.plugins.chat.utils_image import image_path_to_base64 # Local import needed after move 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 INITIAL_DURATION = 60.0
# 定义日志配置 (使用 loguru 格式) logger = get_logger("interest") # Logger Name Changed
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
# 默认动作定义 # 默认动作定义
@ -413,7 +408,7 @@ class HeartFChatting:
# 在获取规划结果后检查新消息 # 在获取规划结果后检查新消息
if await self._check_new_messages(planner_start_db_time): 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} 看到了新消息,麦麦决定重新观察和规划...") logger.info(f"{self.log_prefix} 看到了新消息,麦麦决定重新观察和规划...")
# 重新规划 # 重新规划
with Timer("重新决策", cycle_timers): with Timer("重新决策", cycle_timers):
@ -710,12 +705,14 @@ class HeartFChatting:
await observation.observe() 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): with Timer("思考", cycle_timers):
# 获取上一个循环的动作 # 获取上一个循环的动作
# 传递上一个循环的信息给 do_thinking_before_reply # 传递上一个循环的信息给 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 return current_mind
except Exception as e: except Exception as e:
logger.error(f"{self.log_prefix}[SubMind] 思考失败: {e}") logger.error(f"{self.log_prefix}[SubMind] 思考失败: {e}")
@ -767,9 +764,15 @@ class HeartFChatting:
# 执行LLM请求 # 执行LLM请求
try: try:
print("prompt")
print("prompt")
print("prompt")
print(payload)
print(prompt)
response = await self.planner_llm._execute_request( response = await self.planner_llm._execute_request(
endpoint="/chat/completions", payload=payload, prompt=prompt endpoint="/chat/completions", payload=payload, prompt=prompt
) )
print(response)
except Exception as req_e: except Exception as req_e:
logger.error(f"{self.log_prefix}[Planner] LLM请求执行失败: {req_e}") logger.error(f"{self.log_prefix}[Planner] LLM请求执行失败: {req_e}")
return { return {
@ -784,6 +787,9 @@ class HeartFChatting:
# 处理LLM响应 # 处理LLM响应
with Timer("使用工具", cycle_timers): with Timer("使用工具", cycle_timers):
# 使用辅助函数处理工具调用响应 # 使用辅助函数处理工具调用响应
print(1111122222222222)
print(response)
success, arguments, error_msg = process_llm_tool_response( success, arguments, error_msg = process_llm_tool_response(
response, expected_tool_name="decide_reply_action", log_prefix=f"{self.log_prefix}[Planner] " response, expected_tool_name="decide_reply_action", log_prefix=f"{self.log_prefix}[Planner] "
) )
@ -973,38 +979,87 @@ class HeartFChatting:
replan_prompt: str, replan_prompt: str,
) -> str: ) -> str:
"""构建 Planner LLM 的提示词""" """构建 Planner LLM 的提示词"""
try:
# 准备结构化信息块
structured_info_block = ""
if structured_info:
structured_info_block = f"以下是一些额外的信息:\n{structured_info}\n"
# 准备结构化信息块 # 准备聊天内容块
structured_info_block = "" chat_content_block = ""
if structured_info: if observed_messages_str:
structured_info_block = f"以下是一些额外的信息:\n{structured_info}\n" chat_content_block = "观察到的最新聊天内容如下:\n---\n"
chat_content_block += observed_messages_str
chat_content_block += "\n---"
else:
chat_content_block = "当前没有观察到新的聊天内容。\n"
# 准备聊天内容块 # 准备当前思维块
chat_content_block = "" current_mind_block = ""
if observed_messages_str: if current_mind:
chat_content_block = "观察到的最新聊天内容如下:\n---\n" current_mind_block = f"{current_mind}"
chat_content_block += observed_messages_str else:
chat_content_block += "\n---" current_mind_block = "[没有特别的想法]"
else:
chat_content_block = "当前没有观察到新的聊天内容。\n"
# 准备当前思维块 # 准备循环信息块 (分析最近的活动循环)
current_mind_block = "" recent_active_cycles = []
if current_mind: for cycle in reversed(self._cycle_history):
current_mind_block = f"{current_mind}" # 只关心实际执行了动作的循环
else: if cycle.action_taken:
current_mind_block = "[没有特别的想法]" recent_active_cycles.append(cycle)
# 最多找最近的3个活动循环
if len(recent_active_cycles) == 3:
break
# 获取提示词模板并填充数据 cycle_info_block = ""
prompt = (await global_prompt_manager.get_prompt_async("planner_prompt")).format( consecutive_text_replies = 0
bot_name=global_config.BOT_NICKNAME, responses_for_prompt = []
structured_info_block=structured_info_block,
chat_content_block=chat_content_block,
current_mind_block=current_mind_block,
replan=replan_prompt,
)
return 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"
# 获取提示词模板并填充数据
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) 的定义 --- # # --- 回复器 (Replier) 的定义 --- #
async def _replier_work( async def _replier_work(

View File

@ -6,20 +6,14 @@ from ...config.config import global_config
from ..chat.message import MessageRecv from ..chat.message import MessageRecv
from .heartflow_prompt_builder import prompt_builder from .heartflow_prompt_builder import prompt_builder
from ..chat.utils import process_llm_response 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 src.plugins.respon_info_catcher.info_catcher import info_catcher_manager
from ..utils.timer_calculator import Timer from ..utils.timer_calculator import Timer
from src.plugins.moods.moods import MoodManager 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: class HeartFCGenerator:

View File

@ -1,23 +1,15 @@
# src/plugins/heartFC_chat/heartFC_sender.py # src/plugins/heartFC_chat/heartFC_sender.py
import asyncio # 重新导入 asyncio import asyncio # 重新导入 asyncio
from typing import Dict, Optional # 重新导入类型 from typing import Dict, Optional # 重新导入类型
from src.common.logger import get_module_logger
from ..message.api import global_api from ..message.api import global_api
from ..chat.message import MessageSending, MessageThinking # 只保留 MessageSending 和 MessageThinking from ..chat.message import MessageSending, MessageThinking # 只保留 MessageSending 和 MessageThinking
from ..storage.storage import MessageStorage from ..storage.storage import MessageStorage
from ..chat.utils import truncate_message 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 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: class HeartFCSender:

View File

@ -7,19 +7,14 @@ from ..storage.storage import MessageStorage
from ..chat.utils import is_mentioned_bot_in_message from ..chat.utils import is_mentioned_bot_in_message
from maim_message import Seg from maim_message import Seg
from src.heart_flow.heartflow import heartflow 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.chat_stream import chat_manager
from ..chat.message_buffer import message_buffer from ..chat.message_buffer import message_buffer
from ..utils.timer_calculator import Timer from ..utils.timer_calculator import Timer
from src.plugins.person_info.relationship_manager import relationship_manager from src.plugins.person_info.relationship_manager import relationship_manager
from typing import Optional, Tuple from typing import Optional, Tuple
# 定义日志配置 logger = get_logger("chat")
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)
class HeartFCProcessor: class HeartFCProcessor:

View File

@ -1,6 +1,6 @@
import random import random
from ...config.config import global_config 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 ...individuality.individuality import Individuality
from src.plugins.utils.prompt_builder import Prompt, global_prompt_manager 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 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 ..schedule.schedule_generator import bot_schedule
from ..knowledge.knowledge_lib import qa_manager from ..knowledge.knowledge_lib import qa_manager
logger = get_module_logger("prompt") logger = get_logger("prompt")
def init_prompt(): def init_prompt():
@ -55,6 +55,7 @@ def init_prompt():
你的内心想法 你的内心想法
{current_mind_block} {current_mind_block}
{replan} {replan}
{cycle_info_block}
请综合分析聊天内容和你看到的新消息参考内心想法使用'decide_reply_action'工具做出决策决策时请注意 请综合分析聊天内容和你看到的新消息参考内心想法使用'decide_reply_action'工具做出决策决策时请注意

View File

@ -14,19 +14,14 @@ from ..chat.message_sender import message_manager
from ..chat.utils_image import image_path_to_base64 from ..chat.utils_image import image_path_to_base64
from ..willing.willing_manager import willing_manager from ..willing.willing_manager import willing_manager
from maim_message import UserInfo, Seg 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.chat.chat_stream import ChatStream, chat_manager
from src.plugins.person_info.relationship_manager import relationship_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.respon_info_catcher.info_catcher import info_catcher_manager
from src.plugins.utils.timer_calculator import Timer 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: class NormalChat:

View File

@ -6,17 +6,11 @@ from ..chat.message import MessageThinking
from .heartflow_prompt_builder import prompt_builder from .heartflow_prompt_builder import prompt_builder
from ..chat.utils import process_llm_response from ..chat.utils import process_llm_response
from ..utils.timer_calculator import Timer 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 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: class NormalChatGenerator:

View File

@ -1,10 +1,5 @@
# Configure logger # 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( logger = get_logger("lpmm")
console_format=LPMM_STYLE_CONFIG["console_format"],
file_format=LPMM_STYLE_CONFIG["file_format"],
)
logger = get_module_logger("LPMM", config=lpmm_log_config)

View File

@ -12,7 +12,7 @@ import numpy as np
from collections import Counter from collections import Counter
from ...common.database import db from ...common.database import db
from ...plugins.models.utils_model import LLMRequest 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 src.plugins.memory_system.sample_distribution import MemoryBuildScheduler # 分布生成器
from .memory_config import MemoryConfig from .memory_config import MemoryConfig
@ -83,15 +83,7 @@ def cosine_similarity(v1, v2):
return dot_product / (norm1 * norm2) return dot_product / (norm1 * norm2)
# 定义日志配置 logger = get_logger("memory")
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)
class MemoryGraph: class MemoryGraph:

View File

@ -4,16 +4,12 @@ import time
from dataclasses import dataclass from dataclasses import dataclass
from ...config.config import global_config 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 ..person_info.relationship_manager import relationship_manager
from src.individuality.individuality import Individuality from src.individuality.individuality import Individuality
mood_config = LogConfig(
# 使用海马体专用样式 logger = get_logger("mood")
console_format=MOOD_STYLE_CONFIG["console_format"],
file_format=MOOD_STYLE_CONFIG["file_format"],
)
logger = get_module_logger("mood_manager", config=mood_config)
@dataclass @dataclass

View File

@ -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 from ...common.database import db
import copy import copy
import hashlib import hashlib
@ -33,12 +33,8 @@ PersonInfoManager 类方法功能摘要:
9. personal_habit_deduction - 定时推断个人习惯 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_info_default = {
"person_id": None, "person_id": None,

View File

@ -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 from ..chat.chat_stream import ChatStream
import math import math
from bson.decimal128 import Decimal128 from bson.decimal128 import Decimal128
@ -7,12 +7,8 @@ import time
import re import re
import traceback import traceback
relationship_config = LogConfig(
# 使用关系专用样式 logger = get_logger("relation")
console_format=RELATION_STYLE_CONFIG["console_format"],
file_format=RELATION_STYLE_CONFIG["file_format"],
)
logger = get_module_logger("rel_manager", config=relationship_config)
class RelationshipManager: class RelationshipManager:

View File

@ -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: if len(response) != 3:
return False, [], f"LLM响应元素数量不正确: 预期3个元素实际{len(response)}" return False, [], f"LLM响应元素数量不正确: 预期3个元素实际{len(response)}"
@ -274,7 +277,17 @@ def process_llm_tool_response(
if not success: if not success:
return False, {}, error_msg 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) success, valid_tool_calls, error_msg = process_llm_tool_calls(normalized_response, log_prefix)
if not success: if not success:
return False, {}, error_msg return False, {}, error_msg