From 903e0f278a3fe397e5b826288d3e142f0088d800 Mon Sep 17 00:00:00 2001 From: SengokuCola <1026294844@qq.com> Date: Sun, 7 Dec 2025 01:17:36 +0800 Subject: [PATCH] =?UTF-8?q?remove=EF=BC=9A=E8=87=AA=E5=8A=A8=E9=A2=91?= =?UTF-8?q?=E7=8E=87=E6=8E=A7=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../frequency_control/frequency_control.py | 163 ------------------ src/chat/heart_flow/frequency_control.py | 50 ++++++ src/chat/heart_flow/heartFC_chat.py | 5 +- src/dream/tools/__init__.py | 1 + src/dream/tools/create_chat_history_tool.py | 1 + src/dream/tools/delete_chat_history_tool.py | 1 + src/dream/tools/delete_jargon_tool.py | 1 + src/dream/tools/finish_maintenance_tool.py | 1 + .../tools/get_chat_history_detail_tool.py | 1 + src/dream/tools/search_chat_history_tool.py | 1 + src/dream/tools/update_chat_history_tool.py | 1 + src/dream/tools/update_jargon_tool.py | 1 + src/plugin_system/apis/frequency_api.py | 2 +- 13 files changed, 61 insertions(+), 168 deletions(-) delete mode 100644 src/chat/frequency_control/frequency_control.py create mode 100644 src/chat/heart_flow/frequency_control.py diff --git a/src/chat/frequency_control/frequency_control.py b/src/chat/frequency_control/frequency_control.py deleted file mode 100644 index 897a92cc..00000000 --- a/src/chat/frequency_control/frequency_control.py +++ /dev/null @@ -1,163 +0,0 @@ -from datetime import datetime -import time -import asyncio -from typing import Dict - -from src.chat.utils.chat_message_builder import ( - get_raw_msg_by_timestamp_with_chat, - build_readable_messages, -) -from src.chat.utils.prompt_builder import Prompt, global_prompt_manager -from src.config.config import global_config, model_config -from src.llm_models.utils_model import LLMRequest -from src.common.logger import get_logger -from src.plugin_system.apis import frequency_api - - -def init_prompt(): - Prompt( - """{name_block} -{time_block} -你现在正在聊天,请根据下面的聊天记录判断是否有用户觉得你的发言过于频繁或者发言过少 -{message_str} - -如果用户觉得你的发言过于频繁,请输出"过于频繁",否则输出"正常" -如果用户觉得你的发言过少,请输出"过少",否则输出"正常" -**你只能输出以下三个词之一,不要输出任何其他文字、解释或标点:** -- 正常 -- 过于频繁 -- 过少 -""", - "frequency_adjust_prompt", - ) - - -logger = get_logger("frequency_control") - - -class FrequencyControl: - """简化的频率控制类,仅管理不同chat_id的频率值""" - - def __init__(self, chat_id: str): - self.chat_id = chat_id - # 发言频率调整值 - self.talk_frequency_adjust: float = 1.0 - - self.last_frequency_adjust_time: float = 0.0 - self.frequency_model = LLMRequest( - model_set=model_config.model_task_config.utils_small, request_type="frequency.adjust" - ) - # 频率调整锁,防止并发执行 - self._adjust_lock = asyncio.Lock() - - def get_talk_frequency_adjust(self) -> float: - """获取发言频率调整值""" - return self.talk_frequency_adjust - - def set_talk_frequency_adjust(self, value: float) -> None: - """设置发言频率调整值""" - self.talk_frequency_adjust = max(0.1, min(5.0, value)) - - async def trigger_frequency_adjust(self) -> None: - # 使用异步锁防止并发执行 - async with self._adjust_lock: - # 在锁内检查,避免并发触发 - current_time = time.time() - previous_adjust_time = self.last_frequency_adjust_time - - msg_list = get_raw_msg_by_timestamp_with_chat( - chat_id=self.chat_id, - timestamp_start=previous_adjust_time, - timestamp_end=current_time, - ) - - if current_time - previous_adjust_time < 160 or len(msg_list) <= 20: - return - - # 立即更新调整时间,防止并发触发 - self.last_frequency_adjust_time = current_time - - try: - new_msg_list = get_raw_msg_by_timestamp_with_chat( - chat_id=self.chat_id, - timestamp_start=previous_adjust_time, - timestamp_end=current_time, - limit=20, - limit_mode="latest", - ) - - message_str = build_readable_messages( - new_msg_list, - replace_bot_name=True, - timestamp_mode="relative", - read_mark=0.0, - show_actions=False, - ) - time_block = f"当前时间:{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}" - bot_name = global_config.bot.nickname - bot_nickname = ( - f",也有人叫你{','.join(global_config.bot.alias_names)}" if global_config.bot.alias_names else "" - ) - name_block = f"你的名字是{bot_name}{bot_nickname},请注意哪些是你自己的发言。" - - prompt = await global_prompt_manager.format_prompt( - "frequency_adjust_prompt", - name_block=name_block, - time_block=time_block, - message_str=message_str, - ) - response, (reasoning_content, _, _) = await self.frequency_model.generate_response_async( - prompt, - ) - - # logger.info(f"频率调整 prompt: {prompt}") - # logger.info(f"频率调整 response: {response}") - - if global_config.debug.show_prompt: - logger.info(f"频率调整 prompt: {prompt}") - logger.info(f"频率调整 response: {response}") - logger.info(f"频率调整 reasoning_content: {reasoning_content}") - - final_value_by_api = frequency_api.get_current_talk_value(self.chat_id) - - # LLM依然输出过多内容时取消本次调整。合法最多4个字,但有的模型可能会输出一些markdown换行符等,需要长度宽限 - if len(response) < 20: - if "过于频繁" in response: - logger.info(f"频率调整: 过于频繁,调整值到{final_value_by_api}") - self.talk_frequency_adjust = max(0.1, min(1.5, self.talk_frequency_adjust * 0.8)) - elif "过少" in response: - logger.info(f"频率调整: 过少,调整值到{final_value_by_api}") - self.talk_frequency_adjust = max(0.1, min(1.5, self.talk_frequency_adjust * 1.2)) - except Exception as e: - logger.error(f"频率调整失败: {e}") - # 即使失败也保持时间戳更新,避免频繁重试 - - -class FrequencyControlManager: - """频率控制管理器,管理多个聊天流的频率控制实例""" - - def __init__(self): - self.frequency_control_dict: Dict[str, FrequencyControl] = {} - - def get_or_create_frequency_control(self, chat_id: str) -> FrequencyControl: - """获取或创建指定聊天流的频率控制实例""" - if chat_id not in self.frequency_control_dict: - self.frequency_control_dict[chat_id] = FrequencyControl(chat_id) - return self.frequency_control_dict[chat_id] - - def remove_frequency_control(self, chat_id: str) -> bool: - """移除指定聊天流的频率控制实例""" - if chat_id in self.frequency_control_dict: - del self.frequency_control_dict[chat_id] - return True - return False - - def get_all_chat_ids(self) -> list[str]: - """获取所有有频率控制的聊天ID""" - return list(self.frequency_control_dict.keys()) - - -init_prompt() - -# 创建全局实例 -frequency_control_manager = FrequencyControlManager() diff --git a/src/chat/heart_flow/frequency_control.py b/src/chat/heart_flow/frequency_control.py new file mode 100644 index 00000000..d3be7801 --- /dev/null +++ b/src/chat/heart_flow/frequency_control.py @@ -0,0 +1,50 @@ +from typing import Dict + +from src.common.logger import get_logger + +logger = get_logger("frequency_control") + + +class FrequencyControl: + """简化的频率控制类,仅管理不同chat_id的频率值""" + + def __init__(self, chat_id: str): + self.chat_id = chat_id + # 发言频率调整值 + self.talk_frequency_adjust: float = 1.0 + + def get_talk_frequency_adjust(self) -> float: + """获取发言频率调整值""" + return self.talk_frequency_adjust + + def set_talk_frequency_adjust(self, value: float) -> None: + """设置发言频率调整值""" + self.talk_frequency_adjust = max(0.1, min(5.0, value)) + + +class FrequencyControlManager: + """频率控制管理器,管理多个聊天流的频率控制实例""" + + def __init__(self): + self.frequency_control_dict: Dict[str, FrequencyControl] = {} + + def get_or_create_frequency_control(self, chat_id: str) -> FrequencyControl: + """获取或创建指定聊天流的频率控制实例""" + if chat_id not in self.frequency_control_dict: + self.frequency_control_dict[chat_id] = FrequencyControl(chat_id) + return self.frequency_control_dict[chat_id] + + def remove_frequency_control(self, chat_id: str) -> bool: + """移除指定聊天流的频率控制实例""" + if chat_id in self.frequency_control_dict: + del self.frequency_control_dict[chat_id] + return True + return False + + def get_all_chat_ids(self) -> list[str]: + """获取所有有频率控制的聊天ID""" + return list(self.frequency_control_dict.keys()) + + +# 创建全局实例 +frequency_control_manager = FrequencyControlManager() diff --git a/src/chat/heart_flow/heartFC_chat.py b/src/chat/heart_flow/heartFC_chat.py index 4a54ae6f..3c3abd3e 100644 --- a/src/chat/heart_flow/heartFC_chat.py +++ b/src/chat/heart_flow/heartFC_chat.py @@ -17,7 +17,7 @@ from src.chat.planner_actions.action_modifier import ActionModifier from src.chat.planner_actions.action_manager import ActionManager from src.chat.heart_flow.hfc_utils import CycleDetail from src.express.expression_learner import expression_learner_manager -from src.chat.frequency_control.frequency_control import frequency_control_manager +from src.chat.heart_flow.frequency_control import frequency_control_manager from src.express.reflect_tracker import reflect_tracker_manager from src.express.expression_reflector import expression_reflector_manager from src.jargon import extract_and_store_jargon @@ -329,9 +329,6 @@ class HeartFChatting: start_time = time.time() async with global_prompt_manager.async_message_scope(self.chat_stream.context.get_template_name()): asyncio.create_task(self.expression_learner.trigger_learning_for_chat()) - asyncio.create_task( - frequency_control_manager.get_or_create_frequency_control(self.stream_id).trigger_frequency_adjust() - ) # 添加curious检测任务 - 检测聊天记录中的矛盾、冲突或需要提问的内容 # asyncio.create_task(check_and_make_question(self.stream_id)) diff --git a/src/dream/tools/__init__.py b/src/dream/tools/__init__.py index 488675a6..ef3b8be3 100644 --- a/src/dream/tools/__init__.py +++ b/src/dream/tools/__init__.py @@ -8,3 +8,4 @@ dream agent 工具实现模块。 + diff --git a/src/dream/tools/create_chat_history_tool.py b/src/dream/tools/create_chat_history_tool.py index 43535c29..dde4ffaf 100644 --- a/src/dream/tools/create_chat_history_tool.py +++ b/src/dream/tools/create_chat_history_tool.py @@ -64,3 +64,4 @@ def make_create_chat_history(chat_id: str): + diff --git a/src/dream/tools/delete_chat_history_tool.py b/src/dream/tools/delete_chat_history_tool.py index 02cedf94..e7b9755d 100644 --- a/src/dream/tools/delete_chat_history_tool.py +++ b/src/dream/tools/delete_chat_history_tool.py @@ -27,3 +27,4 @@ def make_delete_chat_history(chat_id: str): # chat_id 目前未直接使用, + diff --git a/src/dream/tools/delete_jargon_tool.py b/src/dream/tools/delete_jargon_tool.py index 2cf38e56..0ff1c218 100644 --- a/src/dream/tools/delete_jargon_tool.py +++ b/src/dream/tools/delete_jargon_tool.py @@ -27,3 +27,4 @@ def make_delete_jargon(chat_id: str): # chat_id 目前未直接使用,预留 + diff --git a/src/dream/tools/finish_maintenance_tool.py b/src/dream/tools/finish_maintenance_tool.py index dbb9f15f..66f8c99e 100644 --- a/src/dream/tools/finish_maintenance_tool.py +++ b/src/dream/tools/finish_maintenance_tool.py @@ -18,3 +18,4 @@ def make_finish_maintenance(chat_id: str): # chat_id 目前未直接使用, + diff --git a/src/dream/tools/get_chat_history_detail_tool.py b/src/dream/tools/get_chat_history_detail_tool.py index b8b0da54..4f9e16b7 100644 --- a/src/dream/tools/get_chat_history_detail_tool.py +++ b/src/dream/tools/get_chat_history_detail_tool.py @@ -53,3 +53,4 @@ def make_get_chat_history_detail(chat_id: str): # chat_id 目前未直接使用 + diff --git a/src/dream/tools/search_chat_history_tool.py b/src/dream/tools/search_chat_history_tool.py index 0c7d1da6..105f6676 100644 --- a/src/dream/tools/search_chat_history_tool.py +++ b/src/dream/tools/search_chat_history_tool.py @@ -224,3 +224,4 @@ def make_search_chat_history(chat_id: str): + diff --git a/src/dream/tools/update_chat_history_tool.py b/src/dream/tools/update_chat_history_tool.py index 2070facf..8c0caf63 100644 --- a/src/dream/tools/update_chat_history_tool.py +++ b/src/dream/tools/update_chat_history_tool.py @@ -53,3 +53,4 @@ def make_update_chat_history(chat_id: str): # chat_id 目前未直接使用, + diff --git a/src/dream/tools/update_jargon_tool.py b/src/dream/tools/update_jargon_tool.py index 9ebfe7b9..b50504ae 100644 --- a/src/dream/tools/update_jargon_tool.py +++ b/src/dream/tools/update_jargon_tool.py @@ -53,3 +53,4 @@ def make_update_jargon(chat_id: str): # chat_id 目前未直接使用,预留 + diff --git a/src/plugin_system/apis/frequency_api.py b/src/plugin_system/apis/frequency_api.py index bc906186..9cde1d90 100644 --- a/src/plugin_system/apis/frequency_api.py +++ b/src/plugin_system/apis/frequency_api.py @@ -1,5 +1,5 @@ from src.common.logger import get_logger -from src.chat.frequency_control.frequency_control import frequency_control_manager +from src.chat.heart_flow.frequency_control import frequency_control_manager from src.config.config import global_config logger = get_logger("frequency_api")