From c45f0e9cea79053dfb9c6bb8ba202fd070e6bc38 Mon Sep 17 00:00:00 2001 From: Windpicker-owo <3431391539@qq.com> Date: Sun, 30 Nov 2025 19:54:36 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E5=90=8D=E7=A7=B0=E7=9A=84=E6=96=B9=E6=B3=95?= =?UTF-8?q?=EF=BC=8C=E4=BC=98=E5=8C=96=E8=B6=85=E6=97=B6=E5=86=B3=E7=AD=96?= =?UTF-8?q?=E5=92=8C=E4=B8=BB=E5=8A=A8=E6=80=9D=E8=80=83=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E5=90=8D=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kokoro_flow_chatter/proactive_thinker.py | 36 ++++++++++++++++--- 1 file changed, 32 insertions(+), 4 deletions(-) diff --git a/src/plugins/built_in/kokoro_flow_chatter/proactive_thinker.py b/src/plugins/built_in/kokoro_flow_chatter/proactive_thinker.py index d1abab669..9d7e7438a 100644 --- a/src/plugins/built_in/kokoro_flow_chatter/proactive_thinker.py +++ b/src/plugins/built_in/kokoro_flow_chatter/proactive_thinker.py @@ -277,6 +277,9 @@ class ProactiveThinker: logger.info(f"[ProactiveThinker] 等待超时: user={session.user_id}") try: + # 获取用户名 + user_name = await self._get_user_name(session.user_id, session.stream_id) + # 获取聊天流 chat_stream = await self._get_chat_stream(session.stream_id) @@ -292,7 +295,7 @@ class ProactiveThinker: # 调用 Planner 生成超时决策 plan_response = await generate_plan( session=session, - user_name=session.user_id, # 这里可以改进,获取真实用户名 + user_name=user_name, situation_type="timeout", chat_stream=chat_stream, available_actions=action_manager.get_using_actions(), @@ -304,7 +307,7 @@ class ProactiveThinker: if action.type == "kfc_reply": success, reply_text = await generate_reply_text( session=session, - user_name=session.user_id, + user_name=user_name, thought=plan_response.thought, situation_type="timeout", chat_stream=chat_stream, @@ -449,6 +452,9 @@ class ProactiveThinker: logger.info(f"[ProactiveThinker] 主动思考触发: user={session.user_id}, reason={trigger_reason}") try: + # 获取用户名 + user_name = await self._get_user_name(session.user_id, session.stream_id) + # 获取聊天流 chat_stream = await self._get_chat_stream(session.stream_id) @@ -476,7 +482,7 @@ class ProactiveThinker: # 调用 Planner plan_response = await generate_plan( session=session, - user_name=session.user_id, + user_name=user_name, situation_type="proactive", chat_stream=chat_stream, available_actions=action_manager.get_using_actions(), @@ -501,7 +507,7 @@ class ProactiveThinker: if action.type == "kfc_reply": success, reply_text = await generate_reply_text( session=session, - user_name=session.user_id, + user_name=user_name, thought=plan_response.thought, situation_type="proactive", chat_stream=chat_stream, @@ -565,6 +571,28 @@ class ProactiveThinker: logger.warning(f"[ProactiveThinker] 获取 chat_stream 失败: {e}") return None + async def _get_user_name(self, user_id: str, stream_id: str) -> str: + """获取用户名称(优先从 person_info 获取)""" + try: + from src.person_info.person_info import get_person_info_manager + + person_info_manager = get_person_info_manager() + # 从 stream_id 提取 platform(格式通常是 platform_xxx) + platform = "qq" # 默认平台 + if "_" in stream_id: + platform = stream_id.split("_")[0] + + person_id = person_info_manager.get_person_id(platform, user_id) + person_name = await person_info_manager.get_value(person_id, "person_name") + + if person_name: + return person_name + except Exception as e: + logger.debug(f"[ProactiveThinker] 获取用户名失败: {e}") + + # 回退到 user_id + return user_id + def get_stats(self) -> dict: """获取统计信息""" return {