默认关闭绰号系统,prompt注入

pull/914/head
Bakadax 2025-04-30 15:33:32 +08:00
parent 561f0c81f8
commit 14b63958e4
3 changed files with 43 additions and 12 deletions

View File

@ -1,8 +1,7 @@
# GroupNickname/config.py
import threading
# 功能总开关
ENABLE_NICKNAME_MAPPING = True # 设置为 False 可完全禁用此功能
ENABLE_NICKNAME_MAPPING = False # 设置为 False 可完全禁用此功能
# --- LLM 相关配置 (示例,你需要根据实际情况修改) ---
# 用于绰号映射分析的 LLM 模型配置

View File

@ -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.")

View File

@ -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,