From 7fd5dc9a4a087baec1523fd8d8608832918ac994 Mon Sep 17 00:00:00 2001 From: minecraft1024a Date: Sun, 7 Sep 2025 13:02:10 +0800 Subject: [PATCH] =?UTF-8?q?feat(planner):=20=E4=BC=98=E5=8C=96=E4=B8=BB?= =?UTF-8?q?=E5=8A=A8=E5=AF=B9=E8=AF=9D=E5=86=B3=E7=AD=96=E5=B9=B6=E8=AE=B0?= =?UTF-8?q?=E5=BD=95=E5=8A=A8=E4=BD=9C=E5=8E=86=E5=8F=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在主动对话规划器中引入最近的动作历史作为决策依据,以避免重复或不合时宜的主动行为。同时,在主动回复后,将该行为作为动作信息存储到数据库中,以便于未来的决策和分析。 - 在 `ActionPlanner` 中,获取并向prompt中添加最近5条动作历史记录 - 在 `ProactiveThinker` 中,当主动回复成功后,调用 `store_action_info` 记录动作 - 移除了 `@user` 插件中已废弃的 `planner_type` 属性 --- src/chat/chat_loop/proactive/proactive_thinker.py | 8 ++++++++ src/chat/planner_actions/planner.py | 13 +++++++++++++ src/plugins/built_in/at_user_plugin/plugin.py | 1 - 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/chat/chat_loop/proactive/proactive_thinker.py b/src/chat/chat_loop/proactive/proactive_thinker.py index 66236bb32..3522c0dd4 100644 --- a/src/chat/chat_loop/proactive/proactive_thinker.py +++ b/src/chat/chat_loop/proactive/proactive_thinker.py @@ -15,6 +15,7 @@ from src.plugin_system.base.component_types import ComponentType from src.config.config import global_config from src.chat.utils.chat_message_builder import get_raw_msg_before_timestamp_with_chat, build_readable_messages_with_id from src.mood.mood_manager import mood_manager +from src.common.database.sqlalchemy_database_api import store_action_info if TYPE_CHECKING: from ..cycle_processor import CycleProcessor @@ -237,6 +238,13 @@ class ProactiveThinker: await self.cycle_processor.response_handler.send_response( response_set, time.time(), action_result.get("action_message") ) + await store_action_info( + chat_stream=self.context.chat_stream, + action_name="proactive_reply", + action_data={"topic": topic, "response": response_text}, + action_prompt_display=f"主动发起对话: {topic}", + action_done=True, + ) else: logger.error(f"{self.context.log_prefix} 主动思考生成回复失败。") diff --git a/src/chat/planner_actions/planner.py b/src/chat/planner_actions/planner.py index fae78a1e9..107b5b10d 100644 --- a/src/chat/planner_actions/planner.py +++ b/src/chat/planner_actions/planner.py @@ -98,6 +98,9 @@ def init_prompt(): ## 最近的聊天内容 {chat_content_block} +## 最近的动作历史 +{actions_before_now_block} + ## 任务 基于以上所有信息(特别是最近的聊天内容),分析当前情况,决定是否适合主动开启一个**新的、但又与当前氛围相关**的话题。 @@ -678,6 +681,15 @@ class ActionPlanner: ) prompt_template = await global_prompt_manager.get_prompt_async("proactive_planner_prompt") + actions_before_now = get_actions_by_timestamp_with_chat( + chat_id=self.chat_id, + timestamp_start=time.time() - 3600, + timestamp_end=time.time(), + limit=5, + ) + actions_before_now_block = build_readable_actions(actions=actions_before_now) + actions_before_now_block = f"你刚刚选择并执行过的action是:\n{actions_before_now_block}" + prompt = prompt_template.format( time_block=time_block, identity_block=identity_block, @@ -685,6 +697,7 @@ class ActionPlanner: mood_block=mood_block, long_term_memory_block=long_term_memory_block, chat_content_block=chat_content_block or "最近没有聊天内容。", + actions_before_now_block=actions_before_now_block, ) return prompt, [] diff --git a/src/plugins/built_in/at_user_plugin/plugin.py b/src/plugins/built_in/at_user_plugin/plugin.py index 1611486be..48262cd04 100644 --- a/src/plugins/built_in/at_user_plugin/plugin.py +++ b/src/plugins/built_in/at_user_plugin/plugin.py @@ -24,7 +24,6 @@ class AtAction(BaseAction): activation_type = ActionActivationType.LLM_JUDGE # 消息接收时激活(?) parallel_action = False chat_type_allow = ChatType.GROUP - planner_type = PlannerType.BIG_BRAIN # === 功能描述(必须填写)=== action_parameters = {"user_name": "需要艾特用户的名字", "at_message": "艾特用户时要发送的消,注意消息里不要有@"}