From 7c73e2f31920e5c955f1c05073582808490703b8 Mon Sep 17 00:00:00 2001 From: SengokuCola <1026294844@qq.com> Date: Sat, 8 Mar 2025 16:46:28 +0800 Subject: [PATCH] =?UTF-8?q?fix=20=E6=80=9D=E8=80=83=E8=80=85=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=EF=BC=8C=E5=9B=9E=E5=A4=8D=E6=84=8F=E6=84=BF=E6=8F=90?= =?UTF-8?q?=E4=BE=9B=E8=87=AA=E5=AE=9A=E4=B9=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 参考新的template文件 --- src/plugins/chat/bot.py | 7 +++++-- src/plugins/chat/config.py | 10 ++++++++++ src/plugins/chat/message_sender.py | 6 ++++++ src/plugins/chat/willing_manager.py | 15 +++++++++++---- src/plugins/memory_system/memory.py | 9 ++++++--- src/plugins/models/utils_model.py | 19 +++++++++++++------ template/bot_config_template.toml | 5 +++++ 7 files changed, 56 insertions(+), 15 deletions(-) diff --git a/src/plugins/chat/bot.py b/src/plugins/chat/bot.py index cf0ac1ec1..a02c4a059 100644 --- a/src/plugins/chat/bot.py +++ b/src/plugins/chat/bot.py @@ -1,6 +1,4 @@ import time - -# from .message_stream import MessageStream, MessageStreamContainer from random import random from loguru import logger @@ -129,6 +127,11 @@ class ChatBot: container.messages.remove(msg) # print(f"\033[1;32m[思考消息删除]\033[0m 已找到思考消息对象,开始删除") break + + # 如果找不到思考消息,直接返回 + if not thinking_message: + print(f"\033[1;33m[警告]\033[0m 未找到对应的思考消息,可能已超时被移除") + return #记录开始思考的时间,避免从思考到回复的时间太久 thinking_start_time = thinking_message.thinking_start_time diff --git a/src/plugins/chat/config.py b/src/plugins/chat/config.py index 4fa75bad7..fd65c116d 100644 --- a/src/plugins/chat/config.py +++ b/src/plugins/chat/config.py @@ -21,6 +21,12 @@ class BotConfig: talk_allowed_groups = set() talk_frequency_down_groups = set() + thinking_timeout: int = 100 # 思考时间 + + response_willing_amplifier: float = 1.0 # 回复意愿放大系数 + response_interested_rate_amplifier: float = 1.0 # 回复兴趣度放大系数 + down_frequency_rate: float = 3.5 # 降低回复频率的群组回复意愿降低系数 + ban_user_id = set() build_memory_interval: int = 30 # 记忆构建间隔(秒) @@ -172,6 +178,10 @@ class BotConfig: config.MAX_CONTEXT_SIZE = msg_config.get("max_context_size", config.MAX_CONTEXT_SIZE) config.emoji_chance = msg_config.get("emoji_chance", config.emoji_chance) config.ban_words=msg_config.get("ban_words",config.ban_words) + config.thinking_timeout = msg_config.get("thinking_timeout", config.thinking_timeout) + config.response_willing_amplifier = msg_config.get("response_willing_amplifier", config.response_willing_amplifier) + config.response_interested_rate_amplifier = msg_config.get("response_interested_rate_amplifier", config.response_interested_rate_amplifier) + config.down_frequency_rate = msg_config.get("down_frequency_rate", config.down_frequency_rate) if "memory" in toml_dict: memory_config = toml_dict["memory"] diff --git a/src/plugins/chat/message_sender.py b/src/plugins/chat/message_sender.py index 5c36f0e7f..050c59d74 100644 --- a/src/plugins/chat/message_sender.py +++ b/src/plugins/chat/message_sender.py @@ -8,6 +8,7 @@ from .cq_code import cq_code_tool from .message import Message, Message_Sending, Message_Thinking, MessageSet from .storage import MessageStorage from .utils import calculate_typing_time +from .config import global_config class Message_Sender: @@ -162,6 +163,11 @@ class MessageManager: message_earliest.update_thinking_time() thinking_time = message_earliest.thinking_time print(f"\033[1;34m[调试]\033[0m 消息正在思考中,已思考{int(thinking_time)}秒\033[K\r", end='', flush=True) + + # 检查是否超时 + if thinking_time > global_config.thinking_timeout: + print(f"\033[1;33m[警告]\033[0m 消息思考超时({thinking_time}秒),移除该消息") + container.remove_message(message_earliest) else:# 如果不是message_thinking就只能是message_sending print(f"\033[1;34m[调试]\033[0m 消息'{message_earliest.processed_plain_text}'正在发送中") #直接发,等什么呢 diff --git a/src/plugins/chat/willing_manager.py b/src/plugins/chat/willing_manager.py index b27587a70..001b66207 100644 --- a/src/plugins/chat/willing_manager.py +++ b/src/plugins/chat/willing_manager.py @@ -1,4 +1,5 @@ import asyncio +from .config import global_config class WillingManager: @@ -38,11 +39,14 @@ class WillingManager: current_willing *= 0.1 print(f"表情包, 当前意愿: {current_willing}") + print(f"放大系数_interested_rate: {global_config.response_interested_rate_amplifier}") + interested_rate *= global_config.response_interested_rate_amplifier #放大回复兴趣度 if interested_rate > 0.4: - print(f"兴趣度: {interested_rate}, 当前意愿: {current_willing}") - current_willing += interested_rate-0.1 + # print(f"兴趣度: {interested_rate}, 当前意愿: {current_willing}") + current_willing += interested_rate-0.4 - self.group_reply_willing[group_id] = min(current_willing, 3.0) + current_willing *= global_config.response_willing_amplifier #放大回复意愿 + # print(f"放大系数_willing: {global_config.response_willing_amplifier}, 当前意愿: {current_willing}") reply_probability = max((current_willing - 0.45) * 2, 0) if group_id not in config.talk_allowed_groups: @@ -50,11 +54,14 @@ class WillingManager: reply_probability = 0 if group_id in config.talk_frequency_down_groups: - reply_probability = reply_probability / 3.5 + reply_probability = reply_probability / global_config.down_frequency_rate reply_probability = min(reply_probability, 1) if reply_probability < 0: reply_probability = 0 + + + self.group_reply_willing[group_id] = min(current_willing, 3.0) return reply_probability def change_reply_willing_sent(self, group_id: int): diff --git a/src/plugins/memory_system/memory.py b/src/plugins/memory_system/memory.py index 9a4ffd466..f88888aa4 100644 --- a/src/plugins/memory_system/memory.py +++ b/src/plugins/memory_system/memory.py @@ -531,7 +531,8 @@ class Hippocampus: # 计算每个识别出的主题与记忆主题的相似度 for topic in topics: if debug_info: - print(f"\033[1;32m[{debug_info}]\033[0m 正在思考有没有见过: {topic}") + # print(f"\033[1;32m[{debug_info}]\033[0m 正在思考有没有见过: {topic}") + pass topic_vector = text_to_vector(topic) has_similar_topic = False @@ -549,11 +550,13 @@ class Hippocampus: if similarity >= similarity_threshold: has_similar_topic = True if debug_info: - print(f"\033[1;32m[{debug_info}]\033[0m 找到相似主题: {topic} -> {memory_topic} (相似度: {similarity:.2f})") + # print(f"\033[1;32m[{debug_info}]\033[0m 找到相似主题: {topic} -> {memory_topic} (相似度: {similarity:.2f})") + pass all_similar_topics.append((memory_topic, similarity)) if not has_similar_topic and debug_info: - print(f"\033[1;31m[{debug_info}]\033[0m 没有见过: {topic} ,呃呃") + # print(f"\033[1;31m[{debug_info}]\033[0m 没有见过: {topic} ,呃呃") + pass return all_similar_topics diff --git a/src/plugins/models/utils_model.py b/src/plugins/models/utils_model.py index 3a7656a28..c70c26ff9 100644 --- a/src/plugins/models/utils_model.py +++ b/src/plugins/models/utils_model.py @@ -226,7 +226,7 @@ class LLM_request: await asyncio.sleep(wait_time) else: logger.critical(f"请求失败: {str(e)}") - logger.critical(f"请求头: {await self._build_headers()} 请求体: {payload}") + logger.critical(f"请求头: {await self._build_headers(no_key=True)} 请求体: {payload}") raise RuntimeError(f"API请求失败: {str(e)}") logger.error("达到最大重试次数,请求仍然失败") @@ -324,12 +324,19 @@ class LLM_request: reasoning = "" return content, reasoning - async def _build_headers(self) -> dict: + async def _build_headers(self, no_key: bool = False) -> dict: """构建请求头""" - return { - "Authorization": f"Bearer {self.api_key}", - "Content-Type": "application/json" - } + if no_key: + return { + "Authorization": f"Bearer **********", + "Content-Type": "application/json" + } + else: + return { + "Authorization": f"Bearer {self.api_key}", + "Content-Type": "application/json" + } + # 防止小朋友们截图自己的key async def generate_response(self, prompt: str) -> Tuple[str, str]: """根据输入的提示生成模型的异步响应""" diff --git a/template/bot_config_template.toml b/template/bot_config_template.toml index ababbbf21..59d053cc1 100644 --- a/template/bot_config_template.toml +++ b/template/bot_config_template.toml @@ -17,6 +17,11 @@ prompt_schedule = "一个曾经学习地质,现在学习心理学和脑科学的 min_text_length = 2 # 与麦麦聊天时麦麦只会回答文本大于等于此数的消息 max_context_size = 15 # 麦麦获得的上文数量 emoji_chance = 0.2 # 麦麦使用表情包的概率 +thinking_timeout = 10 # 麦麦思考时间 + +response_willing_amplifier = 1 # 麦麦回复意愿放大系数,一般为1 +response_interested_rate_amplifier = 1 # 麦麦回复兴趣度放大系数,听到记忆里的内容时放大系数 +down_frequency_rate = 3.5 # 降低回复频率的群组回复意愿降低系数 ban_words = [ # "403","张三" ]