From 9d28c3660d6f0659c744f02020e328e03eb59fc0 Mon Sep 17 00:00:00 2001 From: Bakadax Date: Wed, 30 Apr 2025 22:03:19 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B5=8B=E8=AF=95prompt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../group_nickname/nickname_processor.py | 4 +- .../heartFC_chat/heartflow_prompt_builder.py | 40 ++++++++++++++++--- 2 files changed, 35 insertions(+), 9 deletions(-) diff --git a/src/plugins/group_nickname/nickname_processor.py b/src/plugins/group_nickname/nickname_processor.py index ae75851c..669b3094 100644 --- a/src/plugins/group_nickname/nickname_processor.py +++ b/src/plugins/group_nickname/nickname_processor.py @@ -1,11 +1,10 @@ -# GroupNickname/nickname_processor.py import asyncio import traceback from multiprocessing import Process, Queue as mpQueue, Event from typing import Dict, Optional from pymongo import MongoClient -from pymongo.errors import ConnectionFailure, OperationFailure +from pymongo.errors import OperationFailure from src.common.logger_manager import get_logger # 导入日志管理器 from src.config.config import global_config # 导入全局配置 @@ -179,7 +178,6 @@ async def _nickname_processing_loop(queue: mpQueue, stop_event): logger.info("绰号处理循环已启动。") while not stop_event.is_set(): - logger.info("绰号处理循环正在运行...") try: if not queue.empty(): item = queue.get() diff --git a/src/plugins/heartFC_chat/heartflow_prompt_builder.py b/src/plugins/heartFC_chat/heartflow_prompt_builder.py index eafb2b67..216955c3 100644 --- a/src/plugins/heartFC_chat/heartflow_prompt_builder.py +++ b/src/plugins/heartFC_chat/heartflow_prompt_builder.py @@ -229,13 +229,8 @@ class PromptBuilder: if global_config.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(): + if message_list_before_now: for msg in message_list_before_now: sender_id = msg.get('sender_id') if sender_id: @@ -259,6 +254,7 @@ class PromptBuilder: except Exception as e: logger.error(f"Error getting or formatting nickname info for focus prompt: {e}", exc_info=True) + logger.debug(f"-------------------nickname_injection_str_______________________\n{nickname_injection_str}\n\n") prompt = await global_prompt_manager.format_prompt( "heart_flow_prompt", @@ -415,6 +411,38 @@ class PromptBuilder: else: schedule_prompt = "" + # 注入绰号信息 + nickname_injection_str = "" + if global_config.ENABLE_NICKNAME_MAPPING and chat_stream.group_info: + try: + group_id = str(chat_stream.group_info.group_id) + user_ids_in_context = set() + if message_list_before_now: + 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) + logger.debug(f"-------------------nickname_injection_str_______________________\n{nickname_injection_str}\n\n") + prompt = await global_prompt_manager.format_prompt( "reasoning_prompt_main", relation_prompt=relation_prompt,