diff --git a/src/chat/focus_chat/planners/planner.py b/src/chat/focus_chat/planners/planner.py index a0b0ccf9c..298da3115 100644 --- a/src/chat/focus_chat/planners/planner.py +++ b/src/chat/focus_chat/planners/planner.py @@ -29,14 +29,6 @@ def init_prompt(): {self_info_block} {extra_info_block} {memory_str} -你需要基于以下信息决定如何参与对话 -这些信息可能会有冲突,请你整合这些信息,并选择一个最合适的action: -{chat_content_block} - -{mind_info_block} -{cycle_info_block} - -请综合分析聊天内容和你看到的新消息,参考聊天规划,选择合适的action: 注意,除了下面动作选项之外,你在群聊里不能做其他任何事情,这是你能力的边界,现在请你选择合适的action: {action_options_text} @@ -46,6 +38,15 @@ def init_prompt(): {moderation_prompt} +你需要基于以下信息决定如何参与对话 +这些信息可能会有冲突,请你整合这些信息,并选择一个最合适的action: +{chat_content_block} + +{mind_info_block} +{cycle_info_block} + +请综合分析聊天内容和你看到的新消息,参考聊天规划,选择合适的action: + 请你以下面格式输出你选择的action: {{ "action": "action_name", @@ -270,7 +271,6 @@ class ActionPlanner: ) -> str: """构建 Planner LLM 的提示词 (获取模板并填充数据)""" try: - memory_str = "" if global_config.focus_chat.parallel_processing: memory_str = "" @@ -278,10 +278,7 @@ class ActionPlanner: memory_str = "以下是当前在聊天中,你回忆起的记忆:\n" for running_memory in running_memorys: memory_str += f"{running_memory['topic']}: {running_memory['content']}\n" - - - - + chat_context_description = "你现在正在一个群聊中" chat_target_name = None # Only relevant for private if not is_group_chat and chat_target_info: diff --git a/src/plugins/vtb_action/__init__.py b/src/plugins/vtb_action/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/plugins/vtb_action/actions/__init__.py b/src/plugins/vtb_action/actions/__init__.py new file mode 100644 index 000000000..7a85b034b --- /dev/null +++ b/src/plugins/vtb_action/actions/__init__.py @@ -0,0 +1 @@ +from . import vtb_action # noqa diff --git a/src/plugins/vtb_action/actions/vtb_action.py b/src/plugins/vtb_action/actions/vtb_action.py new file mode 100644 index 000000000..79d6914fb --- /dev/null +++ b/src/plugins/vtb_action/actions/vtb_action.py @@ -0,0 +1,74 @@ +from src.common.logger_manager import get_logger +from src.chat.focus_chat.planners.actions.plugin_action import PluginAction, register_action +from typing import Tuple + +logger = get_logger("vtb_action") + + +@register_action +class VTBAction(PluginAction): + """VTB虚拟主播动作处理类""" + + action_name = "vtb_action" + action_description = "使用虚拟主播预设动作表达心情或感觉,适用于需要生动表达情感的场景" + action_parameters = { + "text": "描述想要表达的心情或感觉的文本内容,必填,应当是对情感状态的自然描述", + } + action_require = [ + "当需要表达特定情感或心情时使用", + "当用户明确要求使用虚拟主播动作时使用", + "当回应内容需要更生动的情感表达时使用", + "当想要通过预设动作增强互动体验时使用", + ] + default = True # 设为默认动作 + associated_types = ["vtb_text"] + + async def process(self) -> Tuple[bool, str]: + """处理VTB虚拟主播动作""" + logger.info(f"{self.log_prefix} 执行VTB动作: {self.reasoning}") + + # 获取要表达的心情或感觉文本 + text = self.action_data.get("text") + + if not text: + logger.error(f"{self.log_prefix} 执行VTB动作时未提供文本内容") + return False, "执行VTB动作失败:未提供文本内容" + + # 处理文本使其更适合VTB动作表达 + processed_text = self._process_text_for_vtb(text) + + try: + # 发送VTB动作消息 + await self.send_message(type="vtb_text", data=processed_text) + + logger.info(f"{self.log_prefix} VTB动作执行成功,文本内容: {processed_text}") + return True, "VTB动作执行成功" + + except Exception as e: + logger.error(f"{self.log_prefix} 执行VTB动作时出错: {e}") + return False, f"执行VTB动作时出错: {e}" + + def _process_text_for_vtb(self, text: str) -> str: + """ + 处理文本使其更适合VTB动作表达 + - 优化情感表达的准确性 + - 规范化心情描述格式 + - 确保文本适合虚拟主播动作系统理解 + """ + # 简单示例实现 + processed_text = text.strip() + + # 移除多余的空格和换行 + import re + + processed_text = re.sub(r"\s+", " ", processed_text) + + # 确保文本长度适中,避免过长的描述 + if len(processed_text) > 100: + processed_text = processed_text[:100] + "..." + + # 如果文本为空,提供默认的情感描述 + if not processed_text: + processed_text = "平静" + + return processed_text