diff --git a/src/chat/focus_chat/expressors/exprssion_learner.py b/src/chat/focus_chat/expressors/exprssion_learner.py index d908e939..942162bc 100644 --- a/src/chat/focus_chat/expressors/exprssion_learner.py +++ b/src/chat/focus_chat/expressors/exprssion_learner.py @@ -58,7 +58,7 @@ def init_prompt() -> None: {chat_str} 请从上面这段群聊中概括除了人名为"SELF"之外的人的语法和句法特点,只考虑纯文字,不要考虑表情包和图片 -不要总结【图片】,【动画表情】,[图片],[动画表情],[表达了...],不总结 表情符号 at @ 回复 和[回复] +不要总结【图片】,【动画表情】,[图片],[动画表情],不总结 表情符号 at @ 回复 和[回复] 不要涉及具体的人名,只考虑语法和句法特点, 语法和句法特点要包括,句子长短(具体字数),有何种语病,如何拆分句子。 总结成如下格式的规律,总结的内容要简洁,不浮夸: diff --git a/src/chat/focus_chat/heartFC_chat.py b/src/chat/focus_chat/heartFC_chat.py index f718623c..2d895eb7 100644 --- a/src/chat/focus_chat/heartFC_chat.py +++ b/src/chat/focus_chat/heartFC_chat.py @@ -90,6 +90,7 @@ class HeartFChatting: self.expressor = DefaultExpressor(chat_id=self.stream_id) self.action_manager = ActionManager() self.action_planner = ActionPlanner(log_prefix=self.log_prefix, action_manager=self.action_manager, stream_id=self.stream_id, chat_stream=self.chat_stream) + self.action_planner = ActionPlanner(log_prefix=self.log_prefix, action_manager=self.action_manager) # --- 处理器列表 --- diff --git a/src/chat/focus_chat/heartflow_prompt_builder.py b/src/chat/focus_chat/heartflow_prompt_builder.py index 5044b307..f1db498d 100644 --- a/src/chat/focus_chat/heartflow_prompt_builder.py +++ b/src/chat/focus_chat/heartflow_prompt_builder.py @@ -703,84 +703,6 @@ class PromptBuilder: # 返回所有找到的内容,用换行分隔 return "\n".join(str(result["content"]) for result in results) - async def build_planner_prompt( - self, - is_group_chat: bool, # Now passed as argument - chat_target_info: Optional[dict], # Now passed as argument - observed_messages_str: str, - current_mind: Optional[str], - structured_info: Dict[str, Any], - current_available_actions: Dict[str, str], - cycle_info: Optional[str], - nickname_info: str, - # replan_prompt: str, # Replan logic still simplified - ) -> str: - """构建 Planner LLM 的提示词 (获取模板并填充数据)""" - try: - # --- Determine chat context --- - chat_context_description = "你现在正在一个群聊中" - chat_target_name = None # Only relevant for private - if not is_group_chat and chat_target_info: - chat_target_name = ( - chat_target_info.get("person_name") or chat_target_info.get("user_nickname") or "对方" - ) - chat_context_description = f"你正在和 {chat_target_name} 私聊" - # --- End determining chat context --- - - # ... (Copy logic from HeartFChatting._build_planner_prompt here) ... - # Structured info block - structured_info_block = "" - if structured_info: - structured_info_block = f"以下是一些额外的信息:\n{structured_info}\n" - - # Chat content block - chat_content_block = "" - if observed_messages_str: - # Use triple quotes for multi-line string literal - chat_content_block = f"""观察到的最新聊天内容如下: ---- -{observed_messages_str} ----""" - else: - chat_content_block = "当前没有观察到新的聊天内容。\\n" - - # Current mind block - mind_info_prompt = "" - if current_mind: - mind_info_prompt = f"对聊天的规划:{current_mind}" - else: - mind_info_prompt = "你刚参与聊天" - - individuality = Individuality.get_instance() - prompt_personality = individuality.get_prompt(x_person=2, level=2) - - action_options_text = "当前你可以选择的行动有:\n" - action_keys = list(current_available_actions.keys()) - for name in action_keys: - desc = current_available_actions[name] - action_options_text += f"- '{name}': {desc}\n" - - planner_prompt_template = await global_prompt_manager.get_prompt_async("planner_prompt") - - prompt = planner_prompt_template.format( - bot_name=global_config.BOT_NICKNAME, - nickname_info=nickname_info, - prompt_personality=prompt_personality, - chat_context_description=chat_context_description, - structured_info_block=structured_info_block, - chat_content_block=chat_content_block, - mind_info_prompt=mind_info_prompt, - cycle_info_block=cycle_info, - action_options_text=action_options_text, - moderation_prompt=await global_prompt_manager.get_prompt_async("moderation_prompt"), - ) - return prompt - - except Exception as e: - logger.error(f"[PromptBuilder] 构建 Planner 提示词时出错: {e}") - logger.error(traceback.format_exc()) - return "[构建 Planner Prompt 时出错]" - def weighted_sample_no_replacement(items, weights, k) -> list: """ diff --git a/src/chat/focus_chat/planners/planner.py b/src/chat/focus_chat/planners/planner.py index d49c3d76..6af7ffa2 100644 --- a/src/chat/focus_chat/planners/planner.py +++ b/src/chat/focus_chat/planners/planner.py @@ -19,6 +19,7 @@ from src.chat.focus_chat.planners.action_factory import ActionManager from src.chat.focus_chat.planners.action_factory import ActionInfo from src.chat.utils.chat_message_builder import get_raw_msg_before_timestamp_with_chat from src.plugins.group_nickname.nickname_manager import nickname_manager + logger = get_logger("planner") install(extra_lines=3) @@ -76,6 +77,7 @@ class ActionPlanner: self.action_manager = action_manager self.stream_id = stream_id self.chat_stream = chat_stream + self.action_manager = action_manager async def plan(self, all_plan_info: List[InfoBase], cycle_timers: dict) -> Dict[str, Any]: """ @@ -278,6 +280,7 @@ class ActionPlanner: nickname_injection_str = await nickname_manager.get_nickname_prompt_injection( self.chat_stream, message_list_before_now ) + planner_prompt_template = await global_prompt_manager.get_prompt_async("planner_prompt") prompt = planner_prompt_template.format(