2020from src .modules .config .schemas .base import BaseProviderConfig
2121from src .modules .logging import get_logger
2222from src .modules .types .base .decision_provider import DecisionProvider
23+ from src .modules .prompts .template_override_service import (
24+ TemplateOverrideService ,
25+ OverrideConfig ,
26+ )
2327
2428from .router_adapter import RouterAdapter
2529
@@ -81,6 +85,25 @@ class ConfigSchema(BaseProviderConfig):
8185 action_cooldown_seconds : float = Field (default = 5.0 , gt = 0.0 , description = "同一 Action 的最小间隔(秒)" )
8286 max_suggested_actions : int = Field (default = 3 , ge = 1 , le = 10 , description = "每条消息最大建议数量" )
8387
88+ # 提示词覆盖配置
89+ enable_prompt_override : bool = Field (
90+ default = True ,
91+ description = "是否启用 MaiBot 提示词覆盖功能"
92+ )
93+ override_template_name : str = Field (
94+ default = "amaidesu_override" ,
95+ description = "覆盖模板组名(作用域名称)"
96+ )
97+ override_templates : list [str ] = Field (
98+ default = [
99+ "replyer_prompt" , # think_level=1 时使用
100+ "replyer_prompt_0" , # think_level=0 时使用(轻量回复)
101+ "chat_target_group1" ,
102+ "chat_target_group2" ,
103+ ],
104+ description = "要覆盖的提示词名称列表"
105+ )
106+
84107 @classmethod
85108 def get_registration_info (cls ) -> Dict [str , Any ]:
86109 """
@@ -133,6 +156,14 @@ def __init__(self, config: Dict[str, Any], context: "ProviderContext"):
133156 # EventBus 引用(用于事件通知)
134157 self ._event_bus : Optional ["EventBus" ] = None
135158
159+ # 初始化提示词覆盖服务
160+ override_config = OverrideConfig (
161+ enabled = self .typed_config .enable_prompt_override ,
162+ template_name = self .typed_config .override_template_name ,
163+ templates = self .typed_config .override_templates ,
164+ )
165+ self ._override_service = TemplateOverrideService (override_config )
166+
136167 async def init (self ) -> None :
137168 """
138169 初始化 MaiCoreDecisionProvider
@@ -242,6 +273,20 @@ def _normalized_to_message_base(self, normalized: "NormalizedMessage") -> Option
242273 "original_platform" : normalized .source , # 保留原始平台信息
243274 "original_message_id" : message_id , # 存储原始 message_id 用于关联响应
244275 }
276+
277+ # 构建 template_info(如果启用)
278+ template_info = self ._override_service .build_template_info ()
279+
280+ # 构建 group_info(直播间作为群聊处理)
281+ # MaiBot 通过 group_info 是否存在来判断是群聊还是私聊
282+ # 群聊会使用 replyer_prompt,私聊会使用 private_replyer_prompt
283+ from maim_message import GroupInfo
284+ group_info = GroupInfo (
285+ platform = self .platform ,
286+ group_id = "live_room" , # 直播间群组ID
287+ group_name = "直播间" , # 直播间名称
288+ )
289+
245290 message = MessageBase (
246291 message_info = BaseMessageInfo (
247292 message_id = message_id ,
@@ -250,11 +295,27 @@ def _normalized_to_message_base(self, normalized: "NormalizedMessage") -> Option
250295 time = normalized .timestamp ,
251296 format_info = format_info ,
252297 additional_config = additional_config ,
298+ template_info = template_info , # 新增:注入 template_info
299+ group_info = group_info , # 新增:注入 group_info(群聊标识)
253300 ),
254301 message_segment = seg ,
255302 raw_message = normalized .text , # 添加原始消息内容
256303 )
257304
305+ # 调试日志
306+ if template_info :
307+ self .logger .debug (
308+ f"消息携带 template_info: "
309+ f"template_name={ template_info .template_name } , "
310+ f"templates={ list (template_info .template_items .keys ())} "
311+ )
312+ if group_info :
313+ self .logger .debug (
314+ f"消息携带 group_info: "
315+ f"group_id={ group_info .group_id } , "
316+ f"group_name={ group_info .group_name } "
317+ )
318+
258319 return message
259320 except Exception as e :
260321 self .logger .error (f"转换为 MessageBase 失败: { e } " , exc_info = True )
@@ -281,6 +342,22 @@ async def decide(self, normalized_message: "NormalizedMessage") -> None:
281342 return
282343
283344 try :
345+ # 打印发送的 maim-message 结构(调试用)
346+ self .logger .info ("发送到 MaiCore 的消息结构:" )
347+ self .logger .info (f" - message_id: { message .message_info .message_id } " )
348+ self .logger .info (f" - platform: { message .message_info .platform } " )
349+ self .logger .info (f" - user_info: { message .message_info .user_info } " )
350+ self .logger .info (f" - group_info: { message .message_info .group_info } " )
351+ self .logger .info (f" - template_info: { message .message_info .template_info } " )
352+ if message .message_info .group_info :
353+ self .logger .info (f" - group_id: { message .message_info .group_info .group_id } " )
354+ self .logger .info (f" - group_name: { message .message_info .group_info .group_name } " )
355+ if message .message_info .template_info :
356+ self .logger .info (f" - template_default: { message .message_info .template_info .template_default } " )
357+ self .logger .info (f" - template_name: { message .message_info .template_info .template_name } " )
358+ self .logger .info (f" - template_items keys: { list (message .message_info .template_info .template_items .keys ()) if message .message_info .template_info .template_items else None } " )
359+ # 打印完整消息字典(调试用)
360+ self .logger .debug (f"完整消息字典: { message .to_dict ()} " )
284361 await self ._router_adapter .send (message )
285362 self .logger .debug (f"消息已发送至 MaiCore (id: { message .message_info .message_id } )" )
286363 except Exception as e :
0 commit comments