From 14b63958e4978fb244e5fa6b3d9478c195e5f4e2 Mon Sep 17 00:00:00 2001 From: Bakadax Date: Wed, 30 Apr 2025 15:33:32 +0800 Subject: [PATCH] =?UTF-8?q?=E9=BB=98=E8=AE=A4=E5=85=B3=E9=97=AD=E7=BB=B0?= =?UTF-8?q?=E5=8F=B7=E7=B3=BB=E7=BB=9F=EF=BC=8Cprompt=E6=B3=A8=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/plugins/group_nickname/config.py | 3 +- src/plugins/heartFC_chat/heartFC_chat.py | 11 +---- .../heartFC_chat/heartflow_prompt_builder.py | 41 +++++++++++++++++++ 3 files changed, 43 insertions(+), 12 deletions(-) diff --git a/src/plugins/group_nickname/config.py b/src/plugins/group_nickname/config.py index 35fff354..eb001419 100644 --- a/src/plugins/group_nickname/config.py +++ b/src/plugins/group_nickname/config.py @@ -1,8 +1,7 @@ -# GroupNickname/config.py import threading # 功能总开关 -ENABLE_NICKNAME_MAPPING = True # 设置为 False 可完全禁用此功能 +ENABLE_NICKNAME_MAPPING = False # 设置为 False 可完全禁用此功能 # --- LLM 相关配置 (示例,你需要根据实际情况修改) --- # 用于绰号映射分析的 LLM 模型配置 diff --git a/src/plugins/heartFC_chat/heartFC_chat.py b/src/plugins/heartFC_chat/heartFC_chat.py index f5e1ddb7..ab8f9605 100644 --- a/src/plugins/heartFC_chat/heartFC_chat.py +++ b/src/plugins/heartFC_chat/heartFC_chat.py @@ -751,17 +751,8 @@ class HeartFChatting: user_name_map = {} if user_ids_in_history: platform = anchor_message.chat_stream.platform - # 尝试批量获取 person_name - # 假设 relationship_manager 有 get_person_names_batch(platform, user_ids) try: - # 注意:你需要实现 get_person_names_batch 方法 - # names_data = await relationship_manager.get_person_names_batch(platform, list(user_ids_in_history)) - # 这里暂时用单次获取代替,如果你的 relationship_manager 没有批量方法 - names_data = {} - for user_id in user_ids_in_history: - name = await relationship_manager.get_person_name(platform, user_id) - if name: - names_data[user_id] = name + names_data = await relationship_manager.get_person_names_batch(platform, list(user_ids_in_history)) except AttributeError: logger.warning("relationship_manager does not have get_person_names_batch method. Falling back to single lookups.") diff --git a/src/plugins/heartFC_chat/heartflow_prompt_builder.py b/src/plugins/heartFC_chat/heartflow_prompt_builder.py index a0f266d6..4ea9f3e7 100644 --- a/src/plugins/heartFC_chat/heartflow_prompt_builder.py +++ b/src/plugins/heartFC_chat/heartflow_prompt_builder.py @@ -14,6 +14,9 @@ from ..moods.moods import MoodManager from ..memory_system.Hippocampus import HippocampusManager from ..schedule.schedule_generator import bot_schedule from ..knowledge.knowledge_lib import qa_manager +from src.plugins.group_nickname.config import ENABLE_NICKNAME_MAPPING +from src.plugins.group_nickname.nickname_utils import select_nicknames_for_prompt, format_nickname_prompt_injection +from src.plugins.person_info.relationship_manager import relationship_manager logger = get_logger("prompt") @@ -222,6 +225,44 @@ class PromptBuilder: logger.debug("开始构建prompt") + # --- [修改] 注入绰号信息 --- + nickname_injection_str = "" + if ENABLE_NICKNAME_MAPPING and chat_stream.group_info: + try: + group_id = str(chat_stream.group_info.group_id) + # 提取上下文中的用户 ID (需要 message_list_before_now 变量在此可用) + # 假设 message_list_before_now 在此函数作用域内可用 + user_ids_in_context = set() + # !!! 注意: 确保 message_list_before_now 在这里是可访问的 !!! + # 如果不是,你需要从 chat_stream 或其他地方重新获取或传递它 + # 假设 message_list_before_now 存在 + if 'message_list_before_now' in locals() or 'message_list_before_now' in globals(): + for msg in message_list_before_now: + sender_id = msg.get('sender_id') + if sender_id: + user_ids_in_context.add(str(sender_id)) + else: + logger.warning("Variable 'message_list_before_now' not found for nickname injection in focus prompt.") + + + if user_ids_in_context: + platform = chat_stream.platform + # --- 调用批量获取群组绰号的方法 --- + all_nicknames_data = await relationship_manager.get_users_group_nicknames( + platform, list(user_ids_in_context), group_id + ) + # --- 结束调用 --- + + if all_nicknames_data: + selected_nicknames = select_nicknames_for_prompt(all_nicknames_data) + nickname_injection_str = format_nickname_prompt_injection(selected_nicknames) + if nickname_injection_str: + logger.debug(f"Injecting nickname info into focus prompt:\n{nickname_injection_str}") + + except Exception as e: + logger.error(f"Error getting or formatting nickname info for focus prompt: {e}", exc_info=True) + # --- [结束修改] --- + prompt = await global_prompt_manager.format_prompt( "heart_flow_prompt", info_from_tools=structured_info_prompt,