From e2d478441d7a88f9a44e484785714e046d12868c Mon Sep 17 00:00:00 2001 From: SengokuCola <1026294844@qq.com> Date: Tue, 3 Jun 2025 20:33:01 +0800 Subject: [PATCH] =?UTF-8?q?fix=EF=BC=9A=E4=BC=98=E5=8C=96=E8=A1=A8?= =?UTF-8?q?=E8=BE=BE=E6=96=B9=E5=BC=8Flog=E5=92=8C=E6=9C=80=E5=A4=A7?= =?UTF-8?q?=E8=A1=A8=E8=BE=BE=E6=95=B0=E9=87=8F=EF=BC=8C=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E6=96=87=E4=BB=B6=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../expressors/exprssion_learner.py | 23 ++++++++++++++----- src/chat/heart_flow/sub_heartflow.py | 6 ++--- template/bot_config_template.toml | 13 +++++++---- 3 files changed, 29 insertions(+), 13 deletions(-) diff --git a/src/chat/focus_chat/expressors/exprssion_learner.py b/src/chat/focus_chat/expressors/exprssion_learner.py index afee74afc..dc862f96b 100644 --- a/src/chat/focus_chat/expressors/exprssion_learner.py +++ b/src/chat/focus_chat/expressors/exprssion_learner.py @@ -7,10 +7,11 @@ from src.config.config import global_config from src.chat.utils.chat_message_builder import get_raw_msg_by_timestamp_random, build_anonymous_messages from src.chat.utils.prompt_builder import Prompt, global_prompt_manager import os +from src.chat.message_receive.chat_stream import chat_manager import json -MAX_EXPRESSION_COUNT = 100 +MAX_EXPRESSION_COUNT = 300 logger = get_logger("expressor") @@ -129,9 +130,19 @@ class ExpressionLearner: type_str = "句法特点" else: raise ValueError(f"Invalid type: {type}") - logger.info(f"开始学习{type_str}...") - learnt_expressions: Optional[List[Tuple[str, str, str]]] = await self.learn_expression(type, num) - logger.info(f"学习到{len(learnt_expressions) if learnt_expressions else 0}条{type_str}") + # logger.info(f"开始学习{type_str}...") + learnt_expressions,chat_id = await self.learn_expression(type, num) + + chat_stream = chat_manager.get_stream(chat_id) + if chat_stream.group_info: + group_name = chat_stream.group_info.group_name + else: + group_name = f"{chat_stream.user_info.user_nickname}的私聊" + learnt_expressions_str = "" + for _chat_id, situation, style in learnt_expressions: + + learnt_expressions_str += f"{situation}->{style}\n" + logger.info(f"在 {group_name} 学习到{type_str}:\n{learnt_expressions_str}") # learnt_expressions: List[(chat_id, situation, style)] if not learnt_expressions: @@ -188,7 +199,7 @@ class ExpressionLearner: json.dump(old_data, f, ensure_ascii=False, indent=2) return learnt_expressions - async def learn_expression(self, type: str, num: int = 10) -> Optional[List[Tuple[str, str, str]]]: + async def learn_expression(self, type: str, num: int = 10) -> Optional[Tuple[List[Tuple[str, str, str]], str]]: """选择从当前到最近1小时内的随机num条消息,然后学习这些消息的表达方式 Args: @@ -233,7 +244,7 @@ class ExpressionLearner: expressions: List[Tuple[str, str, str]] = self.parse_expression_response(response, chat_id) - return expressions + return expressions,chat_id def parse_expression_response(self, response: str, chat_id: str) -> List[Tuple[str, str, str]]: """ diff --git a/src/chat/heart_flow/sub_heartflow.py b/src/chat/heart_flow/sub_heartflow.py index 13c6c0df3..8a488c576 100644 --- a/src/chat/heart_flow/sub_heartflow.py +++ b/src/chat/heart_flow/sub_heartflow.py @@ -75,9 +75,9 @@ class SubHeartflow: self.log_prefix = ( chat_manager.get_stream_name(self.subheartflow_id) or self.subheartflow_id ) # Keep this line or adjust if utils provides name - logger.debug( - f"SubHeartflow {self.chat_id} initialized: is_group={self.is_group_chat}, target_info={self.chat_target_info}" - ) + # logger.debug( + # f"SubHeartflow {self.chat_id} initialized: is_group={self.is_group_chat}, target_info={self.chat_target_info}" + # ) # 根据配置决定初始状态 if global_config.chat.chat_mode == "focus": diff --git a/template/bot_config_template.toml b/template/bot_config_template.toml index 667a4bd62..06262904b 100644 --- a/template/bot_config_template.toml +++ b/template/bot_config_template.toml @@ -109,7 +109,6 @@ planner_type = "simple" # 规划器类型,可选值:complex(复杂规划 self_identify_processor = true # 是否启用自我识别处理器 relation_processor = true # 是否启用关系识别处理器 tool_use_processor = false # 是否启用工具使用处理器 -mind_processor = false # 是否启用思维处理器 working_memory_processor = false # 是否启用工作记忆处理器,消耗量大 [emoji] @@ -135,7 +134,7 @@ consolidate_memory_interval = 2000 # 记忆整合间隔 单位秒 间隔越低 consolidation_similarity_threshold = 0.7 # 相似度阈值 consolidation_check_percentage = 0.01 # 检查节点比例 -#不希望记忆的词,已经记忆的不会受到影响 +#不希望记忆的词,已经记忆的不会受到影响,需要手动清理 memory_ban_words = [ "表情包", "图片", "回复", "聊天记录" ] [mood] # 仅在 普通聊天 有效 @@ -143,11 +142,17 @@ mood_update_interval = 1.0 # 情绪更新间隔 单位秒 mood_decay_rate = 0.95 # 情绪衰减率 mood_intensity_factor = 1.0 # 情绪强度因子 -# 规则 + +# keyword_rules 用于设置关键词触发的额外回复知识 +# 添加新规则方法:在 keyword_rules 数组中增加一项,格式如下: +# { keywords = ["关键词1", "关键词2"], reaction = "触发这些关键词时的回复内容" } +# 例如,添加一个新规则:当检测到“你好”或“hello”时回复“你好,有什么可以帮你?” +# { keywords = ["你好", "hello"], reaction = "你好,有什么可以帮你?" } [keyword_reaction] keyword_rules = [ { keywords = ["人机", "bot", "机器", "入机", "robot", "机器人", "ai", "AI"], reaction = "有人说你是人机或者机器人,否定这一事实,攻击或反问他。注意,只有认为你是机器人才回复,否则不要否认" }, { keywords = ["测试关键词回复", "test"], reaction = "回答测试成功" } + # 在此处添加更多规则,格式同上 ] regex_rules = [ @@ -164,7 +169,7 @@ word_replace_rate=0.006 # 整词替换概率 [response_splitter] enable = true # 是否启用回复分割器 max_length = 512 # 回复允许的最大长度 -max_sentence_num = 7 # 回复允许的最大句子数 +max_sentence_num = 8 # 回复允许的最大句子数 enable_kaomoji_protection = false # 是否启用颜文字保护