From dbe9d616d217c30d31088b64dfaf4825d69e4853 Mon Sep 17 00:00:00 2001 From: tt-P607 <68868379+tt-P607@users.noreply.github.com> Date: Fri, 10 Oct 2025 23:35:16 +0800 Subject: [PATCH] =?UTF-8?q?refactor(maizone):=20=E5=8D=87=E7=BA=A7?= =?UTF-8?q?=E4=B8=8A=E4=B8=8B=E6=96=87=E6=A3=80=E7=B4=A2=E4=B8=BA=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E4=B8=AD=E5=BF=83=E6=A8=A1=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 此前的跨群聊上下文依赖于一个固定的互通组 (`maizone_context_group`),这种方式不够灵活且上下文相关性较弱。 本次重构将上下文获取逻辑全面切换至新引入的 `get_user_centric_context` API,以提升上下文的精准度和相关性。 - **内容生成 (`content_service`)**: 现在会检索机器人自身在所有聊天中的近期发言作为参考,使新生成的内容更贴近其当前活动与话题。 - **评论回复 (`qzone_service`)**: 在回复用户评论时,会检索该用户与机器人在其他聊天中的对话记录,从而生成更具个性化和情境感知能力的回复。 --- .../services/content_service.py | 12 ++++++---- .../services/qzone_service.py | 24 ++++++++++++++++--- 2 files changed, 29 insertions(+), 7 deletions(-) diff --git a/src/plugins/built_in/maizone_refactored/services/content_service.py b/src/plugins/built_in/maizone_refactored/services/content_service.py index 4761c4114..809d612b7 100644 --- a/src/plugins/built_in/maizone_refactored/services/content_service.py +++ b/src/plugins/built_in/maizone_refactored/services/content_service.py @@ -13,11 +13,11 @@ import aiohttp from maim_message import UserInfo from src.chat.message_receive.chat_stream import get_chat_manager +from src.plugin_system.apis.cross_context_api import get_user_centric_context from src.common.logger import get_logger from src.config.api_ada_configs import TaskConfig from src.llm_models.utils_model import LLMRequest from src.plugin_system.apis import config_api, generator_api, llm_api -from src.plugin_system.apis.cross_context_api import get_chat_history_by_group_name # 导入旧的工具函数,我们稍后会考虑是否也需要重构它 from ..utils.history_utils import get_send_history @@ -89,9 +89,13 @@ class ContentService: prompt += f"\n作为参考,这里有一些最近的聊天记录:\n---\n{context}\n---" # 添加跨群聊上下文 - cross_context = await get_chat_history_by_group_name("maizone_context_group") - if cross_context and "找不到名为" not in cross_context: - prompt += f"\n\n---跨群聊参考---\n{cross_context}\n---" + bot_user_id = config_api.get_global_config("bot.qq_account") + if bot_user_id: + cross_context = await get_user_centric_context( + user_id=bot_user_id, platform="qq", limit=5 + ) # limit可以根据需要调整 + if cross_context: + prompt += f"\n\n---跨群聊参考---\n{cross_context}\n---" # 添加历史记录以避免重复 prompt += "\n\n---历史说说记录---\n" diff --git a/src/plugins/built_in/maizone_refactored/services/qzone_service.py b/src/plugins/built_in/maizone_refactored/services/qzone_service.py index 02f9fa86a..bf6645e49 100644 --- a/src/plugins/built_in/maizone_refactored/services/qzone_service.py +++ b/src/plugins/built_in/maizone_refactored/services/qzone_service.py @@ -187,10 +187,28 @@ class QZoneService: async def _get_intercom_context(self, stream_id: str) -> str | None: """ - 获取互通组的聊天上下文。 + 获取用户的跨场景聊天上下文。 """ - # 实际的逻辑已迁移到 cross_context_api - return await cross_context_api.get_intercom_group_context_by_name("maizone_context_group") + if not stream_id: + return None + + from src.chat.message_receive.chat_stream import get_chat_manager + chat_manager = get_chat_manager() + stream = await chat_manager.get_stream(stream_id) + + if not stream or not stream.user_info: + return None + + user_id = stream.user_info.user_id + platform = stream.platform + + # 调用新的以用户为中心的上下文获取函数 + return await cross_context_api.get_user_centric_context( + user_id=user_id, + platform=platform, + limit=10, # 可以根据需要调整获取的消息数量 + exclude_chat_id=stream_id + ) async def _reply_to_own_feed_comments(self, feed: dict, api_client: dict): """处理对自己说说的评论并进行回复"""